2010-09-07 2 views
0

Итак, у меня есть меню, в котором я хочу создать главное меню на основе уровня доступа к аутентифицированному пользователю. Нет проблем с созданием меню, однако я хочу автоматически создать сгенерированное меню в своем «заголовке». Так что в моем контроллере я называю «заголовок» вид, но я не хочу, чтобы передать эту динамическую часть заголовка, как это:Codeigniter Как динамически создавать меню

$data['menu'] = 'Some Generated HTML Menu'; 
$this->load->view('header',$data); 

Я предпочел бы это уже быть включены в мой файл заголовка, но Я не совсем уверен, как это сделать (кроме добавления объявления $ data из моего конструктора).

ответ

0

Я не знаю, поможет ли это вам, но именно так я сделал свою систему шаблонов в течение длительного времени, прежде чем перейти к более продвинутому методу.

Верхняя головка: Вид/вкл/top_head.php

<html> 
<head> 
<!-- all of your imports you want across all pages --> 

Bottom Глава: Вид/вкл/bottom_head.php

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

</head> 
<body> 
<div id="main_container"> 
    <div id="navigation"> 
     <?php 
       // DO YOUR NAVIGATION MAGIC HERE 
       if($is_logged_in) : 
        // BAM MAGIC DONE 
       else : 
        // No magic show here 
       endif; 
     ?> 
    </div> 

Footer: Вид/вкл/footer.php

Это где вы поставите в футере вещи и т.д ....

</div> 
</body> 

Сейчас мы находимся в точке что мы должны фактически заполнить контент в шаблоне

Страница индекса:/views/some_controller/index .php

<?php $this->load->view('inc/top_head.php'); ?> 

<?php $this->load->view('inc/bottom_head.php;) ?> 

<h1>Hello</h1> 
<p>Some filler content and stuff I guess would go here...Of course</p> 

<?php $this->load->view('inc/footer.php'); ?> 

Итак, у нас есть быстрая система шаблонов. Теперь, чтобы показать вам, что я сделал для контроллера

<?php 

class Some_Controller extends Controller { 
    public $page_data; 

    public function __construct() { 
     parent::__construct();  // Load parent constructor 

     // This is page data that we obviously don't want to keep retyping 
     $this->page_data = array(
      'is_logged_in' => FALSE, // Obviously do some test here 
      'page_title' => 'Some Title' 
     ); 
    } 

    public function index() { 
     $this->_load('some_controller/index'); 
    } 

    /** Should think of a better name but meh */ 
    private function _load($view) { 
     $this->load->view($view, $this->page_data); 
    } 
} 

Надеюсь, это помогло так или иначе. Имейте в виду, что это быстро написать. Если бы я действительно хотел, чтобы это входило в производство, я бы переместил функцию _load в родительский класс и расширил ее. Я также, вероятно, переместил бы переменную page_data вместе с ней.

0

Вы можете просто сделать $ data ['menu'] = многомерный массив (button_name, url). Затем в представлении вы передаете этот массив плагину, который генерирует html-меню на основе этого массива.

+0

или помощник, поскольку плагины устарели;) – AlienWebguy

Смежные вопросы