Почему Zend помечает подстраницу как неактивную? - PullRequest
0 голосов
/ 06 июня 2011

У меня проблемы с настройкой хлебных крошек и меню с помощью Zend_Navigation.

Сначала я настраивал свои страницы с помощью объекта конфигурации XML:

<?xml version="1.0" encoding="UTF-8"?>
<configdata>
<nav>
    <home>
        <label>Home</label>
        <controller>Index</controller>
        <action>index</action>
        <id>home</id>
        <resource>default</resource>
    </home>
    <crm>
        <label>CRM</label>
        <module>Crm</module>
        <controller>Index</controller>
        <action>index</action>
        <id>crm</id>
        <resource>Crm</resource>
        <pages>
            <persons>
                <module>Crm</module>
                <label>Personen</label>
                <controller>Persons</controller>
                <action>index</action>
            </persons>
           (...)etc.(...)

Затем в моем загрузчике:

//Bootstrap.php
$view = $layout -> getView();
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
$navigation = new Zend_Navigation($config);
$view -> navigation($navigation);
$view -> menu = $view -> navigation() -> menu();
$view -> breadcrumbs = $view -> navigation()->breadcrumbs()->setMinDepth(0);

Теперь, если бы я должен был перейти к http://hostname/Crm/Persons/, активное состояние работало бы, и хлебные крошки также отображались бы правильно.

Однако, когда я перехожу к http://hostname/Crm/Persons/inspect/id/3 (где inspect - это действие, а id - параметр), хлебные крошки будут пустыми, и ни один из пунктов меню не будет иметь активное состояние.Ожидаемые хлебные крошки примерно такие: Home > CRM > Personen > John, и CRM и Personen должны быть активны в меню.

Теперь документация Zend дала мне подсказку: она может не работать из-за установленного параметра.

/*
* Dispatched request:
* - module:     blog
* - controller: post
* - action:     view
*/
$page = new Zend_Navigation_Page_Mvc(array(
    'action'     => 'view',
    'controller' => 'post',
    'module'     => 'blog',
    'params'     => array('id' => null)
));

// returns false, because page requires the id param to be set in the request
$page->isActive(); // returns false

Однако я не знаю, как это исправить.Мысли высоко ценятся.

Ответы [ 2 ]

0 голосов
/ 07 июня 2011

После некоторой (большой) переделки я понял, что мне нужно определить страницу в XML, прежде чем Zend распознает структуру.

<?xml version="1.0" encoding="UTF-8"?>
<configdata>
<nav>
    <home>
        <label>Home</label>
        <controller>Index</controller>
        <action>index</action>
        <id>home</id>
        <resource>default</resource>
    </home>
    <crm>
        <label>CRM</label>
        <module>Crm</module>
        <controller>Index</controller>
        <action>index</action>
        <id>crm</id>
        <resource>Crm</resource>
        <pages>
            <persons>
                <module>Crm</module>
                <label>Personen</label>
                <controller>Persons</controller>
                <action>index</action>
                <pages>
                    <inspect>  <--- this will make Zend recognize the page
                        <module>Crm</module>
                        <label>Persoon</label>
                        <controller>Persons</controller>
                        <action>inspect</action>
                    </inspect>
                </pages>
            </persons>
            (...)etc(...)

Обратите внимание, что я не хотел, чтобы действие проверки отображалось в меню, и для максимальной глубины рендеринга было установлено значение 1:

$view -> menu = $view -> navigation() -> menu()->setMaxDepth(1);

0 голосов
/ 06 июня 2011

Я не использовал XML-файл для настройки навигации в ZF раньше, поэтому я не уверен, что это будет работать. Но, основываясь на моем опыте, добавьте к тегу лиц следующее:

    <params>
        <id>0</id>
    </params>

В этом примере идентификатор по умолчанию равен 0.

См. Этот вопрос

...