Разные шаблоны товара для разных категорий minishop2

Есть 3 категории товаров, нужно чтобы при добавлении товара в каждую автоматически товарам присваивались разные шаблоны. То есть для категории 1 все товары с Шаблоном 1 и пр.

Через настройку форм почему-то не работает, возможно с правами напутано.
Может кто-то знает оптимальное решение?
Spirit_Ninja
28 августа 2018, 18:10
modx.pro
2 325
0

Комментарии: 5

Andrey
28 августа 2018, 18:39
0
Только разве что есть дополнение (сырое) ms2form.
Добавляет товары через фронтэнд, но с гибкими настройками.
Можно впилить сразу, чтобы шло добавление через статический или динамический элемент селектора, поле.

Либо сделать так, чтобы (если конечно у Вас три всего категории и не требуется выбор мультикатегорий на этом этапе) смена шаблона была динамической при смене главной категории товаров, тем же селектором.

Ну или опять таки Плагин писать. Но тут я не мастак, хотя наверняка плагин должен выглядеть очень просто!
    Михаил
    28 августа 2018, 18:50
    +1
    Там плагин на 5 строчек то на событие OnDocForSave
      bad_proger
      29 августа 2018, 11:02
      0
      Если я не ошибаюсь, то можно через настройку форм сделать без плагинов.
        Наумов Алексей
        29 августа 2018, 11:23
        2
        +1
        Есть такое решение у меня:

        1) Создаем TV changeTemplate и назначаем его категориям.
        2) Создает плагин changeTemplate, на событие OnDocFormRender (код ниже)
        3) Теперь в TV мы можем написать:
        «2» — всем дочерним ресурсам будет назначен шаблон 2
        «2,3» — первый уровень дочерних ресурсов будет с шаблоном 2, второй уровень и далее — с шаблоном 3
        ну и т.д., «2,3,4»
        4) Но данный плагин сработает на все, в том числе и на категории, а не только на товары, если это нужно исправить — внесите изменения в код.

        <?php
        /**
        * =========================
        * ChangeTemplate
        * =========================
        *
        * Plugin for MODX Revolution
        * Set which template is inherited by children 
        * documents of a certain parent document
        *
        * Author:
        * Marc Loehe (boundaryfunctions)
        * marcloehe.de
        *
        * Modified by:
        * Lorenzo Stanco <lorenzo.stanco@gmail.com>
        * Lorenzostanco.com
        *
        * Usage:
        *
        * 1. Paste this as new plugin and connect it to system event
        * 'OnDocFormRender'.
        *
        * 2. Assign a new TV 'changeTemplate' to each template
        * for which you want to define the default children template.
        *
        * 3. Set the newly created TV to input type "Text" 
        *
        * 4. Open a document and in the 'changeTemplate' TV type a 
        * comma separated list of template IDs.
        *
        * 5. Have fun!
        *
        */
         
        // Check Event
        if ($modx->event->name == 'OnDocFormRender' && $mode == modSystemEvent::MODE_NEW) {
           
          $id = empty($_REQUEST['id']) ? false : $_REQUEST['id'];
          $id = empty($id) ? (empty($_REQUEST['parent']) ? false : $_REQUEST['parent']) : $_REQUEST['parent'];
          // Get current document ID
          if ($id) {
         
            // Document Chain
            $resources = array($id);
         
            // Get parent ID
            foreach ($modx->getParentIds($id, 10, array('context' => $_REQUEST['context_key'])) as $parentId) {
              if ($parentId) array_push($resources, $parentId);
            }
             
            // Search changeTemplate in the chain
            $level = 0;
            $childTemplates = array();
            foreach ($resources as $resourceId) {
              $resource = $modx->getObject('modResource', $resourceId);
              if ($childTemplatesTV = $resource->getTVValue('changeTemplate')) {
                 
                // Create template array for each tree level
                $childTemplates = @explode(',', $childTemplatesTV);
                if (empty($childTemplates)) break;
                foreach ($childTemplates as $k => $v) $childTemplates[$k] = intval(trim($v));
                 
                break;
         
              }
         
              $level++;
         
            }
         
            // Set template based on tree level
            if (!empty($childTemplates)) {
              $useTemplate = $childTemplates[$level];
              if (!empty($useTemplate)) {
                
                // Set default template
                if (isset($modx->controller)) {
                  $modx->controller->setProperty('template', $useTemplate);
                } else { // modX < 2.2.0
                  $_REQUEST['template'] = $useTemplate;
                }
         
              }
            }
         
          }
         
        }
          Spirit_Ninja
          22 сентября 2018, 16:22
          0
          Пока решил все довольно костыльно при помощи модификаторов, меняя не сам шаблон в зависимости от родителя, а часть блоков шаблона.

          Еще попробую вот этот модуль, недавно вышел. По результатам отпишусь. modstore.pro/packages/other/forcetemplate#tab/changelog
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            5