PrestaShop: как получить ProductListingLazyArray из моих продуктов - PullRequest
0 голосов
/ 13 июля 2020
• 1000 шаблон продуктов - например, «настоятельно рекомендуемые продукты»

Я завершаю sh всю Backend часть и получаю идентификаторы в виде массива выбранных продуктов.

Как я уже упоминал, я хочу использовать шаблоны по умолчанию, которые доступны после установки fre sh, и то, что я нашел, помещено здесь 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} не выглядит так в моем массиве. .. * 1 019 *

Есть ли у вас какие-нибудь идеи, что я могу сделать, чтобы «преобразовать» мой набор продуктов в ProductListingLazyArray ?? Или я ошибаюсь?

СПАСИБО всем вам!

1 Ответ

0 голосов
/ 14 июля 2020

Решение Я просто "подделал" поиск и проверяю, есть ли данные в моем массиве:

/**
 * 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;
}
...