Лирическое отступление: на странице категории у товаров выводится обрезанный кусок текста (описания), который мало того, что является дублем основного описания (что с точки зрения seo плохо), так еще и в этом маленьком описании вырезаются все html-теги.
В итоге получается всё слеплено в одну сумбурную кучу без переноса строк и т.д., что не есть гуд.
Что делать с этим описанием?
Сделать хотя бы переносы строк (оформить)
Это как раз то, о чем я писал в этой статье. Суть такая, что в этом описании по умолчанию вырезаются все html-теги, поэтому оно слипается всё в одну кучу. А мы добавляем в исключения теги, которые не хотим, чтобы вырезались, например теги <br> и <p>.
В итоге, сохраняем переносы строк. Уже лучше, но всё равно дубль текста. Не айс.
Можно заменить на мини-описание (отдельное)
Встретил модуль, который добавляет в админке отдельное поле, куда можно написать новое мини-описание.
Решение для стандартной темы и, кажется не для всех версий. Кому подходит такое решение – лучше почитать эту ветку обсуждений полностью.
Да и если у вас товаром много в магазине, то писать вручную для каждого это мини-описание…. ну такое себе.
Меняем описание на атрибуты
Это как раз то, что мне и нужно было. Я хотел в этом описании выводить что-то полезное, а не просто дубль основного описания.
Причем не все атрибуты, а только некоторые.
Сначала регистрируем атрибуты в контроллере.
/catalog/controller/product/category.php
Находим:
$data['products'][] = array(
'product_id' => $result['product_id'],
'thumb' => $image,
Меняем на:
$data['products'][] = array(
'product_id' => $result['product_id'],
'attribute_groups' => $this->model_catalog_product->getProductAttributes($result['product_id']),
'thumb' => $image,
там же чуть ниже находим:
'rating' => $result['rating'],
'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
);
}
после него вставить код, чтобы получилось вот так:
'rating' => $result['rating'],
'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
);
}
$data['attribute_ids'] = array(111); // 111- это id нужных атрибутов
Осталось только красиво вывести это дело в шаблоне:
В файле /catalog/view/theme/default/template/product/category.tpl
находим эту строку и закрываем ее в комменты:
<!-- <p><?php echo $product['description']; ?></p> -->
Вместо нее у нас будет работать такой код, вставляем его:
<?php if ($product['attribute_groups']) { ?>
<?php foreach ($product['attribute_groups'] as $attribute_group) { ?>
<ul>
<?php foreach ($attribute_group['attribute'] as $attribute) { ?>
<?php if (in_array($attribute['attribute_id'], $attribute_ids)) { ?>
<li><?php echo $attribute['name']; ?> - <?php echo $attribute['text']; ?></li>
<?php } ?>
<?php } ?>
</ul>
<?php } ?>
<?php } ?>
Пускай атрибуты выводятся ненумерованным списком, так симпатичнее.
В той же статье по ссылке выше приводится решение для случая, когда характеристик (атрибутов нет), чтобы выводилось описание.
Вывод определенных атрибутов в карточке товара
Здесь и здесь можно посмотреть решения, выбрать подходящее.
По-моему всё.