Веб-разработка. Поддержка тем в вашем приложении на CodeIgniter

Совсем недавно мне понадобилось реализовать поддержку тем в моём движке «Candy». Мой движок для микроблоггинга – наподобии тумблера, но с возможностью размещения блога на своём хостинге – пример проекта purpleitch.ru. Так вот, мне хотелось что бы пользователь мог легко менять темы, как например, на WP, DataLife Engine. Я незнаю толи искал как то не так, но ничего достойного мне не попадалось. Мне хотелось простоты, удобства… В итоге я сделал своё решение, которое легло и в мой движок «Candy». Приступим.Совсем недавно мне понадобилось реализовать поддержку тем в моём движке «Candy». Мой движок для микроблоггинга – наподобии тумблера, но с возможностью размещения блога на своём хостинге – пример проекта purpleitch.ru. Так вот, мне хотелось что бы пользователь мог легко менять темы, как например, на WP, DataLife Engine. Я незнаю толи искал как то не так, но ничего достойного мне не попадалось. Мне хотелось простоты, удобства… В итоге я сделал своё решение, которое легло и в мой движок «Candy». Приступим.

Что бы назначить другую папку для хранения наших вьюшек (они же шаблоны), нам нужно написать свой загрузчик (Loader), где мы переопределим переменную _ci_view_paths.

И так, создаём файл MY_Loader.php в папке /application/core/, внутри пишем:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Loader extends CI_Loader {

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

        $this->_ci_view_paths = array('theme/template/'  => TRUE);
    }
}

/* End of file CANDY_Loader.php */
/* Location: .system/application/core/MY_Loader.php */

Теперь, в корне нашего проекта создаём папки /theme/templates. И всё, что находилось в папке view, переносим в – /theme/templates.

Теперь, если вы запустите браузер и откроете сайт, всё будет отлично работать.

Если, вы хотите менять темы просто указав имя темы в конфиге, нужно будет сделать следующее. Добавим свой файл конфигурации в /application/config/themes.php, внутри файла напишем:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

$config["theme"] = "default";

/* End of file themes.php */
/* Location: ./application/config/themes.php */

Окей, теперь немного обновим наш загрузчик MY_Loader.php:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Loader extends CI_Loader {

    function __construct() 
    {
        parent::__construct();
        
        $CI =& get_instance();

        $CI->config->load('themes');
        $this->_ci_view_paths = array('theme/'.$CI->config->item('theme').'/template/'  => TRUE);
    }
}

/* End of file CANDY_Loader.php */
/* Location: .system/application/core/MY_Loader.php */

Так как $this работает только в моделях и контроллерах, а нам нужно получить доступ к нашем конфигу, мы передали переменной $CI ссылку на суперобъект CodeIgniter. Затем загрузили наш конфиг и получили значение настройки theme.

Окей, теперь в папе theme, создадим папку нашей темы – default (как указано в конфиге) и туда переместим папку template. Чтобы вы не путались в понятиях, объясню разницу между темами и шаблонами. Многие считают, что это одно и то же. Я думаю иначе, у нас есть папка для тем (theme), где будут лежать различные темы.

В папке вашей темы, стоит разместить папку для стилей, скриптов и изображений. Также в ней есть папка для шаблонов, где собственно и находятся наши вьюшки. Думаю, теперь всё понятно.

Вот так всё удобно в итоге у нас получилось.

Исходные коды веб-приложения «Themes» – [attachment=44]

Я на Google+