template
- class template {
- private static $template = ''; // Главный шаблон
- private static $blocks = array(); // Блоки
- private static $data = array(); // Данные для главного шаблона
- private static $errors = array(); // Различные ошибки
- /**
- * Function: get_template()
- * Description: Получение шаблона
- * Parameters: $template (string) Шаблон
- */
- public static function get_template($template) {
- if (file_exists($template)) {
- self::$template = $template;
- } else die ($template . ' is not exists');
- }
- /**
- * Function: get_blocks()
- * Description: Получение блоков для шаблона
- * Parameters: $blocks (array) Блоки
- */
- public static function get_blocks($blocks = array()) {
- $total = count($blocks);
- if ($total > 0) {
- for ($i = 0; $i < $total; $i++) {
- if (file_exists($blocks[$i])) {
- self::$blocks[] = file_get_contents($blocks[$i]);
- } else {
- self::$errors[] = 'Block "' . $blocks[$i] . '" is not exists';
- }
- }
- }
- }
- /**
- * Function: set_blocks()
- * Description: Вставка блоков в главный шаблон
- * Parameters: $data (array) Данные необходимые для блоков
- */
- public static function set_blocks($data = array())
- {
- $total = count($data);
- if ($total > 0) {
- for ($i = 0; $i < $total; $i++) {
- ob_start();
- extract($data[$i], EXTR_REFS);
- eval(' ?>'. self::$blocks[$i] .'<?php ');
- self::$data[] = ob_get_contents();
- ob_end_clean();
- }
- }
- }
- /**
- * Function: parse_template()
- * Description: Обработка шаблона
- * Return values: $content (string)
- */
- public static function parse_template()
- {
- extract(self::$data, EXTR_PREFIX_ALL, 'tpl');
- ob_start();
- require (self::$template);
- $content = ob_get_clean();
- return $content;
- }
- /**
- * Function: display()
- * Description: Вывод содержимого на экран
- */
- public static function display() {
- echo self::parse_template();
- }
- /**
- * Function: display_errors()
- * Description: Сообщения об ошибках
- */
- public static function display_errors() {
- if (!empty(self::$errors))
- echo '<p>' . (is_array(self::$errors) ? implode('<br />', self::$errors) : self::$errors) . '</p>';
- }
- }
Пример использования
Содержимое шаблонов:
module1.tpl
block.tpl
block2.tpl
Результат http://upwap.ru/1898811
- template::get_template('view/module1/module1.tpl');
- template::get_blocks(array('tet', 'view/module1/block.tpl', 'view/module1/block2.tpl'));
- template::set_blocks(array(
- array('var' => 'this is var of block.tpl'),
- array('var' => 'this is var of block2.tpl')
- )
- );
- template::display_errors();
- template::display();
module1.tpl
- <h3>Module 1</h3>
- <p>This is example of working with template class</p>
- <?php echo $tpl_1 . $tpl_0; ?>
- <div>End of main template of module 1</div>
- <h1>This is block.tpl</h1>
- <?php echo $var; ?>
- <h1>This is block2.tpl</h1>
- <?php echo $var; ?>
Результат http://upwap.ru/1898811