$wa->shop->products по произвольному полю

В таблице "shop_product" есть поле "yml_id", я пытаюсь получить товары следующим образом:

{$testAnalog = '15364,29916,29977,29978,47732,48174,48175,6923,6924'}
{$test = $wa->shop->products('search/yml_id='|cat:$testAnalog, null, null, ['fields' => '*,sku_filtered'])}

мне возвращает пустой массив.

Подскажите, пожалуйста, что нужно порправить?

1 ответ

  • 2
    Михаил Ушенин 9 января 2025 12:58 #

    Если это поле было добавлено в таблицу вашим плагином, то добавьте в плагин обработчик хука products_collection, а в шаблоне вызывайте метод примерно в таком виде:

    {$wa->shop->products('my_plugin/yml_id='|cat:$testAnalog, null, null, ['fields' => '*,sku_filtered']}

    Здесь вместо my_plugin укажите идентификатор своего плагина.

    Вызов метода getHash() экземпляра класса коллекции в обработчике хука примерно, как показано ниже

    public function productsCollection($params)
    {
        /** @var shopProductsCollection */
        $collection = $params['collection'];
        $hash = $collection->getHash();
    
        // проверка на то, что при вызове {$wa->shop->products()}
        // в самом начале хеша указан идентификатор вашего плагина
        if (($hash[0] ?? null) == $this->id) {
            parse_str($hash[1] ?? '', $params);
    
            if (!empty($params['yml_id'])) {
                $collection->addWhere('...');
            }
    
            return true;
        } else {
            return false;
        }
    }

    даст вам информацию о параметрах, указанных после идентификатора плагина и косой черты за ним:

    yml_id='|cat:$testAnalog

    В зависимости от значений этих параметров (в вашем случае только одного параметра — yml_id) вызовите метод addWhere() экземпляра коллекции, чтобы отфильтровать требуемый список товаров по этому критерию.

Эта тема в архиве. Добавление комментариев к ней отключено.