Я немного сбит с толку, прочитав все посты и учебные пособия о начале работы с Zend, потому что есть так много разных способов решения проблемы.
Мне просто нужно немного отзывов о моем коде, чтобы узнать, еслиЯ на правильном пути.
Чтобы просто получить (жестко запрограммированную) навигацию для своего сайта (в зависимости от того, кто вошел в систему), я создаю плагин контроллера с методом postDispatch
:
public function postDispatch(Zend_Controller_Request_Abstract $request)
{
$menu = new Menu();
//Render menu in menu.phtml
$view = new Zend_View();
//NEW view -> add View Helper
$prefix = 'My_View_Helper';
$dir = dirname(__FILE__).'/../../View/Helper/';
$view->addHelperPath($dir,$prefix);
$view->setScriptPath('../application/default/views/scripts/menu');
$view->menu = $menu->getMenu();
$this->getResponse()->insert('menu', $view->render('menu.phtml'));
}
Это правильно, что мне нужно снова установить путь помощника?Я сделал это в контроллере плагинов с именем ViewSetup
.Там я делаю некоторые настройки для представления, такие как doctype, headlinks и helper paths (этот шаг из книги: Zend Framework в действии).
Класс Menu
, который инициируется, выглядит следующим образом:
class Menu
{
protected $_menu = array();
/**
* Menu for notloggedin and logged in
*/
public function getMenu()
{
$auth = Zend_Auth::getInstance();
$view = new Zend_View();
//check if user is logged in
if(!$auth->hasIdentity()) {
$this->_menu = array(
'page1' => array(
'label' => 'page1',
'title' => 'page1',
'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page1'))
),
'page2' => array(
'label' => 'page2',
'title' => 'page2',
'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page2'))
),
'page3' => array(
'label' => 'page3',
'title' => 'page3',
'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page3'))
),
'page4' => array(
'label' => 'page4',
'title' => 'page4',
'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page4'))
),
'page5' => array(
'label' => 'page5',
'title' => 'page5',
'url' => $view->url(array('module' => 'pages','controller' => 'my', 'action' => 'page5'))
)
);
} else {
//user is vom type 'client'
//..
}
return $this->_menu;
}
}
Вот мой сценарий просмотра:
<ul id="mainmenu">
<?php echo $this->partialLoop('menuItem.phtml',$this->menu) ?>
</ul>
Пока это работает.У меня вопрос: это обычно так?есть что улучшить?Я новичок в Zend, и я видел устаревшие учебники в Интернете, которые часто не очевидны.Даже книга уже устарела, где упоминается автозагрузчик.