Вернуться на сайт x3m.cms

Основные конструкции системы

Основные понятия

Шаблонная система; TmutiSection(TMS) является частью системы X3M, имеет простой синтаксис для разметки любых HTML/текстовых файлов.

Система имеет собственный API и может работать работать отдельно от X3M.

Рассмотрим пример простейшего шаблона:

  • Файл index.html
  • Простой текст //эта строка не будет обработана, так как лежит вне секции
  • {%section:main%} //определение начала секции main
  • <h1>Простой текст 2</h1>
  • {%F:myvar%} ; //переменная myvar
  • {%endsection:main%} //определение конца секции main
  • {%section:main2%}//определение начала секции
  • <h1>Простой текст 2</h1>
  • {%F:myvar2%} //переменная myvar2
  • {%endsection:main2%} //определение конца секции

Как видно из примера:

  • любой шаблон системы состоит из секций, количество секций в шаблоне может быть любым.
  • cекции не могут быть вложенными, но есть специальный механизм при помощи которого секции связываются.
  • все, что находится вне секций не обрабатывается шаблонной системой.
  • все конструкции в шаблонной системе обрамляются скобками {%  %}

1.1 Переменные шаблонов

В шаблонной системе TMS есть два типа переменных: глобальные(MF) и локальные(F). Область видимости первых определена на уровне все подключенных шаблонов, вторых - на уровне секции.

пример(index.html):

  • {%section:main%}
  • {%MF:myglobal%} //глобальная переменная
  • {%F:mylocal1%} //локальная переменная
  • {%F:mylocal2%} //локальная переменная
  • {%endsection:main%}
  • {%section:main_second%}
  • global again: {%MF:myglobal%} //глобальная переменная
  • {%endsection:main_second%}

PHP:
  • $TMS = new TMutiSection(); //инициализация
  • $TMS->AddFileSection('index.html');  //подключаем файл с секциями
  • $TMS->AddMFReplace('myglobal','my global var');//добавляем для секции main 2 замены для переменных mylocal1 и mylocal2
  • $TMS->AddMassReplace('main',array('mylocal1'=>'hello','mylocal2'=>'user')); //добавляем для секции main 2 замены для переменных mylocal1 и mylocal2
  • $TMS->ParseSection('main');
  • echo $TMS->ParseSection('main_second');

Результат операции:

my global var hello user global again: my global var

1.2 Связывание секций

Как уже отмечалось ранее - cекции не могут быть вложенными, но есть специальный механизм при помощи которого секции связываются.

Рассмотрим пример:

пример(menu.html):

  • {%section:menu%}
  • <ul>
  • {%->:menu_item%} //перменная в которой храняться пункты меню, по сути это буфер.
  • </ul>
  • {%endsection:menu%}
  • {%section:menu_item->%} // "->" - эта связка символов указывает на то , что результат парсинга этой секции будет записан  в переменную {%->:menu_item%}, согласно названию секции 
    // {%section:menu_item->my_buff_var%}   - в данном случае результат будет записан в {%->my_buff_var%}
  • <li>{%F:itemName%}</li>
  • {%endsection:menu_item%}

PHP:
  • $TMS = new TMutiSection(); //инициализация
  • $TMS->AddFileSection('menu.html'); //подключаем файл с секциями
  • $items= array('item1','item2','item3');
  • foreach($items as $item)
  • {
  • $TMS->AddMassReplace('menu',array('itemName'=>$item)); //добавляем замену для названий пунктов меню
  • $TMS->ParseSection('menu_item',true); //true означает , что после парсинга секции menu_item результат парсинга будет склейваться с предыдущим, поэтому функция ничего не возвращает
  • }
  • echo $TMS->ParseSection('menu');

Результат операции:

  • <ul>
  • <li>  item1      </li>
  • <li>  item2      </li>
  • <li>  item3      </li>
  • </ul>

1.3 Фильтры и функции

TMS позволяет подключить неограниченное число объектов и вызывать методы данного объекта в контексте парсинга секции

пример(call_func.html):

  • {%section:call_func%}
  • {%F:#value(Obj:myfunc(2))%} // данна запись означает : выполнить метод объекта "Obj" и вернуть результат в переменную {%F:value%} - внимание! данная функция ничего не выводит в контекст шаблонной системы
    // она инициалицирует переменную {%F:value%}, которую в последствии можно вывести
  • result:{%F:value%}
  • {%F:#value2(Obj:myfunc({F:mytplvalue}))%} // в качестве аргументов функции можно передавать переменные шаблонной системы
  • second result:{%F:value2%}
  • third result: {%F:value2(Obj:myfilterfunc({F:mytplvalue}))%} // пример использования функции фильтра, в данном случае функция возвращает значение в контекст шаблонной системы

PHP:
  • class myclass
  • {
  • ...
  • //$params - массив параметров функции фильтра
  • public function myfunc($params)
  • {
  • return $params[0]*$params[0];
  • }
  • //$val - это значение переменной шаблона
  • //$params - массив параметров функции фильтра
  • public function myfilterfunc($val,$params)
  • {
  • return $val*$params[0];
  • }
  • }
  • $TMS = new TMutiSection(); //инициализация
  • $TMS->registerHandlerObj('Obj',new myclass()); //Регистрируем объект как 'Obj'
  • $TMS->AddFileSection('call_func.html'); //подключаем файл с секциями
  • $TMS->AddMassReplace('call_func',array('mytplvalue'=>4));
  • echo $TMS->ParseSection('call_func');

Результат операции:

  • result:4
  • second result:16
  • third result:32

1.4 Логические операции

Шаблонная система поддерживает if - else логику любой глубины вложения

пример(logic.html):

  • {%section:logic%}
  • {%if('{F:region}')%}
  • <li><strong>Регион:</strong> {%F:region%}</li>
  • {%endif%}
  • {%if({F:size}<2)%}
  • Меньше 2
  • {%else%}
  • Больше 2
  • {%endif%}
  • {%endsection:logic%}

PHP:
  • $TMS = new TMutiSection(); //инициализация
  • $TMS->AddFileSection('logic.html'); //подключаем файл с секциями
  • $TMS->AddMassReplace('logic',array('region'=>'Moscow','size'=>3));
  • echo $TMS->ParseSection('logic');

Результат операции:

  • <li><strong>Регион:</strong>Moscow</li>
  • Больше 2

2.Более сложные примеры

© 2009 Все права на систему © X3M.CMS принадлжат OДО «Центр информационных технологий Биконсалт»