CodeIgniter или эквивалент PHP Rails Partials and Templates

В CodeIgniter или ядре PHP; есть ли эквивалент партитур Rails и шаблонов?

Частичное позволило бы мне сделать еще один фрагмент представления внутри моего представления. Я мог бы иметь общее представление navbar.php которое я мог бы указать на внутреннее представление моей homepage.php . Шаблоны определяли бы общую оболочку HTML-страницы в одном месте и позволяли каждому виду просто заполнять тело.

Самое близкое, что я мог найти в документации CodeIgniter, – это загрузка нескольких представлений , где последовательно отображаются несколько представлений в контроллере. Кажется странным диктовать визуальный внешний вид моей страницы внутри контроллера. (т. е. для перемещения навигатора мой дизайнер должен будет отредактировать контроллер).

Я искал переполнение стека для PHP-способа для достижения этого. Я нашел эту страницу , в которой говорится об имитации частичных данных с помощью ob_start . Это рекомендуемый подход внутри CodeIgniter?

Я могу нарушить правило MVC, но я всегда просто размещал свои «фрагменты» в отдельных представлениях и загружал их, стиль CodeIgniter, из других видов, которые в них нуждаются. Практически все мои взгляды загружают верхний и нижний верхний и нижний нижние колонтитулы соответственно:

 <? $this->load->view( "header" ); ?> //Page content... <? $this->load->view( "footer" ); ?> 

Заголовок может затем включать NavBar таким же образом и т. Д.

это по существу то, что я использую:

 function render_partial($file, $data = false, $locals = array()) { $contents = ''; foreach($locals AS $key => $value) { ${$key} = $value; } ${$name . '_counter'} = 0; foreach($data AS $object) { ${$name} = $object; ob_start(); include $file; $contents .= ob_get_contents(); ob_end_clean(); ${$name . '_counter'}++; } return $contents; } 

это позволяет вам называть что-то вроде:

 render_partial('/path/to/person.phtml', array('dennis', 'dee', 'mac', 'charlie'), array('say_hello' => true)); 

и в /path/to/person.phtml:

 <?= if($say_hello) { "Hello, " } ?><?= $person ?> (<?= $person_counter ?>) 

это какая-то магия, хотя это может помочь вам лучше понять, что происходит. полный файл: view.class.php

В PHP вы будете использовать include

Я также обнаружил, что перехожу из Rails в CI, и то, что я делал с частичными, в основном делает частичные представления в виде переменной и устанавливает ее из контроллера.

Таким образом, в представлении у вас будет что-то вроде (_partial.php):

 <h2>Here Comes The Partials</h2> <?= $some_partials ?> 

И вы можете установить его с контроллера, как:

 $this->load->view('the_view', array('some_partials', $this->load->view('_partial', array(), TRUE) ) ); 

Лично я предпочитаю использовать представление CI вместо ob_start, но это me =) PS: при загрузке представлений первый аргумент – это имя представления, второй – параметры, которые нужно передать в представление, а третий – «ECHO», флаг, который в основном сообщает CI, следует ли его напрямую отображать или возвращать значение представления, что в основном является тем, что я сделал в примере.

Я не думаю, что это хорошее решение, но оно работает для меня. У кого-то есть лучшие решения?

Моя недавно выпущенная библиотека шаблонов работает таким образом.

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

Это, к сожалению, совсем не CodeIgniter, но я предлагаю вам взглянуть на систему шаблонов Savant3 . Он позволяет отображать шаблон в строке. Тогда вы можете просто прикрепить его туда, где хотите.

Может быть, в CodeIgniter есть что-то подобное?

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

CodeIgniter и Smarty прекрасно играют вместе.

Вот сообщение в блоге, в котором описывается, как использовать smarty с codeigniter . Также реализована asp.net как masterpage.

Попробуйте Ocular – http://codeigniter.com/wiki/Ocular_Layout_Library/ – его рельсы, вдохновленные библиотекой шаблонов.

Вы можете проверить это, для частичных и шаблонов

  http://code.google.com/p/ocular/wiki/Introduction 

Symfony делает это с помощью частичной / компонентной настройки.