Dynamicky přidávat stránky do kontejneru Zend_Navigation za běhu

Tím, Steven Lloyd Watkin , čtvrtek 07.1.2010 22:50

V pokračování na můj poslední příspěvek o Zend_Navigation, cesta žádosti o sitemap.xml na vlastní řadič / akci , tento post je asi dymnamically přidávání stránek do kontejneru Zend_Navigation za běhu / spuštění skriptu.

Jeho všechno v pořádku a dobré uvedením vašich stránek v ini nebo XML souboru, ale na nějakém místě budete mít měnící se stránky na vašem webu, který chcete jako součást menu, mapa stránek, nebo být součástí vašeho strouhanka stezka. Proto to, co musíme udělat, je přidat stránky do našeho Zend_Navigation kontejneru za běhu. Příkladem pro toto by bylo v přidávání zpráv, blogů nebo stránek poznámky, atd.

V tomto příkladu budu přidávat nějaké novinky příspěvky na můj staticky definované ini config. Chcete-li dostat své novinky konfigurace po stránce jsem používal třídy, která vrátí pole v následujícím formátu:

  $ PagesToAdd = array (
   0 =>
     array (
       'Label' => 'Fake novinová zpráva # 5 ...',
       'Module' => 'www',
       'Trasa' => 'www-index',
       'Akce' => 'zobrazit',
       'Správce' => 'zpráv',
       'Params' => array (
           'Id' => "5-Fake-news-story - 5 ')
     ),
   1 =>
     array (/ * Další podrobnosti stránky * /),
  ); 

Jak zjistíte, že funkce se vrátil pole, ve kterém jsou obsaženy pole, které tvoří config pole pro Zend_Navigation_Page_Mvc. Proto lze podle smyčkování přes pole nové stránky Zend_Navigation být vytvořen z config pole. Další věc, kterou udělat jako součást smyčky je přidat stránky do správné polohy (alternativně stránky mohou být přidány ve velkém pomocí -> addPages () metoda).

Chcete-li to, vyhledejte stránku, kterou chcete přidat sub-stránky a jednoduše přidávat stránky. V tomto případě jsem použil následující kód najít mé stránky:

  $ Container-> findOneBy ('label', 'Novinky') -> addPage ($ page); 

Můj celkový navigace inicializace v bootstrap tedy vypadá takto:

  / **
      * Slouží k manipulaci top-úrovni navigaci
      *
      * @ Return Zend_Navigation
      * /
     chráněné funkce _initNavigation ()
     {
         $ This-> bootstrap ('layout');
         $ Layout = $ this-> getResource ('layout');
         $ View = $ layout-> getView ();
         $ Config = new Zend_Config_Ini (
             APPLICATION_PATH.  '/ Konfigurační soubory / navigation.ini', APPLICATION_ENV);

         $ Kontejner = new Zend_Navigation ($ config-> default);
         / / Nyní přidejte posledních 25 zpravodajských
         $ Novinky = new Novinky ();
         $ $ Pages = novinky-> getNavigationEntries ();
         foreach ($ stránek AS $ page) {
        	 $ Page = new Zend_Navigation_Page_Mvc ($ page);
        	 $ Container-> findOneBy ('label', 'Novinky') -> addPage ($ page);
         }
         $ Zobrazení-> Navigace ($ kontejner);
     } 

O věc, která je třeba doplnit, je nějaká forma ukládání do vyrovnávací paměti (pomocí Zend_Cache pravděpodobně;)) jinak to bude dost drahé s každým načtení stránky.

6 Reakce na "dynamicky přidávat stránky do kontejneru Zend_Navigation za běhu"

  1. Pan Muž říká:

    To je právě to, co jsem hledal - díky za opravdu jasným příkladem. Na zdraví. G

  2. Č. A387 říká:

    Pěkné místo! Já jsem nějaké potíže zahájení model třídy v bootstrap. Žádné ponětí, proč application / model třídy nejsou k dispozici od bootstrap? Vaše třída se nazývá 'nové zprávy ()', místo toho bych rád dodal, navigační stránky tím, že dostane navigační strom z modelu třídy. Pokud máte nápad, dejte mi prosím vědět! ;)

    • Můj model byl editován o místo, jeho správný název v kódu je Pro_News a uklízel Autoloader.

      Hádat nejste použít moduly? Ale pokud to váš model by měl být volán k _News ZF vyzvednout ve výchozím nastavení (nechci používat tento systém sám).

      Já bych navrhnout kontroly zahrnují cestu z bootstrap metodou zjistit, zda obsahuje "application / modely" nebo obsahují soubor ručně.

      • Č. A387 říká:

        Tak jsem použít moduly, moje špatná. Ale podle vás autoloading by měl fungovat? No, já jsem do něj kopat trochu hlouběji. V tuto chvíli jsem použít addPage funkce v BaseControllers, což není opravdu výkon přátelský ... hehe. Díky za Vaši odpověď.

  3. Můj model byl editován o místo, jeho správný název v kódu je Pro_News a uklízel Autoloader.

    Hádat nejste použít moduly? Ale pokud to váš model by měl být volán _News Pro ZF vyzvednout ve výchozím nastavení (nechci používat tento systém sám).

    Já bych navrhnout kontroly zahrnují cestu z bootstrap metodou zjistit, zda obsahuje "application / modely" nebo obsahují soubor ručně.

Dovolená jeden Namítat













Panorama Téma, které Themocracy

6 návštěvníků online nyní
3 osoby, 3 roboty, 0 členů
Max návštěvníků dnes: 13 v 12:21 UTC
Tento měsíc: 22 na 08.06.2011 00:30 UTC
Tento rok: 130 v 28-03-2011 22:40 UTC
Všechny čas: 130 v 28-03-2011 22:40 UTC