Opencart: Вывод атрибутов вместо описания в категориях. Opencart 2 атрибуты в категории
Выводим атрибуты товара в категории при наведении на товар.
Доброго времени суток уважаемые пользователи!
Давно я здесь ничего не писал, сегодня одному из клиентов потребовалось вывести в категориях, в акциях, в поиске и.т.д... возможность вывода кроме основной информации о товаре еще и все атрибуты которые присутствуют в товаре, в связи с этим я решил здесь опубликовать решение данного вопроса.
Данная статья как и многие остальные на нашем сайте по большому счету пишется как заметка для самого себя, но я буду рад если и Вам пригодится данная информация.
И так, сегодня я постараюсь вкратце описать все действия о том как в списках товаров на сайте , то есть в категориях и им подобных вывести атрибуты к товарам , делать мы будем два решения, первое это мы выведем все доступные атрибуты товара и второй способ это вывод только тех атрибутов которые Вам нужны то есть выборочно.
Все действия мы будем проводить на opencart 1,5...
Первым делом нам нужно внести некоторые изменения в контролер категории ( Если Вы добавляете для акций , поиска, производителей ... То все делаете по аналогии)
Открываем файл :
catalog/controller/product/category.php
catalog/controller/product/category.php |
И в нем после строчки:
'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 300) . '..',
'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 300) . '..', |
Добавим:
'attribute_groups' => $this->model_catalog_product->getProductAttributes($result['product_id']),
'attribute_groups' => $this->model_catalog_product->getProductAttributes($result['product_id']), |
С контролером закончили, теперь приступим к файлу category.tpl нашего активного шаблона в магазине:
catalog/view/theme/ВАШ_ШАБЛОН/template/product/category.tpl
catalog/view/theme/ВАШ_ШАБЛОН/template/product/category.tpl |
Находим блок отвечающий за вывод товара, у каждого шаблона его стили могут быть разные и в произвольном месте добавляем код указанный ниже я добавил его в своем шаблоне перед последним DIV блока товара.
<div> <div> <?php if($product['attribute_groups']) { ?> <table> <?php foreach($product['attribute_groups'] as $attribute_group) { ?> <tbody> <?php foreach($attribute_group['attribute'] as $attribute) { ?> <tr> <td><?php echo $attribute['name']; ?>:</td> <td><span><?php echo $attribute['text']; ?></span></td> </tr> <?php } ?> </tbody> <?php } ?> </table> <?php } ?> </div> </div>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <div> <div> <?php if($product['attribute_groups']) { ?> <table> <?php foreach($product['attribute_groups'] as $attribute_group) { ?>
<tbody> <?php foreach($attribute_group['attribute'] as $attribute) { ?> <tr> <td><?php echo $attribute['name']; ?>:</td> <td><span><?php echo $attribute['text']; ?></span></td>
</tr> <?php } ?> </tbody> <?php } ?> </table> <?php } ?> </div> </div> |
Указанным выше куском кода мы выводим все доступные атрибуты товара.
Если же Вам нужно выводить именно определенные выборочные атрибуты то вместо вышеуказанного куска кода мы добавляем следующий код:
<div> <div> <?php if($product['attribute_groups']) { ?> <table> <?php foreach($product['attribute_groups'] as $attribute_group) { ?> <tbody> <?php foreach($attribute_group['attribute'] as $attribute) { ?> <?php if(in_array($attribute['attribute_id'], array(12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28))) { ?> <tr> <td><?php echo $attribute['name']; ?>:</td> <td><span><?php echo $attribute['text']; ?></span></td> </tr> <?php } ?> <?php } ?> </tbody> <?php } ?> </table> <?php } ?> </div> </div>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <div> <div> <?php if($product['attribute_groups']) { ?> <table> <?php foreach($product['attribute_groups'] as $attribute_group) { ?>
<tbody> <?php foreach($attribute_group['attribute'] as $attribute) { ?> <?php if(in_array($attribute['attribute_id'], array(12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28))) { ?> <tr> <td><?php echo $attribute['name']; ?>:</td> <td><span><?php echo $attribute['text']; ?></span></td>
</tr> <?php } ?> <?php } ?> </tbody> <?php } ?> </table> <?php } ?> </div> </div> |
Обратите свое внимание на список циферок в коде 12, 13, 14, 15,..... это как раз и есть наши выбранные указанные атрибуты, то есть здесь мы через запятую добавляем ID атрибута.
Узнать ID атрибута очень просто, перейдите в админ панели в вкладку атрибуты, и напротив нужного нам для отображения атрибута жмем изменить , в строке браузера смотрим ссылку, в самом конце ссылки будет отображен ID атрибута.
В общей сложности у Вас уже должны в категории появится атрибуты, но смотреться они будут без форматирования, мягко говоря криво.
Чтобы наши атрибуты красиво смотрелись нам нужно добавить для них немного стилей, в данном примере стили я буду указывать именно те что я использовал для своего сайта, Вам же скорей всего придется их немного подправлять под себя!
И так в данном примере я вывожу атрибуты именно при наведении на товар, то есть изначально они скрыты, а как только наводим указатель мышки на товар появляются нужные нам атрибуты. пример Вы можете посмотреть на фото в статье!
И так добавляем в файл стилей вашего шаблона код стилей:
/*Окно при наведении в категории*/ .product-grid > div > div .buy-buttons { position: absolute; display: none; left: 0px; right: 0px; z-index: 10; background: #fff; box-shadow: inset 0px 0px 0px 1px #e8e8e8; } .product-grid > div > div:hover .buy-buttons { display: block; padding-top: 10px; padding-bottom: 10px; margin-left: 3px; margin-right: 3px; border-left: 1px solid #6caddf; border-right: 1px solid #6caddf; box-shadow: 0px 1px 0px 0px #6caddf; } .buy-buttons-text { padding-left: 15px; } .buy-buttons-text table { width: 100%; } .buy-buttons-text tr { } .buy-buttons-text tr td { font-weight: 700; color: #028298; } .buy-buttons-text tr td span { font-weight: 700; color: #747474; padding-left: 10px; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | /*Окно при наведении в категории*/
.product-grid > div > div .buy-buttons { position: absolute; display: none; left: 0px; right: 0px; z-index: 10; background: #fff; box-shadow: inset 0px 0px 0px 1px #e8e8e8; } .product-grid > div > div:hover .buy-buttons { display: block; padding-top: 10px; padding-bottom: 10px; margin-left: 3px; margin-right: 3px; border-right: 1px solid #6caddf; box-shadow: 0px 1px 0px 0px #6caddf; }
.buy-buttons-text { padding-left: 15px; } .buy-buttons-text table { width: 100%; } .buy-buttons-text tr { } .buy-buttons-text tr td { font-weight: 700; color: #028298; } .buy-buttons-text tr td span { font-weight: 700; color: #747474; padding-left: 10px; } |
Вот в принципе и все.
есть несколько вариантов данного решения, но на мое мнения для меня он показался самым правильным и простым.
Общим пробуйте если что не получается или Вы хотите предложить другое решение пишите в комментариях!
web-stydia.com
Вывод атрибутов вместо описания в категориях. — LOCO.RU
catalog\controller\product\category.php, 199
'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '..', 'attribute_groups' => $this->model_catalog_product->getProductAttributes($result['product_id']), 'price' => $price,Выводить атрибуты в строчку:
catalog\view\theme\default\template\product\category.tpl, 76Заменяем этот код:
<div> <?php if($product['attribute_groups']) { ?> <table> <?php foreach($product['attribute_groups'] as $attribute_group) { ?> <thead><!--названия групп--> <tr> <td colspan="2"><?php echo $attribute_group['name']; ?></td> </tr> </thead><!----> <tbody> <?php foreach($attribute_group['attribute'] as $attribute) { ?> <tr> <td><?php echo $attribute['name']; ?></td> <td><?php echo $attribute['text']; ?></td> </tr> <?php } ?> </tbody> <?php } ?> </table> <?php } ?> </div>Разделитель — косая черта, мне кажется так органичней. Стиль для этой черты (синий цвет color="#00A7C7"), чтобы было более заметно где заканчивается один атрибут и начинается другой.Так же убрано название групп характеристик.
loco.ru
Удаление всех товаров, категорий, атрибутов в Opencart 2.3
Сделать это все просто, достаточно прописать запрос к базе данных:
Очистка всех категорий, товаров, атрибутов, опций:
TRUNCATE TABLE `oc_category`; TRUNCATE TABLE `oc_category_description`; TRUNCATE TABLE `oc_category_filter`; TRUNCATE TABLE `oc_category_path`; TRUNCATE TABLE `oc_category_to_layout`; TRUNCATE TABLE `oc_category_to_store`; DELETE FROM oc_url_alias WHERE query LIKE 'category_id=%'; TRUNCATE TABLE oc_product; TRUNCATE TABLE oc_product_attribute; TRUNCATE TABLE oc_product_description; TRUNCATE TABLE oc_product_discount; TRUNCATE TABLE oc_product_image; TRUNCATE TABLE oc_product_option; TRUNCATE TABLE oc_product_option_value; TRUNCATE TABLE oc_product_related; TRUNCATE TABLE oc_product_related; TRUNCATE TABLE oc_product_reward; TRUNCATE TABLE oc_product_special; TRUNCATE TABLE oc_product_to_category; TRUNCATE TABLE oc_product_to_download; TRUNCATE TABLE oc_product_to_layout; TRUNCATE TABLE oc_product_to_store; TRUNCATE TABLE oc_review; DELETE FROM oc_url_alias WHERE query LIKE 'product_id=%'; TRUNCATE TABLE oc_attribute; TRUNCATE TABLE oc_attribute_description; TRUNCATE TABLE oc_attribute_group; TRUNCATE TABLE oc_attribute_group_description; TRUNCATE TABLE oc_product_attribute; TRUNCATE TABLE oc_option; TRUNCATE TABLE oc_option_description; TRUNCATE TABLE oc_option_value; TRUNCATE TABLE oc_option_value_description; TRUNCATE TABLE oc_product_option;Очистка всех категорий:
TRUNCATE TABLE `oc_category`; TRUNCATE TABLE `oc_category_description`; TRUNCATE TABLE `oc_category_filter`; TRUNCATE TABLE `oc_category_path`; TRUNCATE TABLE `oc_category_to_layout`; TRUNCATE TABLE `oc_category_to_store`; DELETE FROM oc_url_alias WHERE query LIKE 'category_id=%';Очистка всех товаров:
TRUNCATE TABLE oc_product; TRUNCATE TABLE oc_product_attribute; TRUNCATE TABLE oc_product_description; TRUNCATE TABLE oc_product_discount; TRUNCATE TABLE oc_product_image; TRUNCATE TABLE oc_product_option; TRUNCATE TABLE oc_product_option_value; TRUNCATE TABLE oc_product_related; TRUNCATE TABLE oc_product_related; TRUNCATE TABLE oc_product_reward; TRUNCATE TABLE oc_product_special; TRUNCATE TABLE oc_product_to_category; TRUNCATE TABLE oc_product_to_download; TRUNCATE TABLE oc_product_to_layout; TRUNCATE TABLE oc_product_to_store; TRUNCATE TABLE oc_review; DELETE FROM oc_url_alias WHERE query LIKE 'product_id=%';если вы увидите подобную надпись (ошибку):#1146 - Table 'p254341_smarket.oc_product_tag' doesn't existто удалите ее из запроса.Очистка всех атрибутов:
TRUNCATE TABLE oc_attribute; TRUNCATE TABLE oc_attribute_description; TRUNCATE TABLE oc_attribute_group; TRUNCATE TABLE oc_attribute_group_description; TRUNCATE TABLE oc_product_attribute;Очистка всех опций:
TRUNCATE TABLE oc_option; TRUNCATE TABLE oc_option_description; TRUNCATE TABLE oc_option_value; TRUNCATE TABLE oc_option_value_description; TRUNCATE TABLE oc_product_option;univers2.newopencart.ru