[Ищу] Как применить соседние шаблоны в Revo

Тема в разделе "MODx", создана пользователем Flexx, 17 апр 2013.

  1. Flexx

    Flexx

    Регистрация:
    8 янв 2013
    Сообщения:
    122
    Симпатии:
    85
    Добрый день.У меня возник вопрос, возможно ли в Revo (2.2.7-pl), сделать чтобы к новым ресурсам применялись соседние шаблоны, как в Evo.Я сделал через Безопасность->Настройка форм-> профиль и правила Ограничивающее поле — parent, а значение — 2(это родитель)

    Далее в template в столбце значение по умолчанию 3(id шаблона).
    Если я создаю документ, то шаблон применяется, но мне надо чтобы он только к первому и второму уровню вложенности применялся, а во остальных случаях был другой шаблон с id 4.Может кто сталкивался с этим и находил решение.
    Пример того что надо:
    есть каталог(id 2):
    -Садовая мебель (Шаблон категории)
    --Кресла качалки (Шаблон категории)
    ---Кресло качалка из ротанга (Шаблон товара)
    ---Кресло качалка из ротанга Novo (Шаблон товара)
    --Мебель из дерева (Шаблон категории)
    -Садовая мебель (Шаблон категории)
     
  2. Flexx

    Flexx

    Регистрация:
    8 янв 2013
    Сообщения:
    122
    Симпатии:
    85
    Если кому то понадобится,нашел плагин для этого дела
    PHP:
    Имя плагина: ChangeTemplate
    Системные события: OnDocFormRender
    Код плагина

    <?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 <[email protected]>
    * 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) {

    // Get current document ID
    if ($id $_REQUEST['id']) {

    // Document Chain
    $resources = array($id);

    // Get parent ID
    foreach ($modx->getParentIds($id10, array('context' => $_REQUEST['context_key'])) as $parentId) {
    if (
    $parentIdarray_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 ','$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;
    }

    }
    }

    }

    }
    Теперь создайте TV
    TV Name
    changeTemplate
    TV Input Options
    Text
    TV Template Access
    Указать в каких шаблонахмы используем этот плагин
     
    $iD нравится это.