Узнал, что в CMS DJEM есть такая замечательная вещь (не прошло и 4х лет), как оператор template. В документации по этому поводу не написано ничего, ну и ладно - мы сами как-нибудь.
Что вообще это такое и зачем оно нам надо?
Оператор template позволяет наследоваться от родительского дизайн-шаблона и заменять в нем размеченные блоки. Пока наверное не очень понятно, поэтому приведу простой пример.
У нас есть шаблон с ID 1601:
<html>
<head>
<title>Шаблон <#_name#></title>
<template name="tpl_part:meta"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></template>
</head>
<body>Привет "<template name="tpl_part:name">GUEST</template>"!</body>
</html>
В нем я выделил 2 блока, которые потенциально могут быть заменены: "tpl_part:meta" и "tpl_part:name".
Публикация документа с этим дизайн-шаблоном в результате даст такой html:
<html>
<head>
<title>Шаблон TPL1</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>Привет "GUEST"!</body>
</html>
Что есть ожидаемо.
Теперь создадим новый дизайн-шаблон (ID 1602), который наследуется от дизайн шаблона с ID 1601.
<template extends="1601">
<template name="tpl_part:name">DIGITORUM</template>
В этом дизайн-шаблоне описан только блок "tpl_part:name", который нужно заменить.
В результате публикации документа с этим (ID 1602) шаблоном html будет таким:
<html>
<head>
<title>Шаблон TPL2</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>Привет "DIGITORUM"!</body>
</html>
То есть в результирующем html был заменен только переопределенный блок "tpl_part:name", все остальные блоки остались без изменения.
Что самое приятное - эта конструкция так же работает при использовании
метода eval, что дает нам очень много
интересных возможностей, но об этом в другой раз .