В Kohana я обычно использую класс Template_Controller. Очень удобно — layout один, изменяешь только контент. Но как быть если на одной какой-то странице нам понадобилось подключить CSS- или JS-файл?! C js- файлом еще ладно, его можно подключить посредине страницы (но это как-то некрасиво), а как же css?! — это невалидно. Подключать на весь layout тоже неохота. Хочу подключать не в контроллере, а в шаблоне к примеру так:
и так чтобы файл корректно подключился в head документа. Ничего нового здесь нет. В фреймверке symfony это уже реализовано с первой версии. И естественно что другого способа как обрабатывать готовый к выбросу html просто не может быть. Механизм очень простой забираем у Kohana полностью готовый документ и добавляем туда нужные нам строки. Сделать это можно с помощью хука, но я решил сделать это с помощью переопределения контроллера.
Добавляем хелпер head.php в папку application/helpers
Создаем контроллер application/libraries/BaseController.php от которого будем наследовать наши контроллеры:
И теперь создаем два конфига application/config/style.php:
И второй application/config/js.php:
На этом все. Можно еще конечно оформить это все в виде модуля, так наверное даже удобнее будет переносить из проекта в проект. Но это кому надо сделает сам.
Теперь прописываем в конфиге дефолтные файлы которые нужно подключать. А далее где необходимо в шаблоне пишем:
В хелпере есть целый набор методов.
Планирую еще его немного дописать в строну проверки на дубликаты.
Мой блог
Copy Source | Copy HTML
- <?php head::addCSS('main')?>
и так чтобы файл корректно подключился в head документа. Ничего нового здесь нет. В фреймверке symfony это уже реализовано с первой версии. И естественно что другого способа как обрабатывать готовый к выбросу html просто не может быть. Механизм очень простой забираем у Kohana полностью готовый документ и добавляем туда нужные нам строки. Сделать это можно с помощью хука, но я решил сделать это с помощью переопределения контроллера.
Добавляем хелпер head.php в папку application/helpers
Copy Source | Copy HTML
- <?php
- /* <br/> * Хелпер аккумулирует вставляемые css и js файлы<br/> * И в конце вставляет их в layout<br/> */
-
- /**<br/> * Вставка стилевых и javascript-файлов<br/> *<br/> * @author Valera Sizov<br/> */
- class head
- {
- static $styleFiles = array();
- static $jsFiles = array();
- static public function addingFiles($layout)
- {
- $css = array_merge(Kohana::config('style.files'),self::$styleFiles);
- $js = array_merge(Kohana::config('js.files'),self::$jsFiles);
- $out = '';
- foreach ($css as $file)
- {
- $out .= '<link rel="stylesheet" type="text/css" href="/static/css/'.$file.'.css">'."\n";
- }
- foreach ($js as $file)
- {
- $out .= '<script src="/static/js/'.$file.'.js" type="text/javascript"></script>'."\n";
- }
- return str_replace('</head>', '$out."\n".</head>', $layout);
- }
- static public function addCss($css)
- {
- if(is_array($css)){
- self::$styleFiles = array_merge(self::$styleFiles,$css);
- } else {
- self::$styleFiles = array_merge(self::$styleFiles,array($css));
- }
- }
- static public function addJs($js)
- {
- if(is_array($js)){
- self::$jsFiles = array_merge(self::$jsFiles,$js);
- } else {
- self::$jsFiles = array_merge(self::$jsFiles,array($js));
- }
- }
- static public function removeCss()
- {
- Kohana::config_set('style.files', array());
- }
- static public function removeJs()
- {
- Kohana::config_set('js.files', array());
- }
- static public function addOnlyCss($css)
- {
- self::removeCss();
- self::addCss($css);
- }
- static public function addOnlyJs($js)
- {
- self::removeJs();
- self::addJs($js);
- }
-
- }
- ?>
Создаем контроллер application/libraries/BaseController.php от которого будем наследовать наши контроллеры:
Copy Source | Copy HTML
- <?php
- abstract class BaseController extends Template_Controller {
-
- public $template='frontend/layout';
- public function _render()
- {
- if ($this->auto_render == TRUE)
- {
- // Render the template when the class is destroyed
- echo head::addingFiles((string)$this->template);
- //$this->template->render(TRUE);
- }
- }
- }
- ?>
И теперь создаем два конфига application/config/style.php:
Copy Source | Copy HTML
- <?php
- /*Перечисление javascript - файлов которые будут присоеденены к главному шаблону по умолчанию<br/> потом вы можете переопределить их или дополнить */
- $config['files'] = array();
-
- ?>
И второй application/config/js.php:
Copy Source | Copy HTML
- <?php
- /*Перечисление javascript - файлов которые будут присоеденены к главному шаблону по умолчанию<br/> потом вы можете переопределить их или дополнить */
- $config['files'] = array();
-
- ?>
На этом все. Можно еще конечно оформить это все в виде модуля, так наверное даже удобнее будет переносить из проекта в проект. Но это кому надо сделает сам.
Теперь прописываем в конфиге дефолтные файлы которые нужно подключать. А далее где необходимо в шаблоне пишем:
Copy Source | Copy HTML
- <?php head::addCss('form_contacts')?>
В хелпере есть целый набор методов.
Планирую еще его немного дописать в строну проверки на дубликаты.
Мой блог