Страницы

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

среда, 6 марта 2019 г.

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

$this->load->view('header'); $this->load->view('workmenu'); $this->load->view('all_gk'); $this->load->view('footer');
Вот в этом коде мне не нравится что во всех контролерах мне надо вызывать загрузку хедера, меню, и футера, их можно как то вынести?


Ответ

Из-за отсутствия 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;
Пример был взят: Источник . Удачного кодинга...

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

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