Dinamis menambahkan halaman untuk kontainer Zend_Navigation pada saat runtime

Dengan Watkin Lloyd Steven , Kamis 7 Januari 2010 22:50

Dalam kelanjutan di posting terakhir saya tentang Zend_Navigation, permintaan Rute untuk sitemap.xml untuk kontrol kustom / tindakan , posting ini adalah tentang dymnamically menambahkan halaman ke wadah Zend_Navigation saat runtime / eksekusi script.

Its semua baik dan bagus menentukan halaman Anda dalam Suami atau xml file tetapi pada beberapa titik Anda akan memiliki halaman berubah di situs Anda yang Anda inginkan sebagai bagian dari sitemap, menu, atau untuk dimasukkan dalam jejak breadcrumb Anda. Oleh karena itu apa yang perlu kita lakukan adalah menambahkan halaman untuk kontainer Zend_Navigation kami pada saat runtime. Contoh untuk ini akan dalam menambahkan item berita, posting blog, atau komentar halaman, dll

Dalam contoh ini saya akan menambahkan beberapa posting berita untuk Suami saya didefenisikan secara statis config. Untuk mendapatkan konfigurasi berita halaman 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 rincian * /),
  ); 

Ketika Anda akan melihat bahwa fungsi tersebut telah kembali array dalam array yang berisi yang membentuk konfigurasi array untuk Zend_Navigation_Page_Mvc. Karena itu, dengan perulangan atas halaman Zend_Navigation array baru dapat dibuat dari array config. Hal berikutnya yang harus dilakukan sebagai bagian dari loop adalah untuk menambahkan halaman dalam posisi yang benar (alternatif halaman dapat ditambahkan dalam massal dengan menggunakan - addPages> () method).

Untuk melakukan hal ini, cari halaman yang anda ingin tambahkan sub-halaman dan cukup tambahkan halaman. Dalam hal ini saya telah menggunakan kode berikut untuk menemukan halaman saya:

  $ Wadah-> findOneBy ('label', 'Latest News') -> addPage ($ halaman); 

keseluruhan navigasi saya inisialisasi dalam bootstrap itu sehingga terlihat seperti ini:

  / **
      * Digunakan untuk penanganan navigasi atas tingkat
      *
      * @ 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 tambahkan 25 laporan terakhir berita
         $ Berita Berita = new ();
         $ Halaman = $ getNavigationEntries berita-> ();
         foreach ($ halaman AS $ halaman) {
        	 $ Halaman Zend_Navigation_Page_Mvc = baru ($ halaman);
        	 $ Wadah-> findOneBy ('label', 'Latest News') -> addPage ($ halaman);
         }
         $ View-> navigasi ($ kontainer);
     } 

Pada hal yang perlu ditambahkan adalah beberapa bentuk caching (menggunakan Zend_Cache mungkin;)) jika ini akan menjadi cukup mahal dengan masing-masing memuat halaman.

5 Responses to "dinamis menambahkan halaman untuk kontainer Zend_Navigation pada saat runtime"

  1. Mr Man mengatakan:

    Itulah apa yang saya sedang mencari - terima kasih untuk contoh yang benar-benar jelas. Cheers. G

  2. A387 mengatakan:

    Nice posting! Saya sudah beberapa masalah memulai kelas model di bootstrap itu. Setiap tahu kenapa aplikasi / model kelas yang tidak tersedia dari bootstrap itu? 'Berita baru ()' kelas Anda disebut, bukan saya ingin menambahkan halaman navigasi dengan mendapatkan pohon navigasi dari sebuah kelas model. Jika Anda punya ide, tolong beritahu saya! ;)

    • Steven Lloyd Watkin mengatakan:

      model saya diedit untuk posting, nama yang benar pada kode tersebut Pro_News dan dijemput oleh autoloader tersebut.

      Menebak Anda tidak menggunakan modul? Tetapi jika sehingga model Anda harus disebut _News untuk ZF untuk mengambil secara default (saya tidak menggunakan sistem sendiri).

      Saya sarankan memeriksa path include dari metode bootstrap Anda untuk melihat apakah mengandung "aplikasi / model" atau include file secara manual.

      • A387 mengatakan:

        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 kinerja ramah ... hehe. Terima kasih untuk balasan Anda.

Tinggalkan Balasan













Panorama Tema oleh Themocracy

9 pengunjung online sekarang
6 tamu, 3 bots, 0 anggota
Max pengunjung hari ini: 15 jam 08:24 UTC
Bulan ini: 26 jam 2011/07/05 00:35 UTC
Tahun ini: 130 pada 28-03-2011 10:40 UTC
Sepanjang waktu: 130 pada 28-03-2011 10:40 UTC