01.02.2016
Установка Smarty в Codeigniter 3.x
Один из моих любимых фреймворков Codeigniter не имеет встроенной поддержки шаблонизаторов, и исходя из этого, я стараюсь везде ставить к нему Smarty. Однако за практику встречал у многих проблемы с установкой или использованием. Кроме того, поискав гайды, как провернуть такую установку, я не нашел адекватных способов сделать это на русском. Так что давайте рассмотрим, как правильно установить эти приложения вместе.
https://github.com/smarty-php/smarty/releases
- Скачиваем последнею версию Smarty из репозитория выше.
- Перемещаем папку Smarty (из скаченного архива) в system/libraries
- Там же в папке system/libraries создаем файл Smarty.php и записываем в него ниже приведенный код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
if (!defined('BASEPATH')) exit('No direct script access allowed'); require_once( BASEPATH.'libraries/Smarty/libs/Smarty.class.php' ); class CI_Smarty extends Smarty { public function __construct() { parent::__construct(); $this->compile_dir = APPPATH . "views/templates_c"; $this->template_dir = APPPATH . "views/templates"; $this->assign( 'APPPATH', APPPATH ); $this->assign( 'BASEPATH', BASEPATH ); // Assign CodeIgniter object by reference to CI if ( method_exists( $this, 'assignByRef') ){ $ci =& get_instance(); $this->assignByRef("ci", $ci); } log_message('debug', "Smarty Class Initialized"); } function view($template, $data = array(), $return = FALSE) { foreach ($data as $key => $val){ $this->assign($key, $val); } if ($return == FALSE){ $CI =& get_instance(); if (method_exists( $CI->output, 'set_output' )){ $CI->output->set_output( $this->fetch($template) ); }else{ $CI->output->final_output = $this->fetch($template); } return; }else{ return $this->fetch($template); } } } ?> |
- На 11 строке указываем папку для скомпилированных шаблонов (не забываем про права на запись).
- На 12 строке указываем папку самих шаблонов
- И на конец идем в application/config/autoload.php и добавляем в автозагрузку
1 |
$autoload['libraries'] = array('smarty'); |
Теперь вы можете использовать в своих контроллерах такой код, для передачи данных в шаблон
1 2 3 4 |
public function index(){ $data['title'] = 'hello world'; $this->smarty->view('example.tpl',$data); } |
и в самом шаблоне выводить данные так
1 |
{$title} |
Если возникнут проблемы — пишите, разберемся вместе. Если будет необходимость в статье по установке к другим фреймворкам — говорите к каким, создам.