Δυναμικά προσθέσετε σελίδες στο δοχείο Zend_Navigation κατά το χρόνο εκτέλεσης
Σε μια συνέχεια στην τελευταία θέση μου για 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 προφανώς?)) με άλλο τρόπο αυτό πρόκειται να είναι αρκετά ακριβά με κάθε φορτίο σελίδα.


















































Αυτό είναι ακριβώς αυτό που έψαχνα - ευχαριστίες για μια πραγματικά σαφές παράδειγμα. Cheers. G
Nice post! Έχω κάποιο πρόβλημα την έναρξη μιας τάξης μοντέλο της εκκίνησης. Οποιαδήποτε ιδέα γιατί εφαρμογή / μοντέλο τάξεις δεν είναι διαθέσιμα από το bootstrap; Τάξη σας ονομάζεται «νέα Ειδήσεις ()», αντί γι 'αυτό θα θέλατε να προσθέσετε τις σελίδες πλοήγησης με να πάρει ένα δέντρο πλοήγησης από μια τάξη μοντέλο. Εάν έχετε μια ιδέα, παρακαλώ ενημερώστε με! ?)
Μοντέλο μου ήταν φτιαγμένος για το αξίωμα, σωστά το όνομά του στον κώδικα είναι Pro_News και μπορεί να διαβαστεί από τον Autoloader.
Μαντέψουν δεν χρησιμοποιείτε ενότητες; Αλλά εάν έτσι το μοντέλο σας θα πρέπει να ονομάζεται _News ZF για να πάρει από προεπιλογή (δεν χρησιμοποιώ τον εαυτό μου αυτό το σύστημα).
Θα πρότεινα τον έλεγχο της περιλαμβάνουν διαδρομή από τη μέθοδο bootstrap σας για να δείτε εάν περιέχει "application / μοντέλα" ή συμπεριλάβετε το αρχείο χειροκίνητα.
Καλά μπορώ να χρησιμοποιήσω μονάδες, κακό μου. Όμως, σας προτείνουμε autoloading πρέπει να εργαστούν; Λοιπόν, έχω να σκάψει σε αυτό λίγο βαθύτερα. Αυτή τη στιγμή μπορώ να χρησιμοποιήσω τη λειτουργία addPage στο BaseControllers, η οποία δεν είναι πραγματικά φιλική προς τις επιδόσεις ... hehe. Ευχαριστώ για την απάντησή σας.
Βεβαιωθείτε ότι το μοντέλο μονάδα σας έχει το σωστό όνομα _News (Για παράδειγμα) και θα πρέπει να πάρει τη χρήση autoloading.
Μοντέλο μου ήταν φτιαγμένος για το αξίωμα, σωστά το όνομά του στον κώδικα είναι Pro_News και μπορεί να διαβαστεί από τον Autoloader.
Μαντέψουν δεν χρησιμοποιείτε ενότητες; Αλλά εάν έτσι το μοντέλο σας θα πρέπει να ονομάζεται _News ZF για να πάρει από προεπιλογή (δεν χρησιμοποιώ τον εαυτό μου αυτό το σύστημα).
Θα πρότεινα τον έλεγχο της περιλαμβάνουν διαδρομή από τη μέθοδο bootstrap σας για να δείτε εάν περιέχει "application / μοντέλα" ή συμπεριλάβετε το αρχείο χειροκίνητα.