Как добавить шаблонный тег

Шаблонные теги позволяют подключать исполняемый код в определенное место сайта.

DIAFAN.CMS не делает никаких ограничений на количество аргументов и название функции. Исполняемый код может быть общего характера или относиться к модулю.

Если нужно добавить код общего характера, то создаем общий шаблонный тег. Для этого в папку themes/functions нужно добавить файл с названием тега. Стоит заметить, что имеется ввиду папка

/custom/ваша_тема/themes/functions

поскольку все изменения следует вносить в файлы пользовательских тем (о темах).

После этого шаблонный тег можно использовать.

Тегу можно передавать атрибуты тега. Атрибуты будут доступны через массив $attributes.

Пример:

Добавляем файл hello.php.

<?php
if (! defined('DIAFAN'))
{
    
$path = __FILE__;
    while(!
file_exists($path.'/includes/404.php'))
    {
        
$parent = dirname($path);
        if(
$parent == $path) exit;
        
$path = $parent;
    }
    include
$path.'/includes/404.php';
}
echo
"Hello, ".$attributes["username"]."!";

Затем в любом основном шаблоне сайта, например в themes/site.php, файл можно исполнить в любом месте шаблонным тегом

<insert name="hello" username="Пользователь">

Пример:

Добавляем модулю «Новости» шаблонную функцию show_date

//в файле modules/news/news.php
public function show_date($attributes)
{
    
$attributes = $this->get_attributes($attributes, 'day', 'template');

    
$result = $this->model->date($attributes["day"]);
    echo
$this->diafan->_tpl->get('show_date', 'news', $result, $attributes["template"]);
}

//в файле modules/news/news.model.php
public function date($day)
{
    if(
$day)
    {
        
$result["date"] = $day.date(".m.Y");
    }
    else
    {
        
$result["date"] = date("d.m.Y");
    }
    return
$result;    
}

//файл modules/news/views/news.view.show_date.php
echo '<div class="news_date">'.$result["date"].'</div>';

Затем в любом основном шаблоне сайта, например в themes/site.php, функцию можно вызвать в любом месте шаблонным тегом

<insert name="show_date" module="news">
Ваши комментарии и дополнения
02 июня 2014 г.
"Не работает" - это очень общая формулировка. В чем-то конкретном проблема или особенность? Тогда ее стоит подробнее описать, так как комментарии призваны помочь разработчикам.
Или у Вас просто не получается создать шаблонный тег? Тогда Вам лучше обратиться в техподдержку.
17 июня 2014 г.
Не могу понять, раньше же можно было в папки includes в файле function.php можно было создать функцию с исполняющем кодом и вывести его в любом месте основного шаблона или в редакторе. а теперь через includes этого не сделать?
17 июня 2014 г.
Файл includes/function.php разбит на файлы по именам функция. Эти файлы лежат в папке themes/functions.
17 июня 2014 г.
Я не могу найти у себя папку functions в папки themes или просто у меня версия диафана старая, это теперь так в новой версии стало. или папку functions я сам создаю.
23 мая 2015 г. , редакция: 23 мая 2015 г.
Цитата
Пример:
Добавляем модулю «Новости» шаблонную функцию show_date
//в файле modules/news/news.php


И как тогда пройдет обновление? Если править системные модули.
24 мая 2015 г. , редакция: 24 мая 2015 г.
Михаил Михайлович, про обновление вот здесь написано: http://www.diafan.ru/dokument/full-manual/sysmodules/update/
Чтобы файл не уходил в кастомную тему, нужно использовать частичную кастомизацию. Про нее здесь http://www.diafan.ru/dokument/full-manual/developers/api/custom/#CHastichnaya-kastomizatsiya
24 мая 2015 г.
Цитата
Чтобы файл не уходил в кастомную тему,

Т.е. я правильно понимаю, что в паку custom можно сложить любые файлы, не только views?
И дайте пожалуйста ссылку где можно об этом подробней почитать. А то у меня сложилось впечатление, что custom папка только для шаблона.
28 мая 2015 г.
Подскажите, а почему themes/functions не перекрывается custom/themes/functions?
18 января 2016 г.
Возможно, что то сделал не так по первому примеру. Создал файл hello.php в папке themes/functions, добавил содержимое первого примера, в site_start.php прикрепленной к гл.странице, добавил шаблонный тег <insert name="hello" name="Пользователь">, но "Hello пользователь" почему то не выводиться.
03 апреля 2016 г.
не работает так как атрибут name принимает два значения решил проблему следующим образом:
вместо echo "Hello, ".$attributes["name"]."!"; написал
echo "Hello, ".$attributes["user"]."!";
вместо <insert name="hello" name="Пользователь"> написал
<insert name="hello" user="Пользователь">
03 января 2017 г.
Если установлена тема оформления, то файл «modules/news/views/news.view.show_date.php» должен лежать не по указанному в примере адресу, а в «custom/ВАША_ТЕМА/modules/news/views/news.view.show_date.php».

Обращаю внимание авторов документации, что для тех, кто только знакомится с вашей системой, это очень даже неочевидно. Потому что документация в разделе «Разработчикам» крайне куцая и путанная, приходится изучать систему не по примерам.

Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.