为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
红颜莎娜 2023-07-30 13:13:11
我对 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 吗?还是我的想法错了?谢谢大家!
查看完整描述

1 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

解决方案

我只是“伪造”搜索并检查数据是否在我的数组中:


/**

 * 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;

}


查看完整回答
反对 回复 2023-07-30
  • 1 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信