Как подключить Smarty к проекту на фреймворке Codeigniter 2, а также использование шаблонизатора в выводе и генерации HTML в контроллерах?
Фреймворк CodeIgniter — это прекрасный инструмент для разработки уникального функционала «с нуля». Это «почти чистый php». У него очень низкий порог вхождения, т.е. в том, как эта штука работает, можно разобраться очень быстро. Тем не менее, все мы привыкли работать с тем, что нам удобно и понятно.
Я бы не сказал, что стандартные средства вывода контента на CI плохи или неудобны. Так сложилось, что я много времени провожу, «ковыряя» сайты на CMS, которые используют шаблонизатор Smarty.
Можно много спорить о том, на чем лучше и как лучше разрабатывать интернет-приложения. Не буду вдаваться в подробности, я просто расскажу как использовать Smarty при разработке на CodeIgniter.
Smarty в архитектуре CI — это библиотека, соответственно и
application/libraries/
.
В итоге в этой папке (если конечно у вас чистая установка фреймворка или вы не использовали других библиотек) будут находиться папка со Smarty и файл
Smrt.php
— который будет все подключать.
Конечно можно назвать файл и класс по-другому, не
Smrt
, это уже как удобно. Только не
Smarty
, он уже есть.
require_once "smarty/Smarty.class.php";
class Smrt extends Smarty {
function __construct() {
parent::__construct();
$this->template_dir = "frontend/theme/templates/skin/";
$this->compile_dir = "frontend/theme/templates/compile/";
}
}
Папки должны быть обязательно созданы, а также иметь права на запись.
После этого в контроллерах фреймворка мы можем забыть о выводе шаблонов через
view
.
Теперь для вывода контента можно делать вот так:
class Welcome extends Controller {
function index() {
/*
* эту строку можно не писать,
* если библиотека есть в autoload
*/
$this->load->library("smrt");
$this->smrt->assign("hello", "Hello, world!");
$this->smrt->display("index.tpl");
}
}
А содержимое файла
index.tpl
, который как мы помним должен лежать в папке, которую мы прописывали в
template_dir
(
frontend/theme/templates/skin/
), будет такое:
{$hello}
И результатом будет всем известная строка, черным по белому!
И еще один момент. Так как выводить контент придется практически постоянно, то можно библиотеку прописать в
autoload
, в папке с конфигурационными файлами.
Надеюсь материал был полезен! Спасибо!