Tự động thêm các trang để Zend_Navigation container trong thời gian chạy
Trong một sự tiếp nối về bài đăng cuối cùng của tôi về Zend_Navigation, Tuyến yêu cầu sitemap.xml để điều khiển tùy chỉnh / hành động , bài này là về dymnamically thêm vào trang vào một container Zend_Navigation tại / thực hiện kịch bản thời gian chạy.
tất cả của nó tốt và tốt quy định cụ thể các trang của bạn trong một ini hoặc xml file, nhưng tại một số điểm bạn sẽ có các trang thay đổi vào trang web của bạn mà bạn muốn như là một phần của một sơ đồ trang web, trình đơn, hoặc để đưa vào đường mòn mẩu bánh mì của bạn. Vì vậy những gì chúng ta cần làm là thêm các trang để chứa Zend_Navigation của chúng tôi trong thời gian chạy. Ví dụ cho điều này sẽ được bổ sung thêm các mục tin tức, viết blog, hoặc ý kiến trang, vv
Trong ví dụ này tôi sẽ thêm một số bài viết tin tức cho ini tĩnh định nghĩa của tôi cấu hình. Để có được cấu hình tin tức bài viết của tôi trang tôi đã sử dụng một lớp học mà trả về một mảng trong các định dạng sau:
$ PagesToAdd = array ( 0 => array ( 'Nhãn' => 'giả tin câu chuyện # 5 ...', 'Module' => 'www', 'Đường' => 'www-index, 'Hành động' => 'xem', 'Điều khiển' => 'tin', 'Params' => array ( 'Id' => '5-giả-tin-câu chuyện - 5 ') ), 1 => array (/ * Các trang chi tiết * /), );
Như bạn sẽ nhận thấy rằng chức năng đã trả lại một mảng, trong đó có chứa các mảng tạo nên cấu hình các mảng cho Zend_Navigation_Page_Mvc. Vì vậy, bằng cách lặp qua các trang mảng Zend_Navigation mới có thể được tạo ra từ các mảng cấu hình. Điều tiếp theo cần làm là một phần của vòng này là để thêm các trang ở vị trí đúng (hoặc các trang web có thể được thêm vào với số lượng lớn bằng cách sử dụng - addPages> () phương pháp).
Để làm điều này, xác định vị trí các trang web mà bạn muốn thêm các phụ trang và chỉ cần thêm các trang. Trong trường hợp này tôi đã sử dụng các mã sau đây để tìm trang web của tôi:
$ Container-> findOneBy ('nhãn', 'Tin tức mới nhất') -> addPage (trang); tổng thể khởi động trong khởi động điều hướng của tôi do đó trông như thế này:
/ ** * Sử dụng để xử lý cấp cao nhất chuyển hướng * * @ Trả lại Zend_Navigation * / bảo vệ chức năng _initNavigation () { $ This-> khởi động ("bố trí"); $ Bố trí = $ this getResource-> ("bố trí"); $ Xem = $ bố trí-> getView (); $ Config = new Zend_Config_Ini ( APPLICATION_PATH. '/ Configs / navigation.ini', APPLICATION_ENV); $ Container = mới Zend_Navigation ($ config-> mặc định); / / Bây giờ thêm trong 25 báo cáo tin tức mới nhất $ Tin = mới Tin tức (); $ Pages = $ getNavigationEntries tin tức-> (); foreach ($ trang AS $ page) { $ Page = mới Zend_Navigation_Page_Mvc (trang); $ Container-> findOneBy ('nhãn', 'Tin tức mới nhất') -> addPage (trang); } $ View-> hướng (container); }
Ngày điều đó cần phải được thêm vào là một số hình thức của bộ nhớ đệm (sử dụng Zend_Cache có lẽ;)) nếu không thì sẽ là khá tốn kém với mỗi tải trang.


















































Đó chỉ là những gì tôi đang tìm kiếm - cảm ơn cho một ví dụ thực sự rõ ràng. Cheers. G
Nice post! Tôi đã một số rắc rối bắt đầu một lớp mô hình trong bootstrap. Bất kỳ đầu mối tại sao ứng dụng / mô hình các lớp học không có sẵn từ khởi động không? 'Tin tức mới ()' được gọi là lớp học của bạn, thay vào đó tôi muốn thêm các trang chuyển hướng bằng cách một cây chuyển hướng từ một lớp mô hình. Nếu bạn có một ý tưởng, xin vui lòng cho tôi biết! ;)
mô hình của tôi đã được chỉnh sửa cho đăng bài, tên chính xác của nó trong các mã được Pro_News và được chọn của trình tự động load các.
Đoán bạn không sử dụng mô-đun? Nhưng nếu như vậy mô hình của bạn nên được gọi là _News cho ZF để nhận theo mặc định (tôi không sử dụng hệ thống này bản thân mình).
Tôi muốn đề nghị kiểm tra bao gồm các đường dẫn từ các phương pháp khởi động của bạn để xem nếu nó có chứa "ứng dụng / mô hình" hoặc bao gồm các tập tin bằng tay.
Tôi cũng sử dụng mô-đun, tôi xấu. Nhưng bạn đề nghị tự động load sẽ làm việc? Vâng, tôi đã thâm nhập vào nó một chút sâu hơn. Tại thời điểm này tôi sử dụng chức năng addPage trong BaseControllers, đó là không thực sự thân thiện hiệu suất ... hehe. Cảm ơn bạn đã trả lời của bạn.
Đảm bảo module mô hình của bạn có tên đúng _News (Ví dụ) và nó phải nhận bằng cách sử dụng tự động load.