I want to get products By Id but it the way i am doing this doesnot return some product details in case of configurable
<?php
namespace VendorMobileAppModelApi;
use VendorMobileAppApiProductInterface;
use MagentoCatalogModelResourceModelProductCollectionFactory as ProductsCollectionFactory;
use VendorMobileAppHelperData as ApiHelper;
use MagentoCatalogModelCategoryFactory;
use MagentoSalesModelResourceModelReportBestsellersCollectionFactory as BestSellersCollectionFactory;
use MagentoReportsModelResourceModelProductCollectionFactory as MostViewedCollectionFactory;
use MagentoFrameworkWebapiRestRequest as ApiRequest;
use MagentoFrameworkEscaper;
/**
* Store Details Provider
*/
class ProductRepository implements ProductInterface {
/**
* @var ProductsCollectionFactory
*/
protected $collectionFactory;
/**
* @var BestSellersCollectionFactory
*/
protected $_bestSellersCollectionFactory;
/**
* @var BestSellersCollectionFactory
*/
protected $_mostViewedProductFactory;
/**
* @var CategoryFactory
*/
protected $categoryFactory;
/**
* @var ApiRequest
*/
protected $request;
/**
* @var Escaper
*/
protected $escaper;
/**
* Constructor VirtualProductInformation Class
*
* @param ProductsCollectionFactory $collectionFactory,
* @param BestSellersCollectionFactory $bestSellersCollectionFactory,
* @param MostViewedCollectionFactory $mostViewedProductFactory,
* @param CategoryFactory $categoryFactory,
* @param ApiRequest $request,
* @param Escaper $escaper
* @param ApiHelper $apiHelper
*
*/
public function __construct(
ProductsCollectionFactory $collectionFactory,
BestSellersCollectionFactory $bestSellersCollectionFactory,
MostViewedCollectionFactory $mostViewedProductFactory,
CategoryFactory $categoryFactory,
ApiRequest $request,
Escaper $escaper,
ApiHelper $apiHelper
) {
$this->collectionFactory = $collectionFactory;
$this->_bestSellersCollectionFactory = $bestSellersCollectionFactory;
$this->_mostViewedProductFactory = $mostViewedProductFactory;
$this->categoryFactory = $categoryFactory;
$this->request = $request;
$this->escaper = $escaper;
$this->apiHelper = $apiHelper;
}
/**
* Get Products By Category
*
* @api
* @param int $categoryId
* @param int $pageSize
* @param string $storeCode
*
* @return array
*/
public function getProductsByCategory( $categoryId, $pageSize, $storeCode ) {
// Return If Module is Disabled
if ( 0 === $this->apiHelper->getModuleStatus() ) {
$response[ 0 ][ 'success' ] = 0;
$response[ 0 ][ 'message' ] = $this->apiHelper->translateMessage( 'Setting Api is disabled', $storeCode );
return $response;
}
$storeId = $this->apiHelper->getStoreByCode( $this->escaper->escapeHtml( $storeCode ) );
$categoryId = $this->escaper->escapeHtml( $categoryId );
$productPerPage = $this->escaper->escapeHtml( $pageSize );
$category = $this->categoryFactory->create()->load($categoryId);
$category->setStoreId($storeId);
if($category) {
$productCollection = $category->getProductCollection();
$productCollection->setPagesize($productPerPage);
echo "<pre>"; print_r($productCollection); exit;
$response[0]['success'] = 1;
$response[ 0 ][ 'data' ] = $this->getProductData( $productCollection );
} else {
$response[0]['success'] = 0;
$response[ 0 ][ 'message' ] = $this->apiHelper->translateMessage("The Category with given Id doesnot exist", $storeCode);
}
return $response;
}
/**
* Get product data including image URLs.
*
* @param MagentoCatalogModelResourceModelProductCollection $products
* @return array
*/
protected function getProductData( $products ) {
$data = [];
foreach ( $products as $product ) {
$productData = $product->getData();
$productData[ 'image_url' ] = $this->getProductImageUrl( $product );
$data[] = $productData;
}
return $data;
}
/**
* Get product image URL.
*
* @param MagentoCatalogModelProduct $product
* @return string|null
*/
protected function getProductImageUrl( $product ) {
$image = $product->getImage();
if ( $image && $image != 'no_selection' ) {
$mediaUrl = $this->apiHelper->getMediaUrl();
return $mediaUrl . 'catalog/product' . $image;
}
return null;
}
}