【问题标题】:zf2 navigation inject page from controller来自控制器的 zf2 导航注入页面
【发布时间】:2015-11-07 10:15:13
【问题描述】:

在 ZF2 中是否可以使用数组和数据库来组合(扩展)导航项?

我有根导航(深度级别 1 和 2),其配置为 php 文件 navigation.config.php。现在有一个基于产品类别的页面,该页面将为每个类别创建一个带有子页面的导航。

module
\-submodule
   \-category 1
     \-add
     \-edit
     \-form
     \-list
   \- ...
   \-category n

每次添加类别时将所有内容都写为数组很烦人。相反,如果我通过从 db 中读取类别来使用代码加载它,而不是创建一个用于导航的递归 mvc 页面,那将会很好。

所有类别实际上都调用同一个控制器,但为了 UI,我必须像上面那样。

我通过使用控制器创建页面进行测试

public function listAction() {
    $this->addPages(
            array(
                array(
                    'label' => 'R12313',
                    'route' => 'home',
                    'pages' => array(
                        array(
                            'label' => 'R12313cccc',
                            'route' => 'home',
                        )
                    )
                ),
                array(
                    'label' => 'R123132',
                    'route' => 'home',
                )
            )
    );
}

public function addPages($pages = array(), $min = 1, $max = 2) {
    $navigation = $this->services->get('viewhelpermanager')->get('navigation');
    $navigation = $navigation('navigation');

    $active = $navigation->findActive($navigation->getContainer(), $min, $max);
    if (isset($active['page'])) {
        $active = $active['page'];

        $pages = array('route' => 'home', 'pages' => $pages);

        $newpage = \Zend\Navigation\Page\AbstractPage::factory($pages);
        $newpage->setDefaultRouter($this->services->get('router'));
        $active->addPages($newpage);
    }
}

效果很好,但是我无法将菜单设置为在点击时激活它自己和父级。 也许在 Module bootstrap 中这样做会更好。

那么你知道怎么做吗?

【问题讨论】:

    标签: php zend-framework2


    【解决方案1】:

    好的,这是我从控制器添加页面的解决方法。也许有更好的方法

    public function addPages($id, $pages = array()) {
        $services = $this->getServiceLocator();
    
        $navigation = $services->get('viewhelpermanager')->get('navigation');
        $navigation = $navigation('navigation');
    
        $active = $navigation->findById($id);
    
        if ($active instanceof \Zend\Navigation\Page\AbstractPage) {
            $navigationFactory = new \Zend\Navigation\Service\ConstructedNavigationFactory($pages);
            $pages = $navigationFactory->getPages($services);
    
            $active->addPages($pages);
        }
    }
    

    如果你想以这种方式添加,你必须在 navigation.config.php 中指定页面 ID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      • 1970-01-01
      相关资源
      最近更新 更多