Dinamik menambah laman untuk kontena Zend_Navigation pada saat runtime
Dalam kelanjutan di posting terakhir saya tentang Zend_Navigation, permintaan Rute untuk sitemap.xml untuk kawalan tersuai / tindakan , posting ini adalah tentang dymnamically menambah halaman ke bekas Zend_Navigation saat runtime / eksekusi script.
Its semua baik dan bagus menentukan laman anda dalam Suami atau xml file tetapi pada beberapa titik anda akan memiliki laman berubah di laman anda yang anda inginkan sebagai sebahagian daripada sitemap, menu, atau untuk dimasukkan dalam jejak breadcrumb anda. Oleh kerana itu apa yang perlu kita lakukan adalah menambah laman untuk kontena Zend_Navigation kami pada saat runtime. Contoh untuk ini akan dalam menambah item berita, posting blog, atau komentar laman, dll
Dalam contoh ini saya akan menambahkan beberapa posting berita untuk Suami saya didefenisikan secara statik config. Untuk mendapatkan tatarajah berita laman posting saya telah menggunakan kelas yang mengembalikan array dalam format berikut:
$ PagesToAdd array = ( 0 => array ( 'Label' => 'Fake berita cerita # 5 ...', 'Modul' = 'www'>, 'Rute' => 'www-indeks', 'Action' 'view' =>, 'Controller' 'berita' =>, 'Params' => array ( 'Id' => '5-Fake-news-cerita - 5 ') ), 1 => array (/ * Lebih halaman butiran * /), );
Ketika anda akan melihat bahawa fungsi tersebut telah kembali array dalam array yang mengandungi yang membentuk tatarajah array untuk Zend_Navigation_Page_Mvc. Oleh itu, dengan perulangan atas laman Zend_Navigation array baru boleh dibuat dari array config. Hal berikutnya yang harus dilakukan sebagai sebahagian daripada loop adalah untuk menambah halaman dalam kedudukan yang betul (alternatif laman boleh ditambah dalam massa dengan menggunakan - addPages> () method).
Untuk melakukan hal ini, cari halaman yang anda ingin tambah sub-halaman dan cukup tambah halaman. Dalam hal ini saya telah menggunakan kod berikut untuk mencari halaman saya:
$ Wadah-> findOneBy ('label', 'Latest News') -> addPage ($ halaman); keseluruhan navigation saya inisialisasi dalam Bootstrap itu sehingga kelihatan seperti ini:
/ ** * Digunakan untuk pengendalian navigasi ke atas tahap * * @ Return Zend_Navigation * / fungsi dilindungi _initNavigation () { $ This-> Bootstrap ('layout'); $ Layout = $ this getResource-> ('layout'); $ View = getView $ layout-> (); $ Config = new Zend_Config_Ini ( APPLICATION_PATH. '/ Configs / navigation.ini', APPLICATION_ENV); $ Container = Zend_Navigation baru (default $ config->); / / Sekarang tambah 25 laporan terkini berita $ Berita Berita = new (); $ Laman = $ getNavigationEntries berita-> (); foreach ($ halaman AS $ halaman) { $ Laman Zend_Navigation_Page_Mvc = baru ($ halaman); $ Wadah-> findOneBy ('label', 'Latest News') -> addPage ($ halaman); } $ View-> navigation ($ kontena); }
Pada hal yang perlu ditambah adalah beberapa bentuk caching (menggunakan Zend_Cache mungkin;)) jika ini akan menjadi cukup mahal dengan masing-masing memuatkan laman.


















































Itulah apa yang saya sedang mencari - terima kasih untuk contoh yang benar-benar jelas. Cheers. G
Nice posting! Saya sudah beberapa masalah memulakan kelas model di Bootstrap itu. Setiap tahu kenapa aplikasi / model kelas yang tidak boleh diperolehi daripada Bootstrap itu? 'Berita baru ()' kelas anda disebut, bukan saya ingin menambah halaman navigasi dengan mendapatkan pohon navigation dari sebuah kelas model. Jika anda punya ide, tolong beritahu saya! ;)
model saya diedit untuk posting, nama yang betul pada kod tersebut Pro_News dan dijemput oleh AUTOLOADER tersebut.
Meneka anda tidak menggunakan modul? Tetapi jika sehingga model anda harus disebut _News untuk ZF untuk memuat secara lalai (saya tidak menggunakan sistem sendiri).
Saya cadangkan menyemak path include daripada kaedah Bootstrap anda untuk melihat apakah mengandung "aplikasi / model" atau include fail secara manual.
Yah saya menggunakan modul, buruk saya. Tapi anda menyarankan autoloading harus bekerja? Yah, aku menggali ke dalamnya sedikit lebih dalam. Saat ini saya menggunakan fungsi addPage di BaseControllers, yang tidak benar-benar prestasi ramah ... hehe. Terima kasih untuk balasan anda.
Pastikan modul model anda diberi nama dengan benar _News (Misalnya) dan harus mengambil menggunakan autoloading.