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


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

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

  • Добавьте поле и обновите структуру таблицы БД

    <field key="resource_id" dbtype="int" precision="10" phptype="int" null="false" index="index" />

    http://joxi.ru/GrqZwZ5i40xlqm

    Как вы открываете эту страницу, по какой ссылке? Обычно создается ТВ с типом ввода migxdb, в свойствах которого указывается название конфигурации.

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

    Участник @Andchir написал в Экспорт/импорт данных из таблиц пакетов MIGX db через плагин CatalogFill:

    resource_id

    и что это должно дать?
    как была ошибка 500 - так и есть

    Читать далее
  • это какое значение и где его оставить?

    Значение, которое было по умолчанию.

    //Название поля ID родителя $cf_config['parent_field'] = 'resource_id';

    Читать далее
  • Лучше редактировать шаблоны через админку. Там есть чекбокс "Очистить системный кэш".

    0_1566302652339_screenshot_195.png

    Также кэш можно очистить в настройках. Нужно очищать после редактирования шаблонов.

    0_1566302673468_screenshot_196.png

    Ещё в настройках есть параметр "Тема шаблонов". Можно скопировать папку "default" и создать свои шаблоны.

    0_1566302871928_screenshot_197.png

    Читать далее