О том, как же подключить Smarty к MVC патерну

Приветствую, дорогие друзья!

Сегодня я вам поведую о том, а как же всё таки подключить шаблонизатор Smarty к сайту, работающему на MVC патерне.

Начнем, я думаю с самого главного, я предупреждаю вас о том, что данный метод ПРОТИВОПОКАЗАН для кокого-нибудь PHP фреймворка, спросите вы:

- А почему?

Отвечаю:

- А потому, что применяемый в данном уроке способ, исказит работу фреймворка, о том как подключить Smarty к фреймворку я расскажу в следующем уроке...

И так, начнем. Для начала нам понадобится сам Smarty, который вы можете скачать на официальном сайте http://www.smarty.net

Скачиваем последнюю Stable версию.

Идем далее, переходим в папочку с вашим сайтом, и создаем в корне директорию, и допустим, назовем её Smarty или ... Хм, да как хотите называйте, не моё дело :) А теперь самое интересное, нам нужно расширить наш самый главный контроллер от класса шаблонизатора, это конечно глупо, но можно сделать и по другому, завести специальный класс Views, который будет работать в вашем MVC паттерне с отображениями, на самом деле у меня так и сделано, но обычно мне встречается вот такая архитектура:

  1. _mvc_ (Директория) В ней
  2. _controller.php
  3. _model.php

Всё, больше в ней ничего нет, это не совсем правильно, я думаю всем понятно почему? Потому, что контроллер не должен работать с отображениями, он должен связывать модель и отображение, а вот правильная структура

  1. _mvc_ (Директория) В ней
  2. _controller.php
  3. _model.php
  4. _views.php

А теперь всё правильно, контроллер играет роль моста, модель работает с бд, а вьювс с отображениями, всё круто, всё логично

А теперь непосредственно перейдем к сути урока

Сейчас мы будем подключать смарти к контроллеру, для этого, топаем в наш главный контроллер, в моем случае это _controller.php, открываем его, видим свой код, который вы ручками писали-писали-писали-писали.

И думаем, а как же подключить сюдЫ смарти, а пока вы думаете, я вам помогу.

Помните мы создали директорию smarty в корне проекта? Помните, отлично, а помните что мы скачали архив со смарти? И это помните? Да вы у меня прям молодцы :) Ну всё-всё :) Хватит вам похвалы пока что :) Открываем таинственный архив, который мы скачали с офф. сайта смарти, и смотрим, видим там папочку DEMO и libs, вот из папочки libs всё и выгружаем в папочку smarty в корне нашего проекта. Получилось? Отлично.

Теперь возвращаемся в контроллер наш любимый.

Ну думаю, что дальше всё понятно. Из папочки Smarty нам надо заинклюдить файл Smarty.class.php перед классом контроллера, и разумеется расширить контроллер от класса Smarty.

Теперь переработаем ваш контроллер, допустим он выглядит сейчас так.

<?php    require_once(dirname(__FILE__) . '/../../smarty/Smarty.class.php');    class Controller extends Smarty {     public function __construct()   {    // Твой мега код   }     // Твои мега методы  }

 Конкретно, нам надо доколупаться до конструктора, а конкретнее, инициализировать смарти. Аааааах забыл, память моя 8-ми битная.

Нам нужно создать еще папочку

templates

в корне проекта, а в ней еще такие удивительный папочки

  • compile
  • skins
  • config
  • cache
  • plugins

Потом вы поймете зачем.

Теперь возвращаемся к инициализации нашего любимого смарти. Перерабатываем к херам наш контроллер, делаем его вооот таким.

<?php

require_once(dirname(__FILE__) . '/../../smarty/Smarty.class.php');

class Controller extends Smarty {

public $patchs = Array(
'template_dir' => PROJECT_PATH . 'templates/skins/';
'cache_dir' => PROJECT_PATH . 'template/cache/';
'compile_dir' => PROJECT_PATH . 'template/compile/';
'plugins_dir' => PROJECT_PATH . 'template/plugins/';
);

public function __construct()
{
parent::__construct();

foreach ($this->patchs as $smarty_var_dir_name => $smarty_var_dir_value)
{
if ( ! is_dir($smarty_var_dir_value))
{
break ;
}

$this->{$smarty_var_dir_name} = $smarty_var_dir_value;
}

// Твой код контроллера
}

// Твои супер наикрутейшие методы

}

 Я сейчас объясню что я тут сделал, в массиве $patchs хранятся пути к папкам, которые мы создали в templates, в массиве ключи, это как вы поняли переменные класса Smarty, которые устанавливают пути к папкам для работы с шаблонизатором, а значение само собой сам путь. Идем далее, в конструкторе мы бежим в цикле по этому массиву, проверяем существует ли директория, которая указана в $smarty_var_dir_value, если нет, то выходим из цикла, а если есть, присваиваем значение переменной в классе Smarty :) Мы же куллпрогеры) По-этому так и сделали :)

Всё, у нас всё работает.

P.S В константе PROJECT_PATH у меня $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR.

P.S.S Обязательно, скопируйте плагины в папку templates/plugins/, плагины можно взять из архива со Smarty в папочке DEMO дальше в plugins, вот там и есть эти крутые плагины :)

Остальное зависит от вас, как вы прочтете доку по смарти, так и будете писать :)

Удачи ;)

Пожаловаться Подписаться
1 ответ
profxaker

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

авторизуйтесь чтобы ответить