CodeIgniter или PHP-эквивалент Rails Partials и шаблонов - PullRequest
6 голосов
/ 19 апреля 2009

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

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

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

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

Ответы [ 11 ]

13 голосов
/ 20 апреля 2009

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

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

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

5 голосов
/ 20 апреля 2009

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

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

3 голосов
/ 20 апреля 2009

В PHP вы бы использовали include

2 голосов
/ 31 декабря 2009

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

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

2 голосов
/ 29 апреля 2009

Я обнаружил, что тоже перехожу с 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, но это я =) PS: при загрузке представлений первый аргумент - это имя представления, второй - параметры, передаваемые представлению, а третий - флаг «ECHO», который в основном говорит CI, отображать ли его напрямую или возвращать значение вместо этого рассмотрим, что я и сделал в примере.

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

0 голосов
/ 02 февраля 2014

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

    http://code.google.com/p/ocular/wiki/Introduction
0 голосов
/ 10 февраля 2010

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

0 голосов
/ 29 апреля 2009

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

0 голосов
/ 20 апреля 2009

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

0 голосов
/ 19 апреля 2009

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

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

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

...