Лирическое отступление: на странице категории у товаров выводится обрезанный кусок текста (описания), который мало того, что является дублем основного описания (что с точки зрения 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 } ?>
Пускай атрибуты выводятся ненумерованным списком, так симпатичнее.
В той же статье по ссылке выше приводится решение для случая, когда характеристик (атрибутов нет), чтобы выводилось описание.
Вывод определенных атрибутов в карточке товара
Здесь и здесь можно посмотреть решения, выбрать подходящее.
По-моему всё.