Использование Smarty в CodeIgniter

Как подключить 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

, в папке с конфигурационными файлами.

Надеюсь материал был полезен! Спасибо!


EnglishRussianUkrainian