Smarty + CodeIgniter — правильное использование модели

Прежде всего: я понимаю, что использование моделей в представлении противоречит иерархии MVC, но это самое гладкое решение, которое я нашел до сих пор.

Я интегрировал Smarty в свое приложение CodeIgniter CMS. Одной из его особенностей является использование шаблонов наряду с минимизацией статического контента, такого как CSS и JavaScript. Следовательно, я пытаюсь сделать что-то подобное в файле шаблона:

//Adding the static content
<?php
$this->content->css( array('my.css', 'style.css') );
?>

<html>
   <head>
      //Displaying the now minified static content
      <?php $this->content->display() ? >
   </head>
</html>

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

Оценивая все входы!


person Zar    schedule 21.04.2012    source источник


Ответы (2)


Я думаю, что вы не должны использовать какие-либо функции, связанные с codeigniter, в шаблонах Smarty. Каталог CSS является постоянным, поэтому нет необходимости вызывать php-функцию.

Если вам понадобится какая-то информация из CI, вы assign перейдете к смарт-переменной в вашей функции-контроллере, чтобы не сломать MVC:

$smarty->assign(array(
   "display" => $this->content->display(),
   "css_include" => $this->content->css(array("my.css","style.css"))
));

Как писал выше jco, в простых случаях CI&Smarty может быть "излишним". Но в тех же случаях это очень полезно (например, наследование шаблонов и блоки могут использоваться для создания одинаковых типов форм).

person uzsolt    schedule 22.04.2012
comment
Эффект наследования шаблонов можно воссоздать в CI без помощи Smarty. - person Kemal Fadillah; 22.04.2012
comment
Что ж, я пытаюсь позволить дизайнеру выводить свои стили прямо в шаблон, без необходимости редактировать контроллеры и тому подобное.. Думаю, мне придется выбирать.. Спасибо за ваш ответ! - person Zar; 22.04.2012
comment
@KemalFadillah Я знаю, что это можно создать, но в smarty это еще не готово. И для меня умный код более читаем, чем php-код внутри html-кода (я очень ненавижу <php echo desired_html_code() ?>). - person uzsolt; 22.04.2012

Я использовал как smarty, так и codeigniter, и, по моему опыту, использование обоих излишество. Smarty просто испортит ваш код, и ИМХО его неудобно использовать. Воспринимайте представления codeigniter как эквивалент ваших умных шаблонов.

Если вас беспокоит минимизация, попробуйте использовать что-то вроде этого: Библиотека минимизации CSS

Надеюсь, это полезно.

person jco    schedule 21.04.2012
comment
Да, на самом деле мне нужны только условия для класса парсера CI, и это было бы идеально. Спасибо за ваш ответ! - person Zar; 22.04.2012