Загрузите верхний и нижний колонтитулы в CI - PullRequest
2 голосов
/ 22 декабря 2011

Есть ли способ загрузить представление 'header' / 'footer' без вызова $this->load->view('header') или $this->load->view('footer') в каждом контроллере? Может быть шаблон, который можно использовать в каждом представлении?

Ответы [ 4 ]

8 голосов
/ 22 декабря 2011

Вот пара простых подходов, с которых можно начать:

Создание шаблона класса:

class Template {

    function load($view)
    {
        $CI = &get_instance();
        $CI->load->view('header');
        $CI->load->view($view);
        $CI->load->view('footer');
    }

}

Использование в контроллере:

$this->template->load('my_view');

Использовать файл основного вида:

<!-- views/master.php -->
<html>
  <header>Your header</header>
  <?php $this->load->view($view, $data); ?>
  <footer>Your footer</footer>
</html>

В контроллере:

$this->load->view('master', array(
    'view' => 'my-view-file',
    'data' => $some_data
));

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

if ( ! isset($view_file)) {
    $view_file = $CI->router->fetch_class().'/'.$CI->router->fetch_method();
}

Это приведет к загрузке views/users/index.php, если контроллер Users и метод index.

0 голосов
/ 23 декабря 2011

Я обычно расширяю класс Loader CI для достижения этой цели ...

<?php
class MY_Loader extends CI_Loader {

    public function view($view, $vars = array(), $return = FALSE, $include_header = TRUE, $include_footer = TRUE)
    {
        $content = '';

        if ($include_header)
        {
            $content .= parent::view('header', $vars, $return);
        }

        $content .= parent::view($view, $vars, $return);

        if ($include_footer)
        {
            $content .= parent::view('footer', $vars, $return);
        }

        return $content;
    }
}
0 голосов
/ 22 декабря 2011

Создайте функцию, которая загружает верхний и нижний колонтитулы и помещает данные между ними.

В любом случае модель, на которой построен CI, требует явной загрузки представлений (afaik).

0 голосов
/ 22 декабря 2011

Вам нужно каким-то образом загрузить файлы просмотра, таким образом CI использует их для включения файлов.

Придерживайтесь стандарта, я думаю, что это лучшая практика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...