Comments 30
UFO just landed and posted this here
Некоторое время назад решил потихоньку переходить на какой-нибудь framework. Сначала взгляд мой пал на simfony, но потом переключился на CodeIgniter.Аналогичная история :)
0
Извините, но так и не понял, что мешает использовать один шаблон, внутри которого делать include шапки и футера?
0
Иногда возникает необходимость передать какие-то данные в ту же шапку или футер. Если инклюдить, тогда вся прелесть MVC начинает куда-то исчезать.
Автору:
Кстати, можно по методу Александра Макарова загружать многие данные в кострукторе контроллера, дабы не повторяться. При желании в методах можно переписать используемые шаблоны и/или данные.
А для конкретно каждого проекта можно создать и вовсе свой View унаследованный от данного, только изменив, к примеру, конструктор класса.
Автору:
Кстати, можно по методу Александра Макарова загружать многие данные в кострукторе контроллера, дабы не повторяться. При желании в методах можно переписать используемые шаблоны и/или данные.
А для конкретно каждого проекта можно создать и вовсе свой View унаследованный от данного, только изменив, к примеру, конструктор класса.
0
UFO just landed and posted this here
UFO just landed and posted this here
Спасибо.
0
Подобная структура подойдёт в том случае, если вы запросом получаете цельный контент.
А если контент страницы собирается, то уже ваш подход работать не будет.
А если контент страницы собирается, то уже ваш подход работать не будет.
0
UFO just landed and posted this here
Ну возьмём простейшую структуру, новость + комменты.
При вашем подходе, вам придётся в контроллере генерить html для вывода комментов, а это не есть хорошо.
P.S. Минусование не практикую.
При вашем подходе, вам придётся в контроллере генерить html для вывода комментов, а это не есть хорошо.
P.S. Минусование не практикую.
0
Читаю книгу «Professional CodeIgniter», там приведен пример:
< ?php $this -> load -> view('_header');?>
…
< ?php $this -> load -> view($main);?>
…
< ?php $this -> load -> view('_menu');?>
…
< ?php $this -> load -> view('_footer');?>
, где $main название view которое, задается в контроллере и подгружается динамически.
< ?php $this -> load -> view('_header');?>
…
< ?php $this -> load -> view($main);?>
…
< ?php $this -> load -> view('_menu');?>
…
< ?php $this -> load -> view('_footer');?>
, где $main название view которое, задается в контроллере и подгружается динамически.
0
Что-то топик минусуют. Видимо задал дилетантский вопрос…
Спасибо всем кто откликнулся.
Спасибо всем кто откликнулся.
0
Довольно тепичная ситуация когда для всего сайта используется один шаблон и меняются только данные которые передаются в центральную часть.
Такую проблему я реализовал следующим образом.
1) Подключаем библиотеку для работы с шаблонами Smarty (мне почему то больше нравится)
2) Перегружаем стандартный класс контролера собственным (class MY_Controller extends Controller)
3) В собственном контроллере создаем метод render — что то наподобие
4) Теперь все пользовательские контроллеры наследуем от MY_Controller
5) Для вывода текущих данных используем такую вещь
Если нет необходимости загрузки дополнительной информации можно просто использовать
parent::render($body_data);
Тогда данные из view будут загружены в центральную часть шаблона, а остальные данные останутся пустыми.
Сам шаблон выглядит следующим образом
Такую проблему я реализовал следующим образом.
1) Подключаем библиотеку для работы с шаблонами Smarty (мне почему то больше нравится)
2) Перегружаем стандартный класс контролера собственным (class MY_Controller extends Controller)
3) В собственном контроллере создаем метод render — что то наподобие
function render($body_data='') {
if (is_array($body_data)){
foreach ($body_data as $key => $item){
$this->s->assign($key, $item);
}
} else {
$this->s->assign('body',$body_data);
}
$this->s->assign('css_tag', link_tag('css/templates.css'));
$this->s->render('site');
}
4) Теперь все пользовательские контроллеры наследуем от MY_Controller
5) Для вывода текущих данных используем такую вещь
$body_data = $this->load->view('/default/site/article/editor',$params,TRUE);
$jsinclude_data = $this->load->view('/default/site/article/jsi_editor',array(),TRUE);
$jspinclude_data = $this->load->view('/default/site/article/jsp_editor',array(),TRUE);
$template_param = array(
'body' => $body_data,
'js_include' => $jsinclude_data,
'js_page_function' => $jspinclude_data,
'css_add_tag' => '/>'
);
parent::render($template_param);
Если нет необходимости загрузки дополнительной информации можно просто использовать
parent::render($body_data);
Тогда данные из view будут загружены в центральную часть шаблона, а остальные данные останутся пустыми.
Сам шаблон выглядит следующим образом
{$title}
{$meta_tag}
{$css_tag}
{$css_add_tag}
{$js_include}
{$js_page_function}
{$menu}
{$body_data}
{$menu }
{$footer}
-1
HTML таги в шаблоне порезало — но они там будут. Так же в 'css_add_tag' => 'загрузка отображения с дополнительными css файлами'
0
UFO just landed and posted this here
Ой, вот только не надо про SMARTY:) Код на CI поганить Smarty нехорошо.
+2
У меня всякие хедеры/футеры/меню лежат в отдельной папке и на каждой странице view подключаются там же $this->load->view('design/header');
0
есть библиотека layout для этих целей… по аналогии с RoR
0
Sign up to leave a comment.
Представления и CodeIgniter