Δυναμικά προσθέσετε σελίδες στο δοχείο Zend_Navigation κατά το χρόνο εκτέλεσης

Με Steven Lloyd Watkin , Πέμπτη 7 Ιανουαρίου 2010 22:50

Σε μια συνέχεια στην τελευταία θέση μου για Zend_Navigation, αιτήσεις για τη διαδρομή sitemap.xml στην προσαρμοσμένη ελεγκτή / δράσης , η θέση αυτή είναι περίπου dymnamically προσθήκη σελίδων σε ένα δοχείο Zend_Navigation σε εκτέλεση runtime / script.

Όλα του ωραία και καλά προσδιορίζοντας τις σελίδες σας σε ένα ini ή xml αρχείο αλλά κάποια στιγμή θα πάμε να έχουν την εναλλαγή των σελίδων στην τοποθεσία σας που θέλετε ως μέρος ενός μενού, sitemap, ή που θα περιληφθούν στην τριμμένη φρυγανιά μονοπάτι σας. Ως εκ τούτου αυτό που χρειάζεται να κάνετε είναι να προσθέσετε τις σελίδες στο δοχείο Zend_Navigation μας κατά την εκτέλεση. Παραδείγματα για αυτό θα ήταν σε πρόσθεση νέων στοιχείων, blog θέσεις, ή τα σχόλια σελίδα, κλπ.

Σε αυτό το παράδειγμα Πάω να προσθέσετε κάποια μηνύματα είδηση ​​για στατικά ορίζονται config ini μου. Για να πάρετε ειδήσεις διαμορφώσεις μου σελίδα μετά την έχω χρησιμοποιήσει μια κατηγορία η οποία επιστρέφει έναν πίνακα με την ακόλουθη μορφή:

 $ PagesToAdd = array (0 => array ('ετικέτα' => 'Fake είδηση ​​# 5 ...',' ενότητα '=>' www ',' διαδρομή '=>' www-δείκτη »,« δράση »= > «άποψη», «υπεύθυνος της επεξεργασίας '=>' νέα ',' params '=> array (' id '=> '5-Fake-news-ιστορία - 5')), 1 => array (/ * Περισσότερες σελίδα Λεπτομέρειες * /),)? 

Όπως θα παρατηρήσετε ότι η λειτουργία έχει επιστρέψει μια σειρά στην οποία περιέχονται πίνακες που συνθέτουν το config συστοιχίες για Zend_Navigation_Page_Mvc. Ως εκ τούτου, από looping πάνω από τον πίνακα νέες σελίδες Zend_Navigation μπορούν να δημιουργηθούν από το config πίνακα. Το επόμενο πράγμα που κάνει ως μέρος του βρόχου είναι να προσθέσετε τις σελίδες στη σωστή θέση (εναλλακτικά σελίδες μπορούν να προστεθούν σε μεγάλες ποσότητες με τη χρήση -> addPages (μέθοδος)).

Για να το κάνετε αυτό, εντοπίστε τη σελίδα που θέλετε να προσθέσετε τις υπο-σελίδες και απλά να προσθέσετε τις σελίδες. Στην περίπτωση αυτή έχω χρησιμοποιήσει τον ακόλουθο κώδικα για να βρείτε τη σελίδα μου:

  $ Εμπορευματοκιβωτίων-> findOneBy («σήμα», «Τελευταία Νέα») -> addPage ($ σελίδα)? 

Συνολική αρχικοποίησης πλοήγηση μου στο bootstrap λόγο αυτό, φαίνεται κάπως έτσι:

  / **
      * Χρησιμοποιηθεί για το χειρισμό υψηλού επιπέδου πλοήγησης
      *
      * @ Zend_Navigation επιστροφή
      * /
     προστατεύονται _initNavigation λειτουργία ()
     {
         $ This-> bootstrap («διάταξη»)?
         $ Layout = $ this-> getResource («διάταξη»)?
         $ Θέα = $ layout-> getView ()?
         $ Config = νέα Zend_Config_Ini (
             APPLICATION_PATH.  '/ Configs / navigation.ini », APPLICATION_ENV)?

         $ Δοχείο = νέα Zend_Navigation ($ config-> default)?
         / / Τώρα προσθέστε τα τελευταία 25 δελτία ειδήσεων
         $ Ειδήσεις = νέα Ειδήσεις ()?
         Σελίδες $ = $ ειδήσεις-> getNavigationEntries ()?
         foreach ($ σελίδες όπως $ σελίδα) {
        	 $ Page = νέα Zend_Navigation_Page_Mvc ($ σελίδα)?
        	 $ Εμπορευματοκιβωτίων-> findOneBy («σήμα», «Τελευταία Νέα») -> addPage ($ σελίδα)?
         }
         $ Άποψη-> πλοήγησης ($ εμπορευματοκιβωτίων)?
     } 

Στις πράγμα που πρέπει να προστεθεί είναι κάποιο είδος προσωρινής αποθήκευσης (χρησιμοποιώντας Zend_Cache προφανώς?)) με άλλο τρόπο αυτό πρόκειται να είναι αρκετά ακριβά με κάθε φορτίο σελίδα.

6 Responses to "προσθέσετε Δυναμικά σελίδες δοχείο Zend_Navigation κατά το χρόνο εκτέλεσης"

  1. Ο κ. Ο άνθρωπος λέει:

    Αυτό είναι ακριβώς αυτό που έψαχνα - ευχαριστίες για μια πραγματικά σαφές παράδειγμα. Cheers. G

  2. A387 λέει:

    Nice post! Έχω κάποιο πρόβλημα την έναρξη μιας τάξης μοντέλο της εκκίνησης. Οποιαδήποτε ιδέα γιατί εφαρμογή / μοντέλο τάξεις δεν είναι διαθέσιμα από το bootstrap; Τάξη σας ονομάζεται «νέα Ειδήσεις ()», αντί γι 'αυτό θα θέλατε να προσθέσετε τις σελίδες πλοήγησης με να πάρει ένα δέντρο πλοήγησης από μια τάξη μοντέλο. Εάν έχετε μια ιδέα, παρακαλώ ενημερώστε με! ?)

    • Μοντέλο μου ήταν φτιαγμένος για το αξίωμα, σωστά το όνομά του στον κώδικα είναι Pro_News και μπορεί να διαβαστεί από τον Autoloader.

      Μαντέψουν δεν χρησιμοποιείτε ενότητες; Αλλά εάν έτσι το μοντέλο σας θα πρέπει να ονομάζεται _News ZF για να πάρει από προεπιλογή (δεν χρησιμοποιώ τον εαυτό μου αυτό το σύστημα).

      Θα πρότεινα τον έλεγχο της περιλαμβάνουν διαδρομή από τη μέθοδο bootstrap σας για να δείτε εάν περιέχει "application / μοντέλα" ή συμπεριλάβετε το αρχείο χειροκίνητα.

      • A387 λέει:

        Καλά μπορώ να χρησιμοποιήσω μονάδες, κακό μου. Όμως, σας προτείνουμε autoloading πρέπει να εργαστούν; Λοιπόν, έχω να σκάψει σε αυτό λίγο βαθύτερα. Αυτή τη στιγμή μπορώ να χρησιμοποιήσω τη λειτουργία addPage στο BaseControllers, η οποία δεν είναι πραγματικά φιλική προς τις επιδόσεις ... hehe. Ευχαριστώ για την απάντησή σας.

  3. Μοντέλο μου ήταν φτιαγμένος για το αξίωμα, σωστά το όνομά του στον κώδικα είναι Pro_News και μπορεί να διαβαστεί από τον Autoloader.

    Μαντέψουν δεν χρησιμοποιείτε ενότητες; Αλλά εάν έτσι το μοντέλο σας θα πρέπει να ονομάζεται _News ZF για να πάρει από προεπιλογή (δεν χρησιμοποιώ τον εαυτό μου αυτό το σύστημα).

    Θα πρότεινα τον έλεγχο της περιλαμβάνουν διαδρομή από τη μέθοδο bootstrap σας για να δείτε εάν περιέχει "application / μοντέλα" ή συμπεριλάβετε το αρχείο χειροκίνητα.

Αφήστε μια απάντηση













Θέμα Πανόραμα από Themocracy

6 επισκέπτες online τώρα
5 επισκέπτες, 1 bots, 0 μέλη
Max επισκέπτες σήμερα: 11 στις 12:15 π.μ. UTC
Αυτό το μήνα: 52 στις 18-06-2011 03:11 π.μ. UTC
Αυτό το έτος: 130 στις 28-03-2011 22:40 UTC
Όλα ώρα: 130 στις 28-03-2011 22:40 UTC