Posted by jcisio on July 7, 2008 at 5:49pm
Có khá nhiều module trình bày menu theo ý mình, như Simple Menu, Nice Menus, Taxonomy Menu... nhưng chúng quá cồng kềnh. Trong Drupal lại có chức năng theme rất mạnh, có thể dùng để trình bày lại menu. Nhưng mà không biết làm cách nào ?
Lệnh
<?php
print theme('links', ... $primary_links);
?><?php
print $region;
?>
Comments
Khi gọi theme ('foo') thì
Khi gọi theme ('foo') thì Drupal sẽ gọi các hàm theo thứ tự:
themename_foo =>phptemplate_foo (đúng phải là templatename_foo) =>theme_foođể trình bày nội dung.
Vậy, muốn handle cái theme ('link'), chỉ cần tạo hàm themename_links, và copy nội dung của hàm cũ vào đó, chỉnh nội dung hàm để có kết quả theo ý muốn.
Có một điều mà các hàm giao diện Drupal làm rất tốt: Cung cấp khá chi tiết class & ID, dựa vào các class và ID này, tha hồ mà chỉnh. Nhiều lúc bí về CSS quá thì có thể lạm dụng JS một chút.
--
Thế Hồng
Cái theme('links'...) thì
Cái theme('links'...) thì chỉnh được, nhưng vì $primary_links đưa vào đó chỉ có 1 cấp nên không dùng được. khi làm 2 hàng menu. Vậy mới nhảy qua cái cách tạo region rồi trong file template "print $region".
$region dùng định dạng chuẩn cung cấp bởi Drupal, class & id chi tiết nhưng bị cái nó theo cấu trúc < span>< span>< a>text< /a>< /span>< /span> mà mình thì lại cần kiểu < a>< span>text< /span>< /a> để trình bày cạnh, góc cho mấy cái menu :( Tất nhiên, vài dòng regexp để chuyển giá trị trong $region theo cách của mình là xong, nhưng nếu có cách thao tác trên dữ liệu chưa định dạng thì phải tốt hơn rồi.
--
[vi] www.thongtincongnghe.com
Trang tin điện tử về CNTT, Viễn thông, Điện tử...
Có override nói ở trên
Cái override nói ở trên TH đã nhầm với Drupal 5. Drupal 6, sử dụng theme registry, TH chỉ mới học sử dụng hook_theme để override, còn về override = theme cụ thể như thế nào thì chưa có làm. Sorry, TH đang maintainance các site Drupal 5, học thêm Drupal 6 nên có hơi loạn :-(
Chủ đề của topic này nên là "sử dụng primary links" đa cấp hay cái chi chi, chứ "Theme + Menu trong Drupal 6?" thấy nó lạc lạc làm sao í nhỉ?
TH có search trong api.drupal.org từ khoá "primary" thỉ lòi ra hàm "menu_primary_links" => mò tới "menu_navigation_links" thì thấy nó có tham số đầu vào là $level, không rõ tham số làm gì? Thấy "menu_secondary_links" có gọi hàm này và truyền vào $level = 1 nếu như primary links source == secondary links source.
--
Thế Hồng
Tiêu đề như vậy bởi
Tiêu đề như vậy bởi vì không phải chỉ dùng riêng cho primary links. Tạo bất kì menu nào cũng được, rồi tìm cách hiển thị nó trong menu ngang. Vấn đề là theme cái menu này.
Hàm menu_navigation_links có lí đó, mặc dù nó can thiệp hơi sâu và để config được trong admin thì phải viết thêm code. Có lẽ các module tạo menu đều dùng hàm này. Tối nay về sẽ nghiên cứu. Không rõ primary/secondary links source là cái gì (k° phải mỗi menu có source riêng, mình add item vào từng cái, trừ những cái được thêm tự động từ các module ?), nhưng trong hàm menu_navigation_links thì $level cho biết cấp tối đa sẽ hiển thị (duyệt từ cấp đó trở lên).
--
[vi] www.thongtincongnghe.com
Trang tin điện tử về CNTT, Viễn thông, Điện tử...
Không rõ primary/secondary
Menu soruces là các giá trị được cấu hình từ biểu mẫu này: /?q=admin/build/menu/settings
--
Thế Hồng
Đính chính lại là cái
Đính chính lại là cái $level chỉ lấy duy nhất menu cấp đó mà thôi.
Tối hôm qua về làm thì thấy có thể bắt chước nice_menus được, dùng hàm menu_tree_page_data() để lấy toàn bộ dữ liệu về menu rồi xử lí. Nhưng vẫn không thể đè lên cái theme chuẩn để tạo link dạng "< a...>title< /a>" được (chắc là được, trong template thì register (D6 đòi register các hook theme), cũng như module devel nó override toàn bộ các hook theme để chèn span vào).
Thôi chọn cách dễ nhất là lấy dữ liệu có sẵn (tạo 1 region tên là 'nav' chứa menu) rồi sửa lại, cũng chưa hoàn chỉnh lắm, nhưng về mặt trình bày ok:
<?php$nav = preg_replace('/\<div.<em>?\>/', '', $nav);
$nav = preg_replace('/<\/div>/', '', $nav);
$nav = preg_replace('/ class="menu"/', '', $nav);
$nav = str_replace(array('leaf', 'collapsed', 'expanded', 'first', 'last'), '', $nav);
$nav = preg_replace('/(\<a .</em>?\>)(.*?)\<\/a\>/', '\1<span>\2</span></a>', $nav);
?>
--
[vi] www.thongtincongnghe.com
Trang tin điện tử về CNTT, Viễn thông, Điện tử...
cho em hỏi về hàm
cho em hỏi về hàm preg_match() và preg_replace() 1 cái 2 hàm này dùng để làm gì và no có thuộc vào các hàm của drupal ko? và tham số nó như thế nào
Chase me if you can, but i will not stand alone.
Các hàm này thuộc
Các hàm này thuộc PHP:
http://php.net/preg_match
http://php.net/preg_replace
Hiện menu sau khi download các template về
Hầu hết những người mới dùng Drupal đều gặp một chuyện là khi mới download template về thì kích hoạt nó lên thì giao diện không giồng như template có sẵn. Các bạn có thể làm như sau:
Vào phần quản trị hệ thống-> cấu trúc hệ thống-> menu-> priamry links -> thêm mục
Bạn có thể thêm những tiêu đề như ý muốn. Giờ quay lại trang chủ, bạn sẽ thấy nó hiện ra. Với người đã quen sử dụng drupal thì thấy đơn giản, nhưng vì cái này mà mình tìm suổt hai ngày không thấy ai hướng dẫn, nên sau khi tìm hiểu mình làm được thì mình up lên. Hi vọng nó sẽ có ích. Các bạn mà dùng template defaut thì khi chọn nativation đảm bảo không hiện ra muốn nó hiện ra thì vào phần block kích hoạt nó lên. Cái này mình cũng chưa thử nữa
Hãy xây dựng Drupal đánh bại Joomla. Chỉ có những người đẳng cấp mới có thể dùng đựơc Drupal mà thôi!!!!!!!!!!!!!!!!!!!!!
Hướng dẫn giùm mình cách tạo mới một menu ngang theo css riêng
Hi các bạn,
Mình chỉ mới tìm hiểu Drupal nên không rành lắm nên mong các bạn giúp đỡ.
Mình cũng có một cái menu giống bạn jcisio, cần kiểu < a>< span>text< /span>< /a> để trình bày cạnh, góc bo tròn cho mấy cái menu nhưng không biiết cách thức khai báo hoặc viết hàm như thế nào. Mong các bạn giúp đỡ.
Đây là source html của mình:
Các bác dùng preg_replace thì
Các bác dùng preg_replace thì làm chậm trang lắm, theo em thì nên chơi javascript thì hơn, nhanh gọn ! kết hợp cùng html thì menu cứ gọi là long lanh !
My blog: Jamviet.com, Hỏi đáp trực tuyến, váy dài