Opencart 2. Описания товаров на странице категории должны умереть

Лирическое отступление: на странице категории у товаров выводится обрезанный кусок текста (описания), который мало того, что является дублем основного описания (что с точки зрения 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 } ?>

Пускай атрибуты выводятся ненумерованным списком, так симпатичнее.

В той же статье по ссылке выше приводится решение для случая, когда характеристик (атрибутов нет), чтобы выводилось описание.

Вывод определенных атрибутов в карточке товара

Здесь и здесь можно посмотреть решения, выбрать подходящее.

По-моему всё.

5 1 голос
Рейтинг статьи
Будь другом, дай знать:
Вы уже голосовали

Читайте также:

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии