Dinamicamente adicionar páginas ao recipiente Zend_Navigation em tempo de execução
Em uma continuação do meu último post sobre Zend_Navigation, encaminhar pedidos para sitemap.xml para o controlador personalizado / acção , este post é sobre dymnamically adicionar páginas a um recipiente Zend_Navigation em tempo de execução a execução de scripts /.
Seu tudo muito bem especificando suas páginas em um INI ou XML arquivo, mas em algum momento você vai ter páginas mudança em seu site que você deseja, como parte de um menu, sitemap, ou pode ser incluído na sua trilha de migalhas. Portanto, o que precisamos fazer é adicionar páginas ao nosso container Zend_Navigation em tempo de execução. Exemplos para isso seria em adicionar notícias, posts de blog ou página de comentários, etc
Neste exemplo, vou acrescentar algumas novidades para os meus posts ini estaticamente definido config. Para obter notícias minhas configurações de página de post que eu usei uma classe que retorna uma matriz com o seguinte formato:
PagesToAdd $ array = ( 0 => array ( "Rótulo" história => 'notícias falsas # 5 ...', 'Módulo' = 'www'>, 'Rota' => 'index www', 'Ação', 'visão' => 'Controller' notícia '=> 'Params' => array ( 'Id' => '5-Fake-news-história - 5 ') ), 1 => array (/ * * Mais detalhes da página /), );
Como você vai notar que a função retornou um array no qual estão contidas as matrizes que compõem a configuração de arrays Zend_Navigation_Page_Mvc. Portanto, fazendo um loop sobre a matriz páginas Zend_Navigation novo pode ser criado a partir da matriz de configuração. A próxima coisa a fazer, como parte do ciclo é adicionar as páginas na posição correta (alternativamente páginas podem ser adicionadas na massa usando - addPages> método ()).
Para fazer isso, localize a página que você deseja adicionar o sub-páginas e simplesmente adicionar as páginas. Neste caso eu usei o seguinte código para encontrar a minha página:
$ Container-> findOneBy ('label', 'Últimas Notícias') -> addPage ($ page); Minha iniciação de navegação global na inicialização, portanto, parecido com este:
/ ** * Usado para manipulação de navegação de nível superior * * @ Return Zend_Navigation * / _initNavigation função protegida () { $ This-> inicialização ("layout"); $ Layout = $ this GetResource-> ('layout'); $ View = GetView $ layout-> (); $ Config = Zend_Config_Ini novo ( APPLICATION_PATH. '/ Configs navigation.ini /', APPLICATION_ENV); $ Container = Zend_Navigation novo ($ default config->); / / Agora adicione os últimos 25 notícias $ Notícias Notícias = new (); $ Pages = $ getNavigationEntries notícias> (); foreach ($ páginas, $ page) { $ Page = new Zend_Navigation_Page_Mvc ($ page); $ Container-> findOneBy ('label', 'Últimas Notícias') -> addPage ($ page); } $ Navegação> view ($ container); }
Na coisa que precisa ser acrescentado é alguma forma de cache (usando Zend_Cache presumivelmente;)), caso contrário isso vai ser muito caro a cada carregamento da página.


















































Isso é só o que eu estava procurando - obrigado por um exemplo muito claro. Cheers. G