¿En qué parte de mi aplicación debo definir mis páginas de nivel superior y de nivel inferior para que las use Zend Navigation? Mi asistente de vista de barra de navegación de nivel superior va a estar separado del asistente de vista que genera la navegación secundaria.¿Dónde debería llenar mi contenedor Zend_Navigation?
Respuesta
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.
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.
¿Debo usar un complemento de controlador dedicado para hacer esto? –
- 1. jqGrid llenar su contenedor
- 2. Representación personalizada de Zend_Navigation
- 3. ¿Dónde debería crear mi blog de desarrollo?
- 4. ¿Dónde debería poner mi código JavaScript?
- 5. ¿Dónde debo almacenar una referencia a mi contenedor DI?
- 6. ¿Dónde debería definir mi NinjectModule y mis fábricas?
- 7. No puedo llenar mi CGPath
- 8. ¿Dónde debería guardar la clave de "activación" de mi aplicación?
- 9. ¿Dónde debería colocar los archivos SQL en mi proyecto Java?
- 10. ¿Dónde debería guardar mi estado de nivel de juego?
- 11. .gitignore archivo, ¿dónde debería ponerlo en mi proyecto xcode?
- 12. ¿Dónde debería colocar mi asp.net-mvc fuertemente tipado viewdata?
- 13. Si quiero el JDK para mi Mac, ¿dónde debería buscarlo?
- 14. IoC, ¿dónde colocas el contenedor?
- 15. ¿Dónde debería descargar CorFlags.exe?
- 16. ¿Dónde debería colocar scriptmanager
- 17. ¿Debería probar mi unidad mi JavaScript?
- 18. Estiramiento de una ruta XAML para llenar su elemento contenedor
- 19. ¿Cómo escribir mi propio contenedor en C#?
- 20. Autofac en aplicaciones web, ¿dónde debería guardar el contenedor para facilitar el acceso?
- 21. ¿Debo encapsular mi contenedor IoC?
- 22. ¿Dónde debería almacenar variables sensibles?
- 23. Zend_Translate - Zend_Navigation and Routing ¡problema de combinación!
- 24. ¿Qué debería construirse a través de un contenedor de IOC?
- 25. MEF: ¿Dónde debería colocar el CompositionContainer?
- 26. ¿Dónde debería definir mis plantillas de datos?
- 27. ¿Dónde obtengo el código de muestra en C++ creando un iterador para mi propio contenedor?
- 28. plantillas de jQuery: ¿dónde debería ponerlas?
- 29. ¿Dónde está mi XDeclaration?
- 30. En Spring/JSP, ¿dónde debería formatearse?
¡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. –
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. –