Dinamicamente engadir páxinas ao recipiente Zend_Navigation en tempo de execución
Nunha continuación do meu último post sobre Zend_Navigation, encamiñar solicitudes para sitemap.xml para o controlador personalizado / acción , este post é sobre dymnamically engadir páxinas a un recipiente Zend_Navigation en tempo de execución a execución de scripts /.
Seu todo moi ben especificando as súas páxinas nun INI ou XML arquivo, pero nalgún momento terá páxinas cambio no seu sitio web que quere, como parte dun menú, Sitemap, ou pode ser incluído na súa banda de migas. Polo tanto, o que cómpre facer é engadir páxinas ao noso container Zend_Navigation en tempo de execución. Exemplos para iso sería en engadir novas, artigos de blog ou páxina de comentarios, etc
Neste exemplo, vou engadir algunhas novidades para os meus posts ini estaticamente definido config. Para obter noticias miñas opcións de páxina de post que eu usei unha clase que amosa unha matriz co seguinte formato:
PagesToAdd $ array = ( 0 => array ( "Etiqueta" historia => 'noticias falsas # 5 ...', 'Módulo' = 'www'>, 'Ruta' => 'index www', 'Acción', 'visión' => 'Controller' noticia '=> 'Params' => array ( 'Id' => '5-Fake-news-historia - 5 ') ), 1 => array (/ * * Máis detalles da páxina /), );
Como vai notar que a función retornou un array no que están contidas as matrices que compoñen a configuración de arrays Zend_Navigation_Page_Mvc. Polo tanto, facendo un loop sobre a matriz páxinas Zend_Navigation novo pode ser creado a partir da matriz de configuración. A seguinte cousa que facer, como parte do ciclo é engadir as páxinas na posición correcta (alternativamente páxinas poden ser engadidas na masa usando - addPages> método ()).
Para iso, localizar a páxina que quere engadir o sub-páxinas e simplemente engadir as páxinas. Neste caso eu usei o seguinte código para atopar a miña páxina:
$ Container-> findOneBy ('label', 'Hoxe') -> addPage ($ page); A miña iniciación de navegación global ao iniciar, polo tanto, coma este:
/ ** * Usado para manipulación de navegación de nivel superior * * @ Return Zend_Navigation * / _initNavigation función protexida () { $ This-> inicio ("esquema"); $ Esquema = $ this GetResource-> ('layout'); $ View = GetView $ esquema-> (); $ Config = Zend_Config_Ini novo ( APPLICATION_PATH. '/ Axustes navigation.ini / ", APPLICATION_ENV); $ Container = Zend_Navigation novo ($ default config->); / / Agora engade os últimos 25 noticias $ Novas Novas = new (); $ Páxinas = $ getNavigationEntries noticias> (); foreach ($ páxinas, $ page) { $ Page = new Zend_Navigation_Page_Mvc ($ page); $ Container-> findOneBy ('label', 'Hoxe') -> addPage ($ page); } $ Navegación> view ($ container); }
Na cousa que debe ser engadido é algunha forma de caché (usando Zend_Cache presuntamente;)), se non que vai ser moi caro a cada carga da páxina.


















































Isto é só o que eu estaba a buscar - grazas por un exemplo moi claro. Cheers. G