Страницы

Поиск по вопросам

воскресенье, 12 января 2020 г.

Вынести load в отдельный метод

#php #codeigniter


            $this->load->view('header');
            $this->load->view('workmenu');
            $this->load->view('all_gk');
            $this->load->view('footer');


Вот в этом коде мне не нравится что во всех контролерах мне надо вызывать загрузку
хедера, меню, и футера, их можно как то вынести?
    


Ответы

Ответ 1



Из-за отсутствия layout в Codeigniter, нужно прибегать к костылям. Вот решение данной проблемы: Создается библиотека application/libraries/my_layout.php class MY_Layout extends CI_Controller { // пути к файлам вида public $header = 'header'; public $footer = 'footer'; // метод получает на вход два параметра: название вида и данные для него public function content($views = '', $data = '') { // загружаем header if ($this->header) { $this->load->view($this->header, $data); } // загружаем основной контент, который может иметь больше одного вида if (is_array($views)) { foreach ($views as $view) { $this->load->view($view, $data); } } else { $this->load->view($views, $data); } // загружаем footer if ($this->footer) { $this->load->view($this->footer); } } } В используемом контроллере достаточно подключить нашу библиотеку и обратиться к нужному виду через $this->my_layout->content('user/test', $data); class User extends CI_Controller { public function __construct() { parent::__construct(); $this->load->library('MY_Layout'); } public function test() { $data['title'] = 'dynamic_string'; $this->my_layout->content('user/test', $data); } } Вы так-же можете передавать несколько видов одновременно: $data['title'] = 'dynamic_string'; $views = array( 'menu' => 'menu', 'content' => 'user/test' ); $this->my_layout->content($views, $data); И в завершении, вы можете отключать часть вашего layout'a или использовать вместо него другой вид. $this->my_layout->header = 'user/custom_user_header'; // or turn off header $this->my_layout->header = FALSE; Пример был взят: Источник . Удачного кодинга...

Комментариев нет:

Отправить комментарий