Dynamisch pagina's toevoegen aan Zend_Navigation container tijdens runtime
In een vervolg op mijn vorige post over Zend_Navigation, Route verzoeken om sitemap.xml aangepaste controller / actie , dit bericht gaat over dymnamically toevoegen van pagina's tot een Zend_Navigation container bij runtime / script uitvoering.
Zijn allemaal goed en wel met vermelding van uw pagina's in een ini-of xml -bestand, maar op een gegeven moment je gaat naar de site van veranderende pagina's in uw dat u wilt gebruiken als onderdeel van een menu, sitemap, of opgenomen worden in uw broodkruimelspoor. Dus wat we moeten doen is een pagina toe te voegen aan onze Zend_Navigation container tijdens runtime. Voorbeelden hiervan zou worden in het toevoegen van nieuwsberichten, blog posts, of pagina opmerkingen, etc.
In dit voorbeeld ga ik wat nieuws berichten config toevoegen aan mijn statisch gedefinieerd ini. Om mijn nieuws te posten pagina configuraties die ik heb gebruikt een klasse die een array met de volgende gegevens terug:
$ PagesToAdd = array ( 0 => array ( 'Label' => 'Fake nieuwsbericht # 5 ...', 'Module' => 'www', 'Route' => 'www-index', 'Actie' => 'View', 'Controller' => 'nieuws', 'Params' => array ( 'Id' => '5-fake-news-verhaal - 5 ') ), 1 => array (/ * Meer details pagina * /), );
Zoals u zult merken dat de functie heeft een array die zijn vervat arrays die het config-arrays voor Zend_Navigation_Page_Mvc geretourneerd. Daarom kan door looping over de array nieuwe Zend_Navigation pagina's worden gecreëerd uit de config array. Het volgende wat je moet doen als onderdeel van de lus is om naar de pagina's in de juiste positie toe te voegen (als alternatief pagina's toegevoegd kunnen worden in bulk met behulp van -> addPages ()-methode).
Om dit te doen, de pagina die u wilt de sub-pagina's toe te voegen aan en voeg dan gewoonweg de pagina's. In dit geval heb ik de volgende code op mijn pagina te vinden:
$ Container-> findOneBy ('label', 'Laatste Nieuws') -> addPage ($ pagina); Mijn algemene navigatie initialisatie in de bootstrap ziet er dus als volgt uit:
/ ** * Gebruikt voor de behandeling van top-level navigatie * * @ Return Zend_Navigation * / beveiligde functie _initNavigation () { $ This-> bootstrap ('lay-out'); $ Layout = $ this-> getResource ('lay-out'); $ View = $ layout-> getView (); $ Config = nieuwe Zend_Config_Ini ( APPLICATION_PATH. '/ Configs / navigation.ini', APPLICATION_ENV); $ Container = new Zend_Navigation ($ config-> standaard); / / Voeg nu de laatste 25 nieuwsberichten $ Nieuws = new Nieuws (); $ Pagina = $ news-> getNavigationEntries (); foreach ($ pagina als $ pagina) { $ Page = nieuwe Zend_Navigation_Page_Mvc ($ pagina); $ Container-> findOneBy ('label', 'Laatste Nieuws') -> addPage ($ pagina); } $ View-> navigatie ($ container); }
Op ding dat moet worden toegevoegd is een vorm van caching (met behulp van Zend_Cache vermoedelijk;)) anders is dit gaat heel duur zijn met elke pagina te laden.


















































Dat is precies wat ik zocht - met dank voor een echt duidelijk voorbeeld. Cheers. G