© Сделано на LiveStreet
Дизайн - ©2009 MODx RED Group
ChangeTemplate это плагин для MODx Revolution (2.2.0-pl2). Этот плагин является особенно полезным, когда мы должны контролировать, какие Шаблон наследуется детьми в документах родителя.<?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) {
// Get current document ID
if ($id = $_REQUEST['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;
}
}
}
}
}


Комментарии (9)
RSS свернуть / развернутьДавно хотел что то такое! А то удержать в памяти, какой же шаблон сейчас нужен, да и вообще не забывать его устанавливать…
Valikras, вы пользовались? Интересует личный опыт… Глюки, баги, удобство?
createit
Я представлял несколько иначе, мне важно, что бы в зависимости от текущего шаблоны документа, при создании дочерних ограничить круг допустимых шаблонов.
Пример: список шаблонов — Главная, Текстовая, Раздел каталога, Товар.
Главная страница сайта, шаблон Главная, допустимые шаблоны у подразделов: все, кроме Главная.
Страница с текстом, шаблон Текстовая, допустимые шаблоны у подразделов: Текстовая, Раздел каталога.
Страница в каталоге, шаблон Раздел каталога, допустимые шаблоны у подразделов: Товар
Товар в каталоге, шаблон Товар, допустимые шаблоны у подразделов: нет, нельзя создавать дочерние.
Как бы такое сделать, что бы «не очень понимающие» клиенты сайты не ломали)))
createit
В данной ситуации, мы закрываем выборку шаблона, и выставляем её в настройках плагина, т. е чтобы менеджер не перепутал случайно шаблон.
К примеру, имеем каталог:
Каталог и назначаем ему шаблоны по уровням. Теперь, при зоздании в каталогу подразделов. будет автоматом присваиваться нужный шаблон.
Добавил ещё одну картинку (снизу) для ясности…
valikras
createit
valikras
хотя надо чуть позаморачиваться
Dmi3y
valikras
но я ответ писал про отображение только тех шаблонов которые можно выбрать пользователю :)
Dmi3y
valikras
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.