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
Не пойму проблемы. У меня реализованно примерно так:
$data['header'] = «Это выводим в заголовке»;
$data['footer'] = «А это в подвале»;
$data['content'] = «Тут находится контент»;
$this -> load -> view('main', $data);
В main:
< ?php $this -> load -> view('_header');?>
…
< ?=$content;?>
…
< ?php $this -> load -> view('_menu');?>
…
< ?php $this -> load -> view('_footer');?>
$data['header'] = «Это выводим в заголовке»;
$data['footer'] = «А это в подвале»;
$data['content'] = «Тут находится контент»;
$this -> load -> view('main', $data);
В main:
< ?php $this -> load -> view('_header');?>
…
< ?=$content;?>
…
< ?php $this -> load -> view('_menu');?>
…
< ?php $this -> load -> view('_footer');?>
0
Спасибо.
0
Подобная структура подойдёт в том случае, если вы запросом получаете цельный контент.
А если контент страницы собирается, то уже ваш подход работать не будет.
А если контент страницы собирается, то уже ваш подход работать не будет.
0
Почему-же?
P.S.: хабр, как всегда, в своем репертуаре — дал рабочее решени, но минусуют =)
P.S.: хабр, как всегда, в своем репертуаре — дал рабочее решени, но минусуют =)
0
Ну возьмём простейшую структуру, новость + комменты.
При вашем подходе, вам придётся в контроллере генерить html для вывода комментов, а это не есть хорошо.
P.S. Минусование не практикую.
При вашем подходе, вам придётся в контроллере генерить html для вывода комментов, а это не есть хорошо.
P.S. Минусование не практикую.
0
Нет, не придется. Будет цикл, выводящий комментарии, в самом шаблоне (или в хелпере, который будет подключен к шаблону). Такой подход используется почти во всех шаблонизаторах.
По поводу минусов — это не к вам обращение было, мысли вслух.
По поводу минусов — это не к вам обращение было, мысли вслух.
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
Перебор. Во-первых, при такой сложности, можно использовать $this -> load -> vars. Во-вторых, загрузка дополнительных view в контроллере — плохой ход. Если понадобится менять шаблон — придется править контроллер. Лучше все эти вызовы вставить в основной шаблон.
P.S.: а еще лучше — расширить стандартный view.
P.S.: а еще лучше — расширить стандартный view.
0
Ой, вот только не надо про SMARTY:) Код на CI поганить Smarty нехорошо.
+2
У меня всякие хедеры/футеры/меню лежат в отдельной папке и на каждой странице view подключаются там же $this->load->view('design/header');
0
есть библиотека layout для этих целей… по аналогии с RoR
0
Sign up to leave a comment.
Представления и CodeIgniter