PrestaShop:如何从我的产品中获取 ProductListingLazyArray

我对 PrestaShop 还很陌生 - 抱歉,如果我问一些基本的问题

我目前正在开发一个模块,该模块应将您在后端选择的产品显示为默认产品模板中的附加部分 - 例如“强烈推荐的产品”

我完成了整个后端部分,并获取 ID 作为所选产品的数组。

正如我提到的,我想使用全新安装后可用的默认模板,我发现的模板放置在此处themes\classic\templates\catalog\_partials\products.tpl

现在我的大问题是:我无法获得应有的数据......

如果我调试例如默认搜索行为中显示的产品(这也使用此模板),我会看到类似的内容

object(PrestaShop\PrestaShop\Adapter\Presenter\Product\ProductListingLazyArray)#323 (11) { ["imageRetriever":"Pr .....

但当我得到我的产品时

new Product($productId, true);

它不是 ProductListingLazyArray ...它只是一个包含产品的数组...并且我在前端没有看到任何内容(当然我没有看到,因为例如{$product.id_product}在我的数组中看起来不像这样...

您有什么想法可以将我的产品数组“转换”为 ProductListingLazyArray 吗?还是我的想法错了?

谢谢大家!


红颜莎娜
浏览 87回答 1
1回答

慕婉清6462132

解决方案我只是“伪造”搜索并检查数据是否在我的数组中:/** * creates relevant product information for frontend output *  * @param array $allSelectedProductIds array with all id's of the selected products  * @param int $languageId language id of the shop you are in *  * @return array all product information we need for our frontend rendering */public function getFrontendProductInformation($allSelectedProductIds, $languageId){    // set default category Home    $category = new Category((int)2);    // create new product search proider    $searchProvider = new CategoryProductSearchProvider(        $this->context->getTranslator(),        $category    );    // set actual context    $context = new ProductSearchContext($this->context);    // create new search query    $query = new ProductSearchQuery();    $query->setResultsPerPage(PHP_INT_MAX)->setPage(1);    $query->setSortOrder(new SortOrder('product', 'position', 'asc'));    $result = $searchProvider->runQuery(        $context,        $query    );    // Product handling - to get relevant data    $assembler = new ProductAssembler($this->context);    $presenterFactory = new ProductPresenterFactory($this->context);    $presentationSettings = $presenterFactory->getPresentationSettings();    $presenter = new ProductListingPresenter(        new ImageRetriever(            $this->context->link        ),        $this->context->link,        new PriceFormatter(),        new ProductColorsRetriever(),        $this->context->getTranslator()    );    $products = array();    foreach ($result->getProducts() as $rawProduct) {        $productId = $rawProduct['id_product'];        if(in_array($productId, $allSelectedProductIds)) {            $product = $presenter->present(                $presentationSettings,                $assembler->assembleProduct($rawProduct),                $this->context->language            );            array_push($products, $product);        }    }    return $products;}
打开App,查看更多内容
随时随地看视频慕课网APP