2013-04-11 5 views
3

В настоящее время я создаю мой новый веб-сайт с помощью Zend Framework 1.12.3, и я увидел то, что я ненавижу о Зенде навигации:Zend Navigation - Марк Родитель активен, если ребенок активен

Когда маршрут детей активно (например, одно сообщение блога, маршрут blog-post), он не помещает родительскую страницу (маршрут blog в этом случае) как активный.

Вот мой код: (navigation.xml)

<blog> 
    <label>BLOG</label> 
    <route>blog</route> 
    <title>BLOG_TITLE</title> 
    <pages> 
     <blog-post> 
      <route>blog-post</route> 
      <visible>false</visible> 
     </blog-article> 
     <blog-category> 
      <route>blog-category</route> 
      <visible>false</visible> 
     </blog-category> 
    </pages> 
</blog> 

В ясно, я бы страницу blog быть помечен как активный, если ребенок маршрут как blog-post активен. Он не делает этого, к сожалению, не используя подстраницы (чего я не хочу). Поэтому, если есть способ отметить название маршрута blog и все маршруты, начинающиеся с blog (например: blog-post, blog-category, blog-author), было бы очень полезно!

Я не хочу использовать подстраницу для этого из-за того, что мое меню частично отображает пустое раскрывающееся меню (Twitter Bootstrap). Смотрите сами:

Empty dropdown in Zend

+0

Почему бы не использовать ZF2? так как это новый сайт. –

+0

Я предоставляю свои основные навигационные элементы только модулю/контроллеру и оставляю действие пустым - тогда каждый подэлемент имеет действие. вот как вы получаете то, что хотите. Это не сработает только с ури. Вы должны использовать маршрутизатор. –

+0

@MarshallHouse Мне не нравятся классы с именами классов ZF2. –

ответ

5

Я знаю, что на это уже был дан ответ, но я нашел другое решение, потому что один, отправленный Маршаллом, не работал для меня. Я думаю, это потому, что я не использую действие/контроллер в моем меню, но маршрутов вместо этого.

Мой пункт меню выглядит следующим образом:

array(
    'label' => 'cms-nav_users', 
    'access_module' => 'user', 
    'resource' => 'user_admin', 
    'route' => 'admin_user', 
    'pages' => array(
     array(
      'label' => 'cms-nav_companies', 
      'access_module' => 'user', 
      'route' => 'company_admin', 
      'resource' => 'company_admin', 
     ), 
     array(
      'label' => 'cms-nav_users-list', 
      'access_module' => 'company', 
      'route' => 'admin_user', 
      'resource' => 'user_admin', 
     ), 
    ), 
), 

Я придумал решение, исходя из собственного шаблона меню (частично). В основном есть цикл Еогеасп, который проверяет, если какое-либо из подстраниц активно, и если есть один - отмечает родитель как активные, это выглядит следующим образом:

$active = false; 

if (!empty($page->pages)) 
{ 
    foreach ($page->pages as $subpage) 
    { 
     if ($subpage->isActive()) $active = true; 
    } 
} 

$html[] = ($active) ? 'class="active"' : ''; 

Надеется, что это помогает кто-то :)

UPDATE

на самом деле я узнал, что вы можете использовать собственный IsActive Zend Framework (в) с true параметра, как показано в исходном коде:

Zend_Navigation_Page_Mvc::isActive($recursive = false) 

обоих способов чюо rk, но этот шов более правилен.

+0

Ну, на самом деле, я больше не использую zf1, теперь я на ZF2, но это было именно то, что я сделал, чтобы мои подстраницы работали! Итак, спасибо, чувак, чтобы это одобрить! :) –

2

из документации:

array(
    'label' => 'Page 2', 
    'controller' => 'page2', 
    'pages' => array(
     array(
      'label' => 'Page 2.1', 
      'action' => 'page2_1', 
      'controller' => 'page2', 
      'class' => 'special-one', 
      'title' => 'This element has a special class', 
      'active' => true 
     ), 
     array(
      'label' => 'Page 2.2', 
      'action' => 'page2_2', 
      'controller' => 'page2', 
      'class' => 'special-two', 
      'title' => 'This element has a special class too' 
     ) 
    ) 
), 

Как вы можете видеть, элемент родительского меню не имеет каких-либо действий, возложенные на него, но родители и дети разделяют один и тот же контроллер. Вот как вы можете иметь активные состояния для родителя дочерней страницы.

+0

Присоединяйтесь ко мне в чате http: // chat .stackoverflow.com/rooms/27993/discussion-between-frederick-marcoux-and-marshall-house, пожалуйста. У меня есть некоторые вопросы о ZF2, если вы хотите их использовать лучше, чем документы ZF! :) –