Основные конструкции системы
Основные понятия
Шаблонная система; 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). Область видимости первых определена на уровне все подключенных шаблонов, вторых - на уровне секции.
- {%section:main%}
- {%MF:myglobal%} //глобальная переменная
- {%F:mylocal1%} //локальная переменная
- {%F:mylocal2%} //локальная переменная
- {%endsection:main%}
- {%section:main_second%}
- global again: {%MF:myglobal%} //глобальная переменная
- {%endsection:main_second%}
- $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');
Результат операции:
1.2 Связывание секций
Как уже отмечалось ранее - cекции не могут быть вложенными, но есть специальный механизм при помощи которого секции связываются.
Рассмотрим пример:
- {%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%}
- $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 позволяет подключить неограниченное число объектов и вызывать методы данного объекта в контексте парсинга секции
- {%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}))%} // пример использования функции фильтра, в данном случае функция возвращает значение в контекст шаблонной системы
- 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 логику любой глубины вложения
- {%section:logic%}
- {%if('{F:region}')%}
- <li><strong>Регион:</strong> {%F:region%}</li>
- {%endif%}
- {%if({F:size}<2)%}
- Меньше 2
- {%else%}
- Больше 2
- {%endif%}
- {%endsection:logic%}
- $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