Знакомство с CodeIgniter - шаблоны / загрузка представлений - PullRequest
1 голос
/ 10 ноября 2010

Попытка выучить КИ и просмотреть документы, чтобы лучше понять. Не имея отдельной библиотеки, я мог бы создать шаблон, включив в него список представлений, например, так:

$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');

Это имеет смысл, но будет ли это на каждом из моих контроллеров (страниц)? Не уверен, есть ли способ включить это в первоначальный контроллер (добро пожаловать), а затем в других как-то ссылаться на это? Или, может быть, я что-то упускаю полностью

Ответы [ 2 ]

9 голосов
/ 10 ноября 2010

Вы можете загрузить представления из файла представления.например, рассмотрим шаблон страницы общего назначения с именем 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>

Загрузите более динамические области, используя функцию codeigniter для возврата представления в качестве переменной в вашем контроллере:

$template['content'] = $this->load->view('content',$data,TRUE);
$this->load->view('page_template',$template);

Передав TRUE в функцию загрузки, CI будет возвращать данные из представления, а не выводить их на экран.

Ваш раздел sidenav может быть собственным файлом представления, sidenav.php, где у вас есть ваш'блоки' жестко запрограммированы или загружены аналогично приведенному выше примеру.

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

1 голос
/ 12 ноября 2010

Загрузка представлений изнутри представлений может привести к путанице.

Расширение класса Controller скрывает большую часть сложности этого подхода, но все еще использует идею генерации общих представлений (нижний колонтитул, верхний колонтитул, панели навигации и т. Д.) Путем их рендеринга один раз при каждой загрузке страницы.

В частности, обратитесь к Руководству пользователя CI и вики для ссылок на MY_Controller - вы расширяете это, создавая файл MY_Controller.php в каталоге ./libraries.

Здесь вы можете вызвать фрагменты представления, также используя третий параметр = true функция вызова load->view(). Вы загружаете их в $this->data - например, загружаете нижний колонтитул в $this->data['footer']. В ваших различных контроллерах продолжайте добавлять данные вида в $this->data. В ваших представлениях - я обычно использую шаблон, который мало чем отличается от скелетного HTML и некоторого базового CSS, а затем выводит все комки верхнего колонтитула, нижнего колонтитула, nav и основного контента как переменные, взятые из $this->data

Дополнительный бонус - если вы новичок в CI, скорее всего, вы скоро будете искать, как делать другие вещи, которые MY_Controller облегчит вам:)

У меня есть вики-страница по упрощению генерации и отображения частичных представлений, как вы пытаетесь сделать здесь, используя MY_Controller по адресу:

https://github.com/EllisLab/CodeIgniter/wiki/Header-and-Footer-and-Menu-on-every-page---jedd

...