2011-04-19 17 views

Respuesta

3

Una manera más simple es definir toda su navegación en un solo lugar. Admite páginas anidadas (secundarias) ilimitadas, lo que significa que puede tener su menú principal como nivel base y luego las subpáginas debajo de cada página principal para sus submenús. Con View Helpers, puede generar fácilmente solo el menú de la página activa de la página secundaria.

De esta manera mantiene toda su navegación en un solo lugar, para una futura mantenibilidad.

Por ejemplo, defino la navegación en todo el sitio dentro del archivo application.ini usando el Application Resource, y luego en mi vista los scripts usan el Navigation View Helpers para formatear mis menús.

Este es un pequeño extracto de mi application.ini configuración de navegación de archivos en un proyecto que estoy trabajando en:

resources.navigation.pages.exhibits.label     = "Exhibits" 
resources.navigation.pages.exhibits.controller    = "exhibits" 
resources.navigation.pages.exhibits.action     = "index" 
resources.navigation.pages.exhibits.pages.index.label  = "Search Exhibitors" 
resources.navigation.pages.exhibits.pages.index.controller = exhibits 
resources.navigation.pages.exhibits.pages.index.action  = index 
resources.navigation.pages.exhibits.pages.search.label  = "Search Exhibits" 
resources.navigation.pages.exhibits.pages.search.controller = exhibits 
resources.navigation.pages.exhibits.pages.search.action  = "search" 
resources.navigation.pages.exhibits.pages.new.label   = "New Exhibitor" 
resources.navigation.pages.exhibits.pages.new.controller = exhibits 
resources.navigation.pages.exhibits.pages.new.action  = "new" 
resources.navigation.pages.exhibits.pages.import.label  = "Import Exhibits" 
resources.navigation.pages.exhibits.pages.import.controller = exhibits 
resources.navigation.pages.exhibits.pages.import.action  = "import" 

resources.navigation.pages.sales.label      = "Sales" 
resources.navigation.pages.sales.controller     = "sales" 
resources.navigation.pages.sales.action      = index 
resources.navigation.pages.sales.pages.index.label   = "Review/Search" 
resources.navigation.pages.sales.pages.index.controller  = sales 
resources.navigation.pages.sales.pages.index.action   = index 
resources.navigation.pages.sales.pages.edit.label   = Add/Edit Sales 
resources.navigation.pages.sales.pages.edit.controller  = sales 
resources.navigation.pages.sales.pages.edit.action   = edit 
resources.navigation.pages.sales.pages.flags.label   = Flags/Problems 
resources.navigation.pages.sales.pages.flags.controller  = sales 
resources.navigation.pages.sales.pages.flags.action   = flags 

Y dentro de mi archivo layout.phtml:

<div id='mainmenu'> 
    <?php echo $this->navigation()->menu()->setMaxDepth(0); ?> 
</div> <!-- #mainmenu --> 
<div id='submenu'> 
    <?php echo $this->navigation()->menu()->setOnlyActiveBranch(true) 
             ->setMinDepth(1) 
             ->setMaxDepth(1); ?> 
</div> <!-- #submenu --> 

Así que cuando una el usuario va a la página de Exposiciones, solo ve a los niños de esa página, y lo mismo con la página Ventas. Muy simple y muy efectivo.

+0

¡Eso es increíble! ¡Gracias! En lugar de especificar controladores y acciones, ¿puedo usar nombres de ruta? De esa manera, simplemente puedo modificar la ruta y el cambio se reflejará en la navegación. –

+0

Nunca los he usado en Zend_Navigation, pero sí puedes. El parámetro * .route se puede usar para cada página para especificar el enrutador a usar. Consulte [Zend Navigation Pages MVC] (http://framework.zend.com/manual/en/zend.navigation.pages.html#zend.navigation.pages.mvc) para conocer su uso. –

3

Normalmente hago esto en el complemento del controlador. Aquí puedo crear una navegación basada en la ruta actual o los parámetros de solicitud, y luego pasar fácilmente a la vista/diseño desde el recurso de la aplicación y cambiar con otra, cuando se rediseña la navegación.

+0

¿Debo usar un complemento de controlador dedicado para hacer esto? –

Cuestiones relacionadas