Последние темы


Записки велосипедиста №4. Бренды/производители товара.

  • Всем добрейшего времени суток.
    Пару раз замечал, что люди не знают, как организовать систему брендов/стран-производителей для товара. Сегодня покажу самое простое и весьма полезное решение.

    • Шаг №1
      Создаём ресурс "производители" и для него несколько дочерних ресурсов, которые имеют названия брендов. Назначаем им шаблон "производители" (чуть ниже будет код, который в этот шаблон нужно вставить).

    • Шаг №2
      Создаём TV с именем brand, типом ввода "список ресурсов". В параметр "родители" указываем ID ресурса "производители", а параметр "включать родителей" устанавливаем на "нет". Далее, делаем TV доступным для шаблона "товар".

    • Шаг №3
      В шаблон "производители" вставляем код:

    [[!getProducts?
                    &fromParentList=`pagetitle`
                    &includeTVs=`1`
                    &includeTVList=`image,price`
                    &tvFilters=`{"brand:LIKE":"[[*id]]"}`
                    &tpl=`shk_product`
    ]]
    

    Т.е. на страницу будут выводиться товары, у которых значение TV brand = ID этой самой страницы. &tvFilters={"brand:LIKE":"[[*id]]"}

    • Шаг №4
      В шаблон "товар" выводим название и ссылку на производителя.
    [[*brand:isnot=``:then=`Производитель: <a href="[[~[[*brand]]]]">[[!pdoField?id=`[[*brand]]`&field=`pagetitle`]]</a>`]]
    

    Итог: в карточке товара есть информация о производителе, на странице производителя есть все товары, которые относятся к нему.

  • Приветствую, что бы не плодить кучу тем, хотел бы описать слегка другой способ для товаров MIGX (подойдет и для ресурсов я думаю), но что бы и производителей (или что ещё понадобится) можно было использовать и для фильтрации.

    1. Создаём родителя "Производители" (например с ID(23))
    2. Создаем несколько дочерних документов (соответственно это сами производители)
    3. В MIGX в нашей конфигурации shop добавляем поле brand (инструкция как это сделать тыц)
    4. Для brand (которое мы создали выше) ставим Input TV type - listbox (Тип TV - выпадающий список с одиночным выбором)
    5. На вкладке Input Options в поле Input Options Value пишем следуещее
    @SELECT pagetitle FROM modx_site_content WHERE parent=23
    

    т.е. селектим все заголовки ресурсов, у которых родитель с ID = 23 (ID того родителя, который мы создали на шаге №1)
    6) Проверяем всё это дело на каком-нибудь товаре, прибиваем ему производителя, и заодно проверим всё это в TM2
    7) Создаём/редактируем шаблон "Каталог производителей", там где нужно выводить товары этого производителя, вызываем getProducts через getPage

    [[!getPage?
        &cache=`1`
        &parents=`13,16,7,8`
        &elementClass=`modSnippet`
        &element=`getProducts`
        &className=`ShopContent`
        &packageName=`shop`
        &limit=`10`
        &tpl=`product_box`
        &where=`{"brand:LIKE":"[[*pagetitle]]"}`
        &pageFirstTpl=` <li class="control"><a [[+classes]] href="[[+href]]">Первая</a></li> `
        &pageLastTpl=` <li class="control"><a [[+classes]] href="[[+href]]">Последняя</a></li> `
    ]]
    <br class="clear" />
    <ul class="pages">
        [[!+page.nav]]
    </ul>
    
    1. Осталось теперь только что бы заработали ссылки, создаём микро-сниппет getUri
    <?php
    $document = $modx->getObject('modResource',array(
        'pagetitle' => $brandname,
        'parent'=> $parentid
    ));
    $field = $document->get('uri');
    return $field;
    

    Т.е. просто получаем URI нашего производителя, что бы потом вставить в ссылку (параметр parentid нужен ,если вдруг вы где то ещё будет такой же pagetitle использовать)
    9) В карточке товара, ставим ссылку на страницу со всеми товарами производителя

    <p class="some-p-class">Производитель: <a href="[[getUri? &brandname=`[[*brand]]` &parentid=`23`]]">[[*brand]]</a></p>
    

    В итоге у нас можно фильтровать по этим производителям в каталоге и вывести все товары одного производителя в отдельном ресурсе.

    Или можно не создавать сниппет и воспользоваться каким нибудь pdoResources или getResources (но по мне проще и быстрее будет сниппет):

    p class="some-p-class">Производитель: <a href="[[~[[pdoResources? &parents=`23` &where=`{"pagetitle:LIKE":"[[*brand]]"}` &tpl=`@INLINE [[+id]]`]]]]</a></p>
    
 

Последние комментарии

  • Что нового в Shopkeeper 4.0.3:

    Исправлено некорректное определение языка по умолчанию В настройках в админке скрываются пароли. Добавлена возможность загружать картинки для категорий. shopkeeper.js - добавлена функция updateProductsPrice() для поддержки текстовых полей для цены. Twig-функции contentList() и includeContent() вынесены в отдельный класс. Добавлено событие "order.before_create". Сортировка всех полей типа контента перетаскиванием. Автоматическое сохранение сортировки полей при сохранении типа контента (не нужно нажимать на отдельную кнопку). В интерфейсе админа добавлено поле поиска для списка Composer-пакетов.

    Скачать можно на главной странице https://modx-shopkeeper.ru/

    Читать далее
  • Вот этот плагин:
    0_1550334109280_screenshot_022.png

    Вроде по умолчанию он выключен. Надо включить. Но плагин работает только на редактирование товаров, при удалении он делалать ничего не будет. Только что проверил кнопку, всё работает корректно, фильтры удаляются и добавляются, когда нужно. Но нужно очищать корзину после удаления товаров (возможно баг).

    Читать далее
  • J

    @Andchir Если нажимаю кнопочку "Обновить значения", то в фильтрах появляются как раз те самые удаленные значения фильтра.. Потом приходится Ручками выбирать эти удаленные значения.
    вот так выглядит Управление фильтрами когда удаляешь ручками: https://yadi.sk/i/_zw64CGkZ_sAYg
    А вот так выглядит когда просто нажимаешь "Обновить значения": https://yadi.sk/i/7WFbXC6xV5sQAw (красным выделено, то что приходится постоянно удалять

    Читать далее
  • J

    Участник @Jokerit написал в TagManager2 отображает в фильтре удаленные значения TV-полей:

    tmRefresh

    Так и не смог найти как включить

    Читать далее