2014-01-18 1 views
2

Я новичок в фреймворках PHP и yii, и я стараюсь понять, как работают представления/макеты. Это, как я в настоящее время понять, как макет шаблона страницы:Где/Как включить панель навигации в виде yii

<!DOCTYPE html> 
<html> 
<head> 

</head> 
<body> 

    <div id="page_wrp"> 

     <?php include 'includes/top_right_nav.php' ?> 

     <div id="content_wrp"> 

      <div id="content"> 

      </div> 

     </div><!--#content_wrp--> 

     <?php include 'includes/main_nav.php' ?> 

    </div><!--#page_wrp--> 

</body> 

Я понимаю, что основной юй способ больше похож на это:

<?php /* @var $this Controller */ ?> 
<!DOCTYPE> 
<html> 
<head> 
    <title><?php echo CHtml::encode($this->pageTitle); ?></title> 
</head> 

<body> 

<div class="container" id="page"> 

<div id="header"> 
    <div id="logo"><?php echo CHtml::encode(Yii::app()->name); ?></div> 
</div><!-- header --> 

<div id="mainmenu"> 
      <!-- 
       DON'T WANT TO USE ZII.WIDGETS FOR MENU 
       WANT TO KNOW BEST WAY TO INCLUDE MY ONW NAVIAGTION MENU- 
      -> 
    <?php $this->widget('zii.widgets.CMenu',array('...')); ?> 
</div><!-- mainmenu --> 

<?php echo $content; ?> 

<div id="footer"></div><!-- footer --> 

То, что я не понимаю, - это лучшая практика/аналогичный способ включить мою собственную панель навигации в контексте yii/MVC. Могу ли я использовать все как указано выше или мне нужно использовать zii.widgets? Если это нормально использовать, где я могу поместить файлы?

Любая помощь будет высоко оценена.

ответ

2

Вам не нужно использовать виджеты Yii, однако рекомендуется использовать их, они достаточно гибкие.

Создайте файл для просмотра разметки меню в папке макетов, что-то вроде _myMenu.php

_menu.php

<ul>  
    <li>menu item 1</li> 
    <li>menu item 2</li> 
</ul> 

затем в вашем использовании макета renderPartial() для рендеринга _menu.php частичного вида внутри вашего макета.

main.php

<div id="mainmenu"> 
    <?php $this->renderPartial("//layouts/_menu"); ?> 
</div> 

Это очень простое решение, если вы хотите сделать меню более динамичны вы можете добавить метод к контроллеру, чтобы справиться с этим.

+0

Спасибо, кажется, работает нормально. Мне просто нужно выяснить, как и почему. У меня есть чему поучиться! Еще раз спасибо. –

+1

на ваш взгляд '$ this' всегда ссылается на ваш класс контроллера, поэтому $ this-> renderPartial() - это метод CController - когда ему передается« // layouts/_menu », контроллер идет и ищет _menu.php в затем вставьте его в представление. Вы также можете передавать данные своим частичным представлениям - эта статья может помочь устранить ситуацию http://www.yiiframework.com/wiki/249/understanding-the-view-rendering-flow/ – adamS

+0

Теперь используйте ' render ('_меню'); ?> ' –

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