Разные шаблоны товара для разных категорий minishop2
Есть 3 категории товаров, нужно чтобы при добавлении товара в каждую автоматически товарам присваивались разные шаблоны. То есть для категории 1 все товары с Шаблоном 1 и пр.
Через настройку форм почему-то не работает, возможно с правами напутано.
Может кто-то знает оптимальное решение?
Через настройку форм почему-то не работает, возможно с правами напутано.
Может кто-то знает оптимальное решение?
Комментарии: 5
Только разве что есть дополнение (сырое) ms2form.
Добавляет товары через фронтэнд, но с гибкими настройками.
Можно впилить сразу, чтобы шло добавление через статический или динамический элемент селектора, поле.
Либо сделать так, чтобы (если конечно у Вас три всего категории и не требуется выбор мультикатегорий на этом этапе) смена шаблона была динамической при смене главной категории товаров, тем же селектором.
Ну или опять таки Плагин писать. Но тут я не мастак, хотя наверняка плагин должен выглядеть очень просто!
Добавляет товары через фронтэнд, но с гибкими настройками.
Можно впилить сразу, чтобы шло добавление через статический или динамический элемент селектора, поле.
Либо сделать так, чтобы (если конечно у Вас три всего категории и не требуется выбор мультикатегорий на этом этапе) смена шаблона была динамической при смене главной категории товаров, тем же селектором.
Ну или опять таки Плагин писать. Но тут я не мастак, хотя наверняка плагин должен выглядеть очень просто!
Там плагин на 5 строчек то на событие OnDocForSave
Если я не ошибаюсь, то можно через настройку форм сделать без плагинов.
Есть такое решение у меня:
1) Создаем TV changeTemplate и назначаем его категориям.
2) Создает плагин changeTemplate, на событие OnDocFormRender (код ниже)
3) Теперь в TV мы можем написать:
«2» — всем дочерним ресурсам будет назначен шаблон 2
«2,3» — первый уровень дочерних ресурсов будет с шаблоном 2, второй уровень и далее — с шаблоном 3
ну и т.д., «2,3,4»
4) Но данный плагин сработает на все, в том числе и на категории, а не только на товары, если это нужно исправить — внесите изменения в код.
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;
}
}
}
}
}
Пока решил все довольно костыльно при помощи модификаторов, меняя не сам шаблон в зависимости от родителя, а часть блоков шаблона.
Еще попробую вот этот модуль, недавно вышел. По результатам отпишусь. modstore.pro/packages/other/forcetemplate#tab/changelog
Еще попробую вот этот модуль, недавно вышел. По результатам отпишусь. modstore.pro/packages/other/forcetemplate#tab/changelog
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.