Codeigniter Как динамически создавать меню - PullRequest
0 голосов
/ 08 сентября 2010

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

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

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

Ответы [ 2 ]

0 голосов
/ 08 сентября 2010

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

Top Head : views / inc / top_head.php

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

Нижняя головка : views / inc / 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>

Нижний колонтитул : views / inc / 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 голосов
/ 08 сентября 2010

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

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