Как эффективно обрабатывать шаблон меню в 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?

Спасибо,

Author: tereško, 2011-02-06

2 answers

Есть 2 разные вещи, которые я бы сделал, чтобы исправить эту ситуацию.

  1. Я бы завернул эти 10 строк кода в модель , потому что, как вы сказали, она взаимодействует с базой данных. Возможно, создайте Menu_model с функцией get(), которая возвращает массив элементов, которые вам нужно загрузить в ваши представления. Тогда вызов его в каждом контроллере будет таким же простым, как

    $data['menu'] = $this->menu_model->get();  //assuming you autoload this model
    
  2. Но давайте не будем останавливать их, так как это все еще повторяющаяся строка кода в КАЖДЫЙ функция контроллера. Давайте сделаем это в конструкторе контроллера, чтобы эти параметры загружались глобально во всех создаваемых нами представлениях.

предполагая, что вы 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, который включает эту логику, чтобы вы снова не повторялись в каждом конструктор контроллера)

 4
Author: jondavidjohn, 2011-02-06 04:51:54

Вместо того, чтобы использовать представления Codeigniter, когда дело доходит до шаблонов и частичных элементов, вам следует изучить возможность использования библиотеки шаблонов. Есть немало таких, которые могут вам пригодиться, и все они в основном управляют навигацией по хлебным крошкам, просмотром частичных изображений и другими удивительными вещами, которые вы хотите сделать.

Я использую библиотеку шаблонов Фила Стерджена в своих проектах Codeigniter, потому что она легкая и просто работает: http://philsturgeon.co.uk/code/codeigniter-template

Колин Библиотека шаблонов Уильямса - еще одна популярная библиотека шаблонов: http://williamsconcepts.com/ci/codeigniter/библиотеки/шаблон/

И некоторым людям, похоже, нравится использовать библиотеку шаблонов для глаз: https://github.com/lonnieezell/Ocular-Template-Library

 1
Author: Dwayne Charrington, 2011-02-06 11:55:58