Меню "на Вынос"

всем привет

нужно создать меню в виде отдельного структурного элемента так сказать…

чтобы пункты меню находились в отдельном файле

есть два варианта: используя CMenu или CPortlet

вопрос: как лучше?

сейчас это выглядит так в лайауте =


<?php $this->widget('zii.widgets.CMenu',array(

    'items'=>require(dirname(Yii::app()->request->scriptFile).'/protected/__include/menu.php'),

)); ?> 




//layout

<?php 

$items=Menu::getItems();

$this->widget('zii.widgets.CMenu',array(

    'items'=>$items,

)); ?>

//файл 

class Menu 

{

    public static function getItems()

    {

       ......

       return $items;

    }

}



Я бы делал так.

почему? есть какое-то особое обоснование? за и против так сказать

и вообще - портлет как функционал он зачем?

Так красиво, удобно да и думаю правильно. Закинули класс в компоненты да и все.

Например также я работаю с константами, есть класс Globals, и в нем константы для приложения.




require($_SERVER['DOCUMENT_ROOT'].'/protected/__include/menu.php') // не совсем красиво

require(Yii::app()->basePath.DIRECTORY_SEPARATOR.'__include'.DIRECTORY_SEPARATOR.'menu.php')//превращается в такое если написать правильно, и это еще некрасивее



Ну и я бы так не писал :rolleyes:

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

Если честно никогда не пользовался им, обычно делаю свои виджеты.

Меню пользуюсь уже много раз перепиленным http://www.yiiframework.com/extension/cssmenu/

вобщем решил использовать портлет: его проще вставлять куда нужно, а пункты меню мне удобнее формировать в zii.widgets.CMenu

саммари такой =

  1. создал класс и чутка прооверрайдил =

Yii::import('zii.widgets.CPortlet');

 

class DepatmentMenu extends CPortlet

{

    public function init()

    {

        parent::init();

    }   

    

    public $decorationCssClass = false;

    public $contentCssClass = false;

    public $titleCssClass = false;

    public $htmlOptions = false;

    

    public function run()

    {

        $this->renderContent();

        $content=ob_get_clean();

        if($this->hideOnEmpty && trim($content)==='')

                return;

        echo "\n".$content;

    }    

 

    protected function renderContent()

    {

        $this->render('depatmentMenu');

    }

}

  1. создал пункты меню в представлении depatmentMenu =

$this->widget('zii.widgets.CMenu',array(

    'items'=>array(...),

)); 

  1. вызвал где надо =

<div id="mainmenu"><?php $this->widget('DepatmentMenu'); ?>           

</div>

класс портлета отсюда