Dinámicamente agregar páginas a un contenedor en tiempo de ejecución Zend_Navigation
En una continuación de mi último post sobre Zend_Navigation, las solicitudes de ruta para sitemap.xml al controlador personalizado / acción , este post es sobre dymnamically añadir páginas a un contenedor de Zend_Navigation en la ejecución en tiempo de ejecución / script.
Su muy bien especificando sus páginas en un ini o xml archivo, pero en algún momento vamos a tener cambios en las páginas de su sitio web que desea, como parte de un menú, mapa del sitio, o para ser incluido en su ruta de navegación. Por lo tanto lo que tenemos que hacer es añadir páginas a nuestro contenedor Zend_Navigation en tiempo de ejecución. Ejemplos de esto sería en la adición de noticias, blogs, o comentarios de la página, etc
En este ejemplo voy a añadir un poco de los mensajes de noticias a mi config ini definido estáticamente. Para obtener noticias de mi página de configuraciones de post que he usado una clase que devuelve una matriz en el siguiente formato:
$ PagesToAdd = array (0 => array ('label' => 'falso reportaje # 5 ...',' module '=>' www ',' route '=>' www-index ',' action '= > 'ver', 'controller' => 'noticias', 'params' => array ('id' => '5-Fake-news-historia - 5 ')), 1 => array (/ * la página más detalles * /),); Como te darás cuenta de que la función ha vuelto una matriz en la que se encuentran las matrices que componen los conjuntos de configuración para Zend_Navigation_Page_Mvc. Por lo tanto, por recorrer las páginas Zend_Navigation nueva matriz se puede crear a partir de la matriz de configuración. El siguiente paso, como parte del bucle es para agregar las páginas en la posición correcta (o bien las páginas se pueden añadir a granel mediante el uso de -> addPages (método)).
Para ello, busque la página que desea añadir las páginas secundarias y sólo tiene que añadir las páginas. En este caso he utilizado el siguiente código para encontrar a mi página:
$ Container-> findOneBy ('label', 'Noticias') - addPage> ($ page); Mi inicialización de navegación en general en el sistema de arranque por lo tanto se parece a esto:
/ ** * Utilizados para la manipulación de primer nivel de navegación * * @ Return Zend_Navigation * / función protegida _initNavigation () { $ This-> bootstrap ('layout'); $ Layout = $ this-> getResource ('layout'); $ Vista = $ layout-> getView (); $ Config = new Zend_Config_Ini ( APPLICATION_PATH. '/ Configs / navigation.ini, APPLICATION_ENV); $ Recipiente = Zend_Navigation nuevo ($ config-> default); / / Ahora agregue los últimos 25 informes de prensa $ Noticias = new Noticias (); $ Páginas = $ noticia-> getNavigationEntries (); foreach ($ páginas como $ page) { Página $ = new Zend_Navigation_Page_Mvc ($ page); $ Container-> findOneBy ('label', 'Noticias') - addPage> ($ page); } $ View-> de navegación ($ contenedor); }
En lo que hay que añadir alguna forma de almacenamiento en caché (con Zend_Cache presumiblemente;)) de lo contrario esto va a ser muy caro, con cada carga de página.


















































Eso es justo lo que estaba buscando - gracias a un ejemplo muy claro. Cheers. G
Bonito post! He algunos problemas para iniciar una clase de modelo en el arranque. Cualquier idea de por qué la aplicación / modelo de clases no están disponibles en el arranque? Su clase se llama "Noticias nuevas () ', en lugar que me gustaría añadir las páginas de navegación por conseguir un árbol de navegación de una clase modelo. Si usted tiene una idea, por favor hágamelo saber! ;)
Mi modelo ha sido editado para el puesto, su nombre correcto en el código es Pro_News y es recogido por el cargador automático.
Conjeturando que usted no está utilizando los módulos? Pero si lo que el modelo debe ser llamado _Noticias de ZF para recoger de forma predeterminada (no utilizar este sistema yo mismo).
Te sugiero que el control de la ruta de inclusión de su método de arranque para ver si contiene "application / models" o incluir el archivo de forma manual.
Bueno, yo uso los módulos, mi mal. Pero sugieren que la carga automática de trabajo? Bueno, he de cavar en ella un poco más profundo. Por el momento, utilizar la función de addPage en el BaseControllers, que no es realmente el desempeño amigable ... jeje. Gracias por su respuesta.
Asegúrese de que su modelo de módulo es el nombre correcto _Noticias (Por ejemplo) y que debe recoger con carga automática.
Mi modelo ha sido editado para el puesto, su nombre correcto en el código es Pro_News y es recogido por el cargador automático.
Conjeturando que usted no está utilizando los módulos? Pero si lo que el modelo debe ser llamado _Noticias De ZF para recoger de forma predeterminada (no utilizar este sistema yo mismo).
Te sugiero que el control de la ruta de inclusión de su método de arranque para ver si contiene "application / models" o incluir el archivo de forma manual.