Записки велосипедиста №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)

    1. Проверяем всё это дело на каком-нибудь товаре, прибиваем ему производителя, и заодно проверим всё это в TM2
    2. Создаём/редактируем шаблон "Каталог производителей", там где нужно выводить товары этого производителя, вызываем 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 использовать)

    1. В карточке товара, ставим ссылку на страницу со всеми товарами производителя
    <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>
    


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

Похоже, подключение к Форум | MODX Shopkeeper было разорвано, подождите, пока мы пытаемся восстановить соединение.