Наверх

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

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

DIAFAN.CMS не делает никаких ограничений на количество аргументов и название функции.

Исполняемый код может быть общего характера или относиться к модулю.

Если нужно добавить код общего характера, то создаем общий шаблонный тег.

Для этого в папку themes/functions нужно добавить файл с названием тега.

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

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

Пример:

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

<?php

if (! defined('DIAFAN'))
{
    
$path = __FILE__; $i = 0;
    while(!
file_exists($path.'/includes/404.php'))
    {
        if(
$i == 10) exit; $i++;
        
$path = dirname($path);
    }
    include
$path.'/includes/404.php';
}
echo
"Hello, ".$attributes["name"]."!";

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

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

Пример:

Добавляем модулю «Новости» шаблонную функцию 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">

Ваши комментарии и дополнения

По факту не работает.
"Не работает" - это очень общая формулировка. В чем-то конкретном проблема или особенность? Тогда ее стоит подробнее описать, так как комментарии призваны помочь разработчикам.
Или у Вас просто не получается создать шаблонный тег? Тогда Вам лучше обратиться в техподдержку.
Не могу понять, раньше же можно было в папки includes в файле function.php можно было создать функцию с исполняющем кодом и вывести его в любом месте основного шаблона или в редакторе. а теперь через includes этого не сделать?
Файл includes/function.php разбит на файлы по именам функция. Эти файлы лежат в папке themes/functions.
Я не могу найти у себя папку functions в папки themes или просто у меня версия диафана старая, это теперь так в новой версии стало. или папку functions я сам создаю.
Номер версии у Вас написан в административной части внизу. Документацию для старых версий можно скачать здесь: http://cms.diafan.ru/dokument/
Цитата
Пример:
Добавляем модулю «Новости» шаблонную функцию show_date
//в файле modules/news/news.php


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

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

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