Вывести категорию товара в списке на главной
Товары лежат в списке. Список вывожу на главную. Нужно вывести категорию каждого товара в шаблон списка. Желательно вывести категорию 1го уровня каждого товара. Спасибо.
Товары лежат в списке. Список вывожу на главную. Нужно вывести категорию каждого товара в шаблон списка. Желательно вывести категорию 1го уровня каждого товара. Спасибо.
4 ответа
Вот такой пример должен вам помочь.
{foreach $wa->shop->productSet('promo') as $product}
{$p = $wa->shop->product($product)}
{wa_dumpc($p.categories)} {* Debug-вывод всего, что мы знаем о категориях этого продукта. *}
{/foreach}
Делая так, надо понимать, что вызывать $wa->shop->product() в цикле - это плохая практика. Много запросов к БД получается. Для маленьких списков из 3-5 товаров это нормально, но несколько десятков так выводить на одной странице лучше не надо.
Способ поэкономнее:
1. Создайте файл wa-apps/shop/lib/classes/shopCustom.class.php:
<?php
class shopCustom
{
public static function categoryName($product, $products)
{
static $categories;
if ($product === reset($products)) {
$category_ids = array();
foreach ($products as $p) {
$category_ids[] = $p['category_id'];
}
$model = new waModel();
$sql =
"SELECT id, name
FROM shop_category
WHERE id IN(i:category_ids)
";
$categories = $model->query($sql, array('category_ids' => $category_ids))->fetchAll('id', 1);
}
return ifset($categories[$product['category_id']]);
}
}
2. Внутрь цикла перебора товаров в шаблоне вида list-thumbs.html {foreach $products as $p}...{/foreach} добавьте вызов метода {shopCustom::categoryName($p, $products)}
Спасибо! Пожалуйста, подскажите как добавить в этом коде ссылку на категорию? Сейчас отображается только название.
Вот такое решие для вывода ссылки на товар и категорию товара.
{foreach $products as $p name=foo}
<a href="{$p.frontend_url}">{$p.name|truncate:50:"..."}</a>
{$c=$wa->shop->category($p.category_id) }
<a href="/category/{$c.url}/">{$c.name|truncate:50:"..."}</a>
{/foreach}