Ищу Добавление атрибутов для категории каталога

Тема в разделе "Opencart", создана пользователем KoNnY, 3 мар 2015.

Информация :
Внимание форумчане! При создании тем, или выкладывании какой-либо информации проверьте в какой ветке форума вы находитесь! Не путайте Opencart и Opencart2. При несоблюдении данного условия выносится соответствующее наказание! И потом не говорите что вас НЕ ПРЕДУПРЕЖДАЛИ! По возможности используйте обменники mail, yandex, google, dropbox, rghost Дабы избежать просьб перезалить и проблем с рекламой!
Модераторы: ZiX
  1. KoNnY

    KoNnY Постоялец

    Регистр.:
    14 дек 2014
    Сообщения:
    67
    Симпатии:
    5
    Добрый день!

    Помогите, пожалуйста, с поиском: возникла острая необходимость задавать и выводить атрибуты не только у товаров, но и у категорий. Может кто встречал нечто подобное или поделится своим решением?

    Можно, конечно, добавить доп. поля для категории, но не хочется так изощряться. Лучшим решением видится клонирование функционала задания атрибутов у товара применительно к категории.
     
  2. Dj-Tiesto

    Dj-Tiesto Стероид

    Регистр.:
    19 авг 2010
    Сообщения:
    271
    Симпатии:
    88
    Покажите пример реализации такого функционала.
    Как выводить атрибуты у товара в категории - я понимаю, а где отображать атрибуты у категории??
     
  3. KoNnY

    KoNnY Постоялец

    Регистр.:
    14 дек 2014
    Сообщения:
    67
    Симпатии:
    5
    А в чем здесь собственно проблема? Ведь есть, например, модуль для добавления дополнительных изображений для категории - Multiple Category Images
    По сути это клон аналогичного функционала для товара (вкладка Изображения). И выводятся эти картинки рядом с описанием категории, настраивается такое же слайдшоу как и для карточки товара.

    Для наглядности прикладываю макет, как будут выводиться атрибуты категории: http://file.sampo.ru/dwtkkg/

    Идеи типа "запили в поле Описание" не подходят. Нужно более рациональное решение
     
  4. drozd22

    drozd22

    Регистр.:
    17 июн 2011
    Сообщения:
    362
    Симпатии:
    283
    Если реализовывать полноценные атрибуты для категорий и по образцу с товарами, то это немалая работа. Готового модуля не встречал.
    Предполагаю, что реализовывать стоит через создание еще одной таблицы для категорий со структурой как у "product_attribute", добавить в модель и контроллер работу с этой таблицей, добавить в админку раздел "Атрибуты" в 'Категории". Одно только хорошо, что все решения можно использовать от товаров.
     
    KoNnY нравится это.
  5. KoNnY

    KoNnY Постоялец

    Регистр.:
    14 дек 2014
    Сообщения:
    67
    Симпатии:
    5
    Воспользовался Вашим советом, делал все "под копирку" как у товаров: от создания таблицы до вывода конечного результата, просто копируя функции с attriburte меняя в них фразу "product" на "category". Все получилось, спасибо! Сейчас постараюсь провернуть то же самое и с производителями. Раньше хотел как атрибут задавать значение, но думаю можно также поступить как и с атрибутами, копируя и видоизменяя код.
     
  6. KoNnY

    KoNnY Постоялец

    Регистр.:
    14 дек 2014
    Сообщения:
    67
    Симпатии:
    5
    Не удалось мне также легко провернуть с производителями, к сожалению... написал vqmod пока только для папки admin (добавление производителя), а вот с выводом в шаблоне не получается.
    Выкладываю свой vqmod для добавления производителя к категории: http://file.sampo.ru/2z2tf5/ (тестил на OpenCart 1.5.6.4)

    Ступор настал, когда дошел до правки файла catalog/model/catalog/category.php. Вот не знаю куда вставлять данный код из product.php
    PHP:
    $query $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM " DB_PREFIX "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$customer_group_id "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " DB_PREFIX "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " DB_PREFIX "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$customer_group_id "') AS reward, (SELECT ss.name FROM " DB_PREFIX "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "') AS stock_status, (SELECT wcd.unit FROM " DB_PREFIX "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " DB_PREFIX "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, (SELECT AVG(rating) AS total FROM " DB_PREFIX "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " DB_PREFIX "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " DB_PREFIX "product p LEFT JOIN " DB_PREFIX "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " DB_PREFIX "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " DB_PREFIX "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$product_id "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");

            if (
    $query->num_rows) {
                return array(
                   ...
                    
    'manufacturer_id'  => $query->row['manufacturer_id'],
                    
    'manufacturer'     => $query->row['manufacturer'],

    ....