Как эффективно обрабатывать шаблон меню в Codeigniter? - PullRequest
4 голосов
/ 06 февраля 2011

Я ищу лучший способ обработки моего шаблона. Прямо сейчас мой шаблон выглядит примерно так:

вид / 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 ]

4 голосов
/ 06 февраля 2011

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

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

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

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

1 голос
/ 06 февраля 2011

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

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

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

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

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