Попытка изучить CI и пройти через документы, чтобы лучше понять. Не получив отдельную библиотеку, я мог бы создать шаблон, включив в него список видов:
$this->load->view('header'); $this->load->view('navigation'); $this->load->view('sidenav_open'); $this->load->view('blocks/userinfo'); $this->load->view('blocks/stats'); $this->load->view('sidenav_close'); $this->load->view('content',$data); $this->load->view('footer');
Это имеет смысл, но на самом ли деле у меня есть это на каждом из моих контроллеров (страниц)? Не уверен, есть ли способ включить это в начальный контроллер (приветствуется), а затем в других как-то ссылаться на него? Или, может быть, я чего-то не хватает
Вы можете загружать представления из файла вида. например, рассмотрим шаблон общей страницы, называемый page_template.php
:
<html> <body> <div id = "header"> <?php $this->load->view('header');?> <?php $this->load->veiw('navigation');?> </div> <div id = "sidenav"> <?php $this->load->view('sidenav');?> </div> <div id = "content"> <?php echo $content;?> </div> <div id = "footer"> <?php $this->load->view('footer');?> </body> </html>
Загрузите более динамические области, используя abiltiy для codeigniter, чтобы вернуть представление в качестве переменной в вашем контроллере:
$template['content'] = $this->load->view('content',$data,TRUE); $this->load->view('page_template',$template);
Передавая TRUE функции нагрузки, CI вернет данные из представления, а не выводит на экран.
Ваш раздел sidenav может быть его собственным файлом просмотра, sidenav.php, где у вас есть ваши «блоки» жестко закодированные или загруженные, похожие на приведенный выше пример.
Я сделал это в обоих направлениях, в том числе каждый вонючий бит представлений в каждом методе контроллера, и используя шаблон страницы, который загружает под-представления и динамические области, и, безусловно, второй метод делает меня счастливее.
Загрузка просмотров изнутри может привести к путанице.
Расширение класса Controller скрывает большую часть сложности, исходящей от этого подхода, но все же использует идею генерации общих представлений (нижний колонтитул, заголовок, навигационные панели и т. Д.) Путем рендеринга их один раз при каждой загрузке страницы.
В частности, обратитесь к руководству пользователя CI и вики для ссылок на MY_Controller – вы расширяете это, создавая файл MY_Controller.php в каталоге ./libraries.
Там вы можете вызывать фрагменты вида, также используя функцию third-parameter = true вызова load->view()
. Вы загружаете их в $this->data
– например, загружая нижний колонтитул в $this->data['footer']
. В ваших различных контроллерах продолжайте добавлять данные представления к данным $this->data
. В ваших представлениях я обычно использую шаблон, который делает немного иначе, чем скелет HTML и некоторый базовый CSS, а затем выделяет все заголовки заголовка, нижнего колонтитула, навигация и основной контент как переменные, взятые из $this->data
Добавленный бонус – если вы новичок в CI, вы, скорее всего, скоро будете искать, как делать другие вещи, которые MY_Controller сделает легко для вас 🙂
У меня есть страница wiki для упрощения генерации и отображения частичных представлений, как вы пытаетесь сделать здесь, используя MY_Controller по адресу:
https://github.com/EllisLab/CodeIgniter/wiki/Header-and-Footer-and-Menu-on-every-page—jedd