2015-03-30 2 views
1

Impossible de trouver la bonne façon de décrire sitemap qui fonctionne avec des fils d'Ariane.zf2 navigation breadcrumbs pagination

Par exemple, j'ai une navigation décrit dans 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' 
         ) 
         ... 
        ) 
       ) 
      ) 
     ) 
    ), 
), 

Et là, je veux dire qu'il doit correspondre à des modèles comme articles/page/1 et articles/page/2 ...

Les routes sont en 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', 
       ), 
      ), 
     ), 
    ), 
), 

Je dois faire une pagination dynamique. j'ai donc essayé d'ajouter la page d'exemple de contrôleur

$navi = $this->getServicelocator()->get('Navigation'); 
$page = $navi->findById('articles'); 
$page->addPage(
    array(
     'label' => 'Page 10', 
     'route' => '10' 
    ) 
); 

Breadcrumbs étaient vides à articles/page/10? N'est-ce pas la bonne façon de faire cela?

Répondre

0

eu un problème similaire, je pourrais le résoudre en utilisant le 'useRouteMatch' - drapeau

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

Vous devez changer votre "navigation" de cette façon (tableau "pages" vide):

'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() 
      ) 
     ) 
    ) 
), 

Ensuite, dans votre contrôleur d'action vous devez ajouter ce code:

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

Comme ça, toutes vos pages ha ve leur nom dans le fil d'Ariane et pas un terme générique.