Kohana 3.2- темизация ,изменение местоположения папки views

В свое время я столкнулся с проблемой изменения местоположения папки views. Плюс ко всему я планировал организовать возможность смены шаблонов ,информация по этому в googl’e или yandex’e очень скудна поэтому решил выложить свой способ реализации.

Папка views хранит в себе шаблоны для вывода информации.Фреймворк Kohana использует паттерн — HMVC (Hierarchical Model View Controller — Иерарархические Модель-Контроллер-Вид) ,а это значит что нужные файлы по умолчанию kohana сначала ищет в:

  1. Папки приложения (application)
  2. Папка каждого из модулей (modules).
  3. Системная папка (system). И в последнюю очередь, Kohana ищет файл в собственной системной папке.

Чтобы достичь поставленной цели предлагаю расширить основной класс kohana.
Для этого создадим класс kohana в папке application/classes/kohana.php с методом add_path:

<br />
<?php defined('SYSPATH') or die('No direct script access.');
class Kohana extends Kohana_Core {
    public static function add_path($path) {
    if (!empty($path) && file_exists($path) && is_dir($path))
    Kohana::$_paths&#91;&#93; = $path;
    }
}
&#91;/php&#93;
Теперь через метод <strong>add_path</strong> мы можем указать свою собственную папку в котором будут храниться наши шаблоны.<br />
Покажу на собственном примере:</p>
<p><br />
<?php defined('SYSPATH') or die('No direct script access.');
 abstract class Page extends Controller_Template {
    public $themes = 'default';
    public function before()
    {
    /**
    * Указываем свой путь до папки
    */
    Kohana::add_path('themes/'.$this->themes.'/');<br />
    parent::before();<br />
    }<br />
}<br />

Я создал свой базовый контроллер наследуемый от контроллера шаблонов ,и в «конструкторе» методе before() прописал путь до папки с помощью метода add_path.

Теперь при создании других контроллеров я буду наследовать их от своего базового контроллера Page (application/classes/page.php).

К примеру:

<br />
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Page extends Page {
   // Главная страница
   public function action_index()
   {
   /**
   * Обращение к шаблону index.php в папке views
   */
   $this->template->content = View::factory('index');<br />
    }<br />

Теперь наши шаблоны будут искаться не в application/views/ а в папке themes/имя_темы/views это относиться не только к папке application но и к папке с модулями.

Спасибо за внимание )

Вам также может понравиться ...