$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 ответ
Если это поле было добавлено в таблицу вашим плагином, то добавьте в плагин обработчик хука 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) вызовите метод addWhere() экземпляра коллекции, чтобы отфильтровать требуемый список товаров по этому критерию.