zf2导航面包屑分页

时间:2015-03-30 15:47:30

标签: routes zend-framework2 breadcrumbs

无法找到描述使用面包屑的站点地图的正确方法。

例如,我有 module.config.php

中描述的导航
'navigation' => array(
    'default' => array(
        array(
            'label' => 'Home',
            'route' => 'home'
        ),
        array(
            'label' => 'Articles',
            'route' => 'articles',
            'pages' => array(
                array(
                    'label' => 'Paging',
                    'route' => 'articles',
                    'id' => 'articles',
                    'pages' => array(
                        array(
                            'label' => 'Page 1',
                            'route' => '1'
                        ),
                        array(
                            'label' => 'Page 2',
                            'route' => '2'
                        )
                        ...
                    )
                )
            )
        )
    ),
),

我的意思是它应该匹配文章/ page / 1 文章/ page / 2 等模式......

路线位于 autoload / routes.global.php

'articles' => array(
    'type' => 'Zend\Mvc\Router\Http\Literal',
    'options' => array(
        'route'    => '/articles',
        'defaults' => array(
            'controller' => 'Articles\Controller\Index',
            'action'     => 'index',
        ),
    ),
    'may_terminate' => true,
    'child_routes' => array(
        'pagination' => array(
            'type'    => 'Segment',
            'options' => array(
                'route'       => '/page[/:page]',
                'constraints' => array(
                    'page'       => '[0-9A-Za-z]+',
                ),
                'defaults'    => array(
                    'controller' => 'Articles\Controller\Index',
                    'action'     => 'index',
                ),
            ),
        ),
    ),
),

我需要进行动态面包屑分页。 所以我试图从控制器

添加示例页面
$navi = $this->getServicelocator()->get('Navigation');
$page = $navi->findById('articles');
$page->addPage(
    array(
        'label'  => 'Page 10',
        'route' => '10'
    )
);

articles / page / 10 时面包屑是空的?我这样做是不是正确的方式?

2 个答案:

答案 0 :(得分:0)

有一个类似的问题,我可以使用'useRouteMatch'来解决它 - 标志

'pages' => array(
                        array(
                            'label' => 'Page 1',
                            'route' => '1',
                            'useRouteMatch' => true
                        ),
                        array(
                            'label' => 'Page 2',
                            'route' => '2'
                        )
                        ...
                    )

答案 1 :(得分:0)

你必须以这种方式改变你的“导航”(“pages”数组为空):

'navigation' => array(
'default' => array(
    array(
        'label' => 'Home',
        'route' => 'home'
    ),
    array(
        'label' => 'Articles',
        'route' => 'articles',
        'pages' => array(
            array(
                'label' => 'Paging',
                'route' => 'articles',
                'id' => 'articles',
                'pages' => array()
            )
        )
    )
),

然后,在您的控制器操作中,您必须添加以下代码:

$navigation = $this->getServiceLocator()->get('Navigation');
$page = $navigation->findBy('id', 'article');
$page->addPage(array(
    'uri' => $this->getRequest()->getRequestUri(),
    'label' => 'Page ' . $pageNumber,
    'active' => true,
));

就像那样,你的所有页面都会将自己的名字放在面包屑中而不是通用术语。