CodeIgniterTemplate Library

Опубликовано 30 мая 2009 Комментарии (18)

Template Library — это библиотека для организации шаблонов и удобной работы с ними для CodeIgniter. Шаблон сайта состоит из 3 основных частей (header.php, content.php, footer.php).

Структура папок:

www
-system
-templates
--default
---header.php
---content.php
---footer.php
— …
-index.php

Требования:

Codeigniter 1.7.1 или новее.
PHP 5 или новее.

Установка библиотеки:

Скачать и распаковать архив в папку /application/libraries/.
Пупку /templates/ положить в корень сайта рядом с index.php.
Скорректировать файл .htaccess для загрузки CSS, JavaScript и изображений.

Мой пример:
RewriteEngine on
RewriteCond $1 !^(index\.php|templates|robots\.txt|favicon\.ico)
RewriteRule ^(.*)$ /index.php/$1 [L]
Options  +Indexes
AddDefaultCharset utf-8

Настройки:

Все настройки библиотеки находяться в файле /application/config/Template.php

//Название папки шаблона
$config['global_template'] = "default/";

//Разделитель сегментов загаловка
$config['title_separator'] = " - ";

//Направление загаловка страницы
//RTL - справа на лево
//LTR - слева на право
$config['title_direction'] = "RTL";

//Переменные по умолчанию
$config['vars_default'] = array();


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

//Установка блоков по умолчанию
$config['block'] = array();


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

//Css файлы по умолчанию
$config['head']['css'] = array();

//Js файлы по умолчанию
$config['head']['js'] = array();

//Feeds по умолчанию
$config['head']['feed'] = array();


Автоматическая подгузка необходимых ресурсов, будут отображаться на всех страницах сайта.
Пример:
$config['head']['css'] = array(
    array('href' => 'css/printer.css', 'rel' => 'stylesheet', 'type' => 'text/css', 'media' => 'print')
);
$config['head']['js'] = array(
    array('js/core.js')
);
$config['head']['feed'] = array(
    array('href'     => 'http://habrahabr.ru/rss/', 'rel' => 'alternate', 'type' => 'application/rss+xml', 'title' => 'My Feed')
);


//Заголовок сайта по умолчанию
$config['head']['title'] = array('Test site');

//Метаинформация
$config['head']['meta'] = array(
        array('name' => 'robots', 'content' => 'no-cache'),
        array('name' => 'Content-type', 'content' => 'text/html; charset=utf-8', 'type' => 'equiv')
);

Описание методов с примерами:

render() — основная функция, необходимо вызывать в её в конце метода контроллера, она обрабатывает всё переданую в неё информации и выводит на страницу весь контент.
Можно передать имя вида для для отображения средней части страницы.
$this->template->render();


set() — создание переменной для отображения её в шаблоне.
$this->template->set('var_name', 'var_value');


set_template() — изменение шаблона сайта. Рекомендуется вызывать в начале сценария.
$this->template->set_template('template_name');


set_block() — создание блока. Основное отличие от set(), это то что блок можно продолжить, указав тоже имя.
$this->template->set_block('sidebar', 'Значение сайдбара');
$this->template->set_block('sidebar', 'Продолжаем сайдбар....');


set_block_view() — создание блока с подгрузкой вида из папки /blocks/ которая находиться в шаблоне.
$this->template->set_block_view('sidebar', 'text', array('var_name' => 'var_value'));


Первый параметром передаём имя блока который будет создан или продолжен, вторым имя файла который нужно подгрузить и третьим можно передать данные в подгружаемый файл.

get_block() — получение целого блока по его имени, будет полезное если нужно например закэшировать созданый блок.
$this->template->get_block('sidebar');


set_title() — добавление сегмента в заголовок страницы.
$this->template->set_title('Welcome');


set_meta() — добавление метатэгов на страницу.
$this->template->set_meta('description', 'My Great Site');


set_feed() — добавление фида на страницу.
$this->template->set_feed('http://habrahabr.ru/rss/');


set_css() — добавление CSS файла на страницу.
$this->template->set_css('css/style.css');


set_js() — добавление JavaScript файлов на страницу.
$this->template->set_js('js/script.js');


view() — аналогичен одноимённому родному методу, только подгружает файлы вида из заданного шаблона и всегда возвращает результат в переменную.
$data = $this->template->view('more');


Переменный в шаблонах:

Все переменные доступны в любых файлах вида.
$base_header — содержит все подгруженные метатэги, фиды, css файлы и js файлы.
$base_url — URL сайта заданый в основном конфиге.
$base_path — путь до папки с текущим шаблоном.
$base_title — содержит заголовок страницы.
$block['block_name'] — содержимое блока.

Скачать:

Template Library v 0.1
Пример Template Library + CI 1.7.1

Буду рад услышать ваши замечания и дополнения.

Метки: CodeIgniter, PHP

Комментарии:

Tovit 31 май 2009, 11:17
Имея свою похожую библиотеку, хотелось бы посоветовать дополнить набор, например, методом добавляющим JavaScript код в начало документа, т.е. что-то вроде add_raw_js($raw_code)
Ответить
Ladygin 31 май 2009, 11:38
Тоже думал об этом… добавлю, спасибо.
Ответить
Alexander 30 июнь 2009, 00:07
Не нужно здесь путь к js передавать в массиве, надо вот так )
$config['head']['js'] = array( 'js/core.js', 'js/more.js' );

Еще мне показалось неудобным, что через метод $this->template->set_css('css/style.css'); путь отсчитвается от templates/default
а через $config['head']['css'] = array( ); — от корня сайта.

А так, за библиотеку спасибо.
Реализовывали ли вы кеширование по блокам шаблона?
Ответить
Ladygin 02 август 2009, 12:28
Кэширование реализовывал с помощью Zend Cache для этого специально сделан метод:
$this->template->get_block('sidebar');

Спасибо большое за замечания!
Ответить
Glam 26 июль 2009, 09:23
Спасибо большое за библиотеку! Не давно столкнулся с CI, и решил всерьез с ним поработать! Благодаря этой статье — отвалился одна большая проблема, для меня!

Очень прошу, продолжайте статьи на тему CI. Добавил в закладки.

Респект!
Ответить
molodoy 07 август 2009, 17:55
Спасибо за то, что выложили свой труд в свободное скачивание, но ссылка не работает :(
Ответить
SashaBorandi 09 август 2009, 12:48
Я тоже поблагодарю за такое красочное описание, но вот оценить Этакое творение богов я не могу… Данных файлов на вашем хостинге нету… Если можно выложите на мыло…
Ответить
Ladygin 09 август 2009, 16:41
Исправлено.
Извиняюсь за неисправность при переезде на другой хостинг затерялись.

Спасибо что написали!
Ответить
molodoy 10 август 2009, 13:18
Эхх ) вот так всегда, успел уже свое написать «по образу и подобию». Там, как оказалось, на пару часов делов-то…
Спасибо еще раз :)
Ответить
aiai-uiui 21 август 2009, 21:07
Отличная библиотека, спасибо, но есть пара вопросов:
у меня три основных шаблона header, content, footer, причем content я разделил на два блока sidebar и wrapper
во wrapper подгружаются тоже файлы шаблонов, в зависимости от выбранного конструктора но вот уже в конечных файлах глобальные переменные типа '$base_path' совсем не глобальные, или я что-то не так делаю? подскажите, спасибо
Ответить
Ladygin 30 август 2009, 12:16
Да действительно есть такой недочёт, обещаю скоро исправить эту проблему и ещё некоторые вещи.
Ответить
Michael 12 октябрь 2009, 16:02
Если можно поподробнее опешите view() метод. Заранее спасибо
Ответить
ladygin 18 октябрь 2009, 00:08
Метод:
$this->template->view('more');

Полностью аналогичен методу:
$this->load->view('more');

За одним исключением, он всегда возвращает содержимое шаблона в переменную, это аналогично такой записи:
$this->load->view('more', $array, true);

Ответить
DImDim 18 декабрь 2009, 14:16
Скажите пожалуста а как передать переменную или в массив в отдельный блок у меня почему то не получается :-(
Ответить
DImDim 18 декабрь 2009, 14:29
Прошу прощения не заменил описание set_block_view()
Ответить
boobko 02 февраль 2010, 22:37
все бы было хорошо, и народ бы пользовался, если бы не было ряда недочетов. например:
1. если в конфиге темплейтов прописать
//Css файлы по умолчанию
$config['head']['css'] = array(
array('href' => 'css/blueprint/screen.css', 'rel' => 'stylesheet', 'type' => 'text/css', 'media' => 'screen, projection'),
array('href' => 'css/blueprint/print.css', 'rel' => 'stylesheet', 'type' => 'text/css', 'media' => 'print')
);
то при формировании линков, между ними вставляется \n
и нет релятивности ссылок. не подставляется поуть до шаблона

2. как подставить подгрузку внешних JS библиотек. например
//Js файлы по умолчанию
$config['head']['js'] = array(
array('http://code.jquery.com/jquery-1.4.1.min.js')
);
на странице получается [removed]

это вот как-то пока ошибки найденные за 20 минут.

направление этой модели шаблоницации для CI умерло?
Ответить
EIRAno 01 апрель 2010, 13:20
эти ошибки правятся ручками за те же 20 минут
Ответить
boobko 02 февраль 2010, 22:44
это я еще умолчал про валидность сформированной страницы. не заметил после генерации DOCTYPE. как же так не соблюдать стандартов w3c. как потом добиваться совместимости и нормального отображения во всех браузерах?
Ответить

Комментировать

*Логин:

*E-mail:
(сохранность гарантируем)

Сайт:

Aptana Class CodeIgniter Flash IDE JavaScript Linux PHP PostgreSQL SSH Ubuntu Zend Framework cms css jQuery online-приложения wordpress Базы данных Книги Кэширование ООП Ссылки Типографика вдохновение вебдизайн виджеты дизайн заголовки инструменты поддомены разработка регистрация

Блог
Новости

Новости индустрии

Пожертвовать