Как эффективно обрабатывать шаблон меню в Codeigniter?
Я ищу лучший способ обработки моего шаблона. Прямо сейчас мой шаблон выглядит примерно так:
View/template.php
$this->load->view('includes/menu', $menu);
$this->load->view('includes/content', $main_content);
Меню в моем шаблоне использует несколько переменных из базы данных.
Мой контроллер выглядит примерно так:
function show_pageA() {
/* */
/* */
/* */
/* */
/* */
/* 10 lines menu related codes here */
/* mainly to get variables from databas */
/* */
/* */
/* */
/* */
$data['menu'] = array of variables pulled from previous line
$data['main_content'] = 'pageA';
$this->load->view('template',$data);
}
function show_pageB() {
/* */
/* */
/* */
/* */
/* */
/* 10 lines menu related codes here */
/* mainly to get variables from databas */
/* */
/* */
/* */
/* */
$data['menu'] = array of variables pulled from previous line
$data['main_content'] = 'pageB';
$this->load->view('template',$data);
}
Как вы можете видеть, каждая функция страницы содержит 10 строк кода, связанного с меню, и это кажется мне излишним.
Может ли кто-нибудь предложить мне лучший способ сделать это во время практики MVC?
Спасибо,
2 answers
Есть 2 разные вещи, которые я бы сделал, чтобы исправить эту ситуацию.
-
Я бы завернул эти 10 строк кода в модель , потому что, как вы сказали, она взаимодействует с базой данных. Возможно, создайте
Menu_model
с функциейget()
, которая возвращает массив элементов, которые вам нужно загрузить в ваши представления. Тогда вызов его в каждом контроллере будет таким же простым, как$data['menu'] = $this->menu_model->get(); //assuming you autoload this model
Но давайте не будем останавливать их, так как это все еще повторяющаяся строка кода в КАЖДЫЙ функция контроллера. Давайте сделаем это в конструкторе контроллера, чтобы эти параметры загружались глобально во всех создаваемых нами представлениях.
предполагая, что вы php5'd
function __construct() {
parent::__construct();
//get menu data
$global_data['menu'] = $this->menu_model->get();
//load into all views loaded by this controller
$this->load->vars($global_data);
}
Тогда ваши функции контроллера будут выглядеть так.
function show_pageA() {
$data['main_content'] = 'pageA';
$this->load->view('template',$data);
}
( Кроме того, если эта логика "меню" охватывает несколько контроллеров, я бы рекомендовал запустить пользовательский MY_Controller.php
, который включает эту логику, чтобы вы снова не повторялись в каждом конструктор контроллера)
Вместо того, чтобы использовать представления Codeigniter, когда дело доходит до шаблонов и частичных элементов, вам следует изучить возможность использования библиотеки шаблонов. Есть немало таких, которые могут вам пригодиться, и все они в основном управляют навигацией по хлебным крошкам, просмотром частичных изображений и другими удивительными вещами, которые вы хотите сделать.
Я использую библиотеку шаблонов Фила Стерджена в своих проектах Codeigniter, потому что она легкая и просто работает: http://philsturgeon.co.uk/code/codeigniter-template
Колин Библиотека шаблонов Уильямса - еще одна популярная библиотека шаблонов: http://williamsconcepts.com/ci/codeigniter/библиотеки/шаблон/
И некоторым людям, похоже, нравится использовать библиотеку шаблонов для глаз: https://github.com/lonnieezell/Ocular-Template-Library