Слишком много шаблонов/чанков

Всем доброго времени суток.

На днях столкнулся с проблемой слишком большого количества шаблонов или чанков. Дизайнеры отрисовали 30+ страниц для сайтов, причем сразу два сайта с такой ситуацией.Я попробовал 2 варианта решения такой проблемы.

1. Создаем шаблон «Стандартный», создаем гору доп полей и раскидываем их по категориям, чтобы как-то логически отделить друг от друга.

Код шаблона:
[[$page_start]]
    [[!pageRouter]]    
[[$page_end]]
Код сниппета pageRouter:
$output = $modx->getChunk('page.default');

switch($modx->resource->parent){
    case 5:
        $output = $modx->getChunk('page.one');
        break;
    case :
        // ...
}

switch($modx->resource->id){
    case 10:
        $output = $modx->getChunk('page.two');
        break;
    case :
        // ...
}

return $output;
Итог: получаю кучу чанков, доп поля раскиданы, какие-то используются, какие-то нет, можно запутаться даже самому и потом бегать по чанкам и вспоминать, куда какое поле выведено.

2. Создать много шаблонов, 15-20 шаблонов на сайт, выпадающий список при создании документов не радует глаз, но все же он мне показался удобнее.

Собственно вопрос: кто и как решает такие задачи, может есть поизящнее решение?
Артур
13 февраля 2019, 11:27
114
0

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

Наумов Алексей
13 февраля 2019, 11:43
+1
Я считаю, что лучше шаблоны.

Шаблоны типа Главная, Товар, Статья, Категория и т.п. это абсолютно правильно. В идеале таких выходит до 10-15.
А вот по шаблону на каждую страницу, например Контакты, Лендинг 1, Лендинг 2 и т.п. — попахивает ерундой.
Лучше сделать один шаблон «Стандартный», а в коде страницы уже все прописываем.
И я у себя не вижу ничего страшного, если на странице отключен визуальный редактор, а в content вбит html код. Мы же сайт делаем, это сложный продукт, наличие на сайте html кода это нормально:)

И я видел сценарии, когда заводили кучу TV, просто чтобы было удобно менеджерам… и в итоге был шаблон Контакты, а у него куча TV телефон, email, адрес, потом тоже самое для города 2 и для производства, а потом еще 3 точки самовывоза, итого 30 TV-шек, которые используются 1 раз. Вопрос: зачем? Что, менеджеры каждый день меняют это? Или настолько беспомощны, что в html разметке не смогут найти заветные цифры?
    Артур
    13 февраля 2019, 12:55
    0
    Ну разумеется не на каждую страницу шаблоны. Именно по сущностям: список отелей, отдельный отель, список туров, отдельный тур, список новостей, отдельная новость и тд.
    Ибо размах дизайнеров велик и на каждом есть какие-то примочки, которые обязательно надо вывести для редактирования в админку, при этом они не нужны на других, чтобы не запутаться.
    Иначе я бы и не создавал эту тему :)
    Спасибо за мнение.
Михаил
13 февраля 2019, 12:32
+2
Если использовать наследования, то код можно снизить до минимума. Да, он все равно будет, но не так много как при стандартном шаблонизаторе
    Артур
    13 февраля 2019, 12:56
    0
    Спасибо, попробую
Николай
13 февраля 2019, 13:14
+2
Я обычно делаю один базовый шаблон, в котором прописано то, что подходит для всех страниц, то есть часть head, footer, шапка, меню. А меняющиеся от шаблона к шаблону части помещаю в block:

<!DOCTYPE html>
<html>
	<head>...</head>
	<body>
		<header>....</header>
		{block 'main'}{/block}
		<footer>...</footer>
	</body>
</html>

И далее наследую от него множество шаблонов с помощью fenom, а если шаблоны похожи, то можно унаследовать уже один шаблон от другого:

{extends 'template:base'}
{block 'main'}Уникальный контент шаблона{/block}

Все шаблоны можно разбить по категориям и подкатегориям для удобства. Раньше тоже не нравилось, что много шаблонов и использовал способ типа [[!pageRouter]], но потом это оказалось неудобно. Во-первых TV-параметры завязаны на шаблоны, а во-вторых, очень сложно определить какой чанк подтягивается к странице. Нужно лезть сначала в сниппет, разбирать код, определять какой чанк подтягивается, потом искать этот чанк… В общем, геморрой. А шаблон сразу на виду, увидел что за шаблон, открыл его, и смотришь код. И нет мешанины с TV-параметрами. К тому же, можно пользоваться «настройкой форм» в админке. И настраивать под каждый шаблон свой уникальный вид полей редактирования ресурсов.

А вот, чтобы менеджеры не путались в шаблонах, можно создать плагин, который будет ставить нужный шаблон при создании документа:

if ($modx->event->name == "OnDocFormRender" && $mode == "new") {
	if ($parent = intval($_REQUEST['parent'])) {
	
		if (isset($modx->controller)) {
		    $parents = $modx->getParentIds($parent, 10, array('context' => 'web'));
		    $parentRes = $modx->getObject('modResource', $parent);
		    
		    // Шаблон город мероприятия
		    
		    if( $parent == 3 ) {
				$modx->controller->setProperty('template', '13');
		    }
		    
		    // Шаблон мероприятия
		    
		    if( $parentRes->template == 13 ) {
		        $modx->controller->setProperty('template', '14');
		    }
		    
		    // Шаблон Спикер
		    
		    if( $parent == 5 ) {
				$modx->controller->setProperty('template', '6');
		    }		    
		}
	}
}

Да, и чанки тоже надо разбивать на категории-подкатегории. Придумать какую-то систему разбивки. Есть чанки, которые относятся к вызовам различных сниппетов, а некоторые являются отдельными блоками кода. Их тоже нужно наследовать при необходимости. Считаю, что для объёмного сайта обилие шаблонов и чанков это нормально.
    Василий Наумкин
    13 февраля 2019, 13:26
    +2
    Считаю, что для объёмного сайта обилие шаблонов и чанков это нормально.
    Особенно, если они хранятся в файлах и есть поиск по их содержимому в IDE.
      Николай
      13 февраля 2019, 13:29
      0
      Это надо добавить в очередь на внедрение)
    Николай
    13 февраля 2019, 13:30
    0
    И TV-поля тоже практически всегда нужно разбивать по категориям, и для менеджеров тоже удобно, когда ТВ разбиты по вкладкам:



Артур
13 февраля 2019, 13:47
+3
Значит будем отталкиваться от шаблонов с наследованием. Всем спасибо за помощь.