Думал как создать доп. лейблы а-ля “снято с производства” и решил использовать теги.
Внутри карточки товара лейблы сделал, а вот со списком товаров проблема. По умолчанию в списке товаров не выводятся теги.
Стал искать в модуле tags что либо. Нашел вот такой frontend хук внутри /app/addons/tags/controllers/frontend/products.post.php:
if ($mode == 'view' && Registry::get('addons.tags.tags_for_products') == 'Y') {
$product = Tygh::$app['view']->getTemplateVars('product');
list($tags) = fn_get_tags(array(
'object_type' => 'P',
'object_id' => $product['product_id'],
'status' => array('A')
));
$product['tags'] = $tags;
Tygh::$app['view']->assign('product', $product);
}
Если я правильно понял - массив данных продукта наполняется элементом tags. Но почему тогда нет данных в карточке товара?
Искать внутри /app/controllers/frontend/products.php? Ведь в нем все функции, которые отвечают за вывод данных о товаре?
а как сделали у себя для списка товаров? Там ведь надо вытягивать массив $products - и в цикле к каждому вытягивать тэги
Внутри карточки товара вывожу вот так в /design/themes/site_name/templates/common/product_data.tpl:
{* Ярлык [Снято с производства] *}
{foreach from=$product.tags item="tag" name="tags"}
{if $tag.tag == "Снято с производства"}
{include
file="views/products/components/product_label.tpl"
label_meta="product__label--outofproduction"
label_text=__("out_of_production")
label_mini=$product_labels_mini
label_static=$product_labels_static
label_rounded=$product_labels_rounded
}
{/if}
{/foreach}
И это работает так как в карточке $product.tags имеет значения. А вот в категории $product.tags пуст.
в шаблоне понятно, шаблон выводит полученные данные.
контроллеры - фронтенд - categories.php
мод view, у меня строка 105
list($products, $search) = fn_get_products($params, Registry::get('settings.Appearance.products_per_page'), CART_LANGUAGE);
здесь получается массив products с товарами
то есть надо сделать categories.post.php
что-то типа
if ($mode == 'view' && Registry::get('addons.tags.tags_for_products') == 'Y') {
$products = Tygh::$app['view']->getTemplateVars('products');
foreach ($products as &$product) {
list($tags) = fn_get_tags(array(
'object_type' => 'P',
'object_id' => $product['product_id'],
'status' => array('A')
));
$product['tags'] = $tags;
}
Tygh::$app['view']->assign('products', $products);
надо свериться с форматом массива products только, это я как пример набросал
1 лайк
Большое спасибо! Все получилось.
Я пытался сначала сделать по аналогии с /var/www/html/seversb.ru/app/addons/tags/controllers/frontend/products.post.php, но там используется $product. Так как это один товар, а не множество, как в списке товаров. А надо было брать переменную $products.
Создал отдельный модуль. В нем файл /app/addons/module_name/controllers/frontend/categories.post.php
В него Ваш код:
use Tygh\Registry;
if (!defined('BOOTSTRAP')) { die('Access denied'); }
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
return;
}
if ($mode == 'view' && Registry::get('addons.tags.tags_for_products') == 'Y') {
$products = Tygh::$app['view']->getTemplateVars('products');
foreach ($products as &$product) {
list($tags) = fn_get_tags(array(
'object_type' => 'P',
'object_id' => $product['product_id'],
'status' => array('A')
));
$product['tags'] = $tags;
}
Tygh::$app['view']->assign('products', $products);
}
3 лайка