Dynamicky pridávať stránky do kontajnera Zend_Navigation za behu
V pokračovaní na môj posledný príspevok o Zend_Navigation, cesta žiadosti o sitemap.xml na vlastné radič / akciu , tento post je asi dymnamically pridávanie stránok do kontajnera Zend_Navigation za behu / spustenie skriptu.
Jeho všetko v poriadku a dobrej uvedením vašich stránok v ini alebo XML súboru, ale na nejakom mieste budete mať meniace sa stránky na vašom webe, ktorý chcete ako súčasť menu, mapa stránok, alebo byť súčasťou vášho strúhanka chodník. Preto to, čo musíme urobiť, je pridať stránky do nášho Zend_Navigation kontajnera za behu. Príkladom pre toto by bolo v pridávaní správ, blogov alebo stránok poznámky, atď
V tomto príklade budem pridávať nejaké novinky príspevky na môj staticky definované ini config. Ak chcete dostať svoje novinky konfigurácie po stránke som používal triedy, ktorá vráti poľa v nasledujúcom formáte:
$ PagesToAdd = array (0 => array ('label' => 'Fake novinová správa # 5 ...',' module' => 'www', 'trasa' => 'www-index', 'akcie' = > 'zobraziť', 'správca' => 'správ', 'params' => array ('id' => "5-Fake-news-story - 5 ')), 1 => array (/ * Ďalšia stránka Podrobnosti * /),); Ako zistíte, že funkcia sa vrátil pole, v ktorom sú obsiahnuté polia, ktoré tvoria config pole pre Zend_Navigation_Page_Mvc. Preto možno podľa smyčkování cez pole novej stránky Zend_Navigation byť vytvorený z config poľa. Ďalšia vec, ktorú urobiť ako súčasť slučky je pridať stránky do správnej polohy (alternatívne stránky môžu byť pridané vo veľkom pomocou -> addPages () metóda).
Ak to chcete, vyhľadajte stránku, ktorú chcete pridať sub-stránky a jednoducho pridávať stránky. V tomto prípade som použil nasledujúci kód nájsť moje stránky:
$ Container-> findOneBy ('label', 'Novinky') -> addPage ($ page); Môj celkový navigácia inicializácia v boot strap teda vyzerá takto:
/ ** * Používa pre manipuláciu s top-úrovni navigáciu * * @ Return Zend_Navigation * / chránené funkcie _initNavigation () { $ This-> boot strap ('layout'); $ Layout = $ this-> getResource ('layout'); $ View = $ layout-> getView (); $ Config = new Zend_Config_Ini ( APPLICATION_PATH. '/ Konfiguračné súbory / navigation.ini', APPLICATION_ENV); $ Kontajner = new Zend_Navigation ($ config-> default); / / Teraz pridajte posledných 25 spravodajských $ Novinky = new Novinky (); $ $ Pages = novinky-> getNavigationEntries (); foreach ($ stránok AS $ page) { $ Page = new Zend_Navigation_Page_Mvc ($ page); $ Container-> findOneBy ('label', 'Novinky') -> addPage ($ page); } $ Zobrazenie-> Navigácia ($ kontajner); }
O vec, ktorá je treba doplniť, je nejaká forma ukladanie do vyrovnávacej pamäte (pomocou Zend_Cache pravdepodobne;)) inak to bude dosť drahé s každým načítaní stránky.


















































To je práve to, čo som hľadal - vďaka za naozaj jasným príkladom. Na zdravie. G
Pekné miesto! Ja som nejaké problémy začatí model triedy v boot strap. Žiadne potuchy, prečo application / model triedy nie sú k dispozícii od boot strap? Vaša trieda sa nazýva 'nové správy ()', namiesto toho by som rád dodal, navigačné stránky tým, že dostane navigačné strom z modelu triedy. Ak máte nápad, dajte mi prosím vedieť! ;)
Môj model bol editovaný o miesto, jeho správny názov v kóde je Pro_News a upratoval Autoloader.
Hádať nie ste použiť moduly? Ale ak to váš model by mal byť volaný k _News ZF vyzdvihnúť v predvolenom nastavení (nechcem používať tento systém sám).
Ja by som navrhnúť kontroly zahŕňajú cestu z boot strap metódou zistiť, či obsahuje "application / modely" alebo obsahujú súbor ručne.
Tak som použiť moduly, moja zlá. Ale podľa vás autoloading by mal fungovať? No, ja som do neho kopať trochu hlbšie. V túto chvíľu som použiť addPage funkcie v BaseControllers, čo nie je naozaj výkon priateľský ... hehe. Vďaka za Vašu odpoveď.
Skontrolujte, či modul model je správne pomenovaný _News (Napríklad) a malo by zdvihnúť pomocou autoloading.