ZEND 2 框架如何异步导航菜单



我想优化页面加载以通过Ajax异步加载导航菜单。

现在它在layout.phtml中使用以下方法以标准方式工作:

echo $this->navigation('CatalogNavigation')->menu()->setPartial('catalog_menu');

该行在控制器中不起作用:

$view = $this->navigation('CatalogNavigation')->menu()->setPartial('catalog_menu'); //this line is not working 
return new JsonModel(array('view' => $view()));

以下是有效的方法,附加->get('navigation')

$navigation = $this->getServiceLocator()->get('viewHelperManager')->get('navigation');
$catalog_navigation = $navigation('CatalogNavigation');
$view = $catalog_navigation->menu()->setPartial('catalog_menu');
return new JsonModel(array( 'view' => (string)$view ));

尝试以下代码:

//factory
class NavigationFactory extends DefaultNavigationFactory
{
protected function getName()
{
return 'navigation-example';
}
}
//module.config.php
'service_manager' => array(
'abstract_factories' => array(
'ZendCacheServiceStorageCacheAbstractServiceFactory',
'ZendLogLoggerAbstractServiceFactory',
),
'factories' => array(
'translator' => 'ZendMvcServiceTranslatorServiceFactory',
'navigation-example' => 'ApplicationFactoryNavigationFactory'
),
),
// global.php:
return array(
'navigation' => [
'navigation-example' => [
[
'label' => 'Google',
'uri' => 'https://www.google.com',
'target' => '_blank'
],
[
'label' => 'Home',
'route' => 'home'
]
]
]
);
// in controller
$viewHelperManager = $this->getServiceLocator()->get('viewHelperManager');
$navigation = $viewHelperManager->get('navigation');
$catalog_navigation = $navigation('navigation-example');
$menu = (string) $catalog_navigation->menu();
return new JsonModel(compact('menu'));

最新更新