Drupal系統的Views插件确實有着非常強大的功能,能實現各種數據庫查詢工作而又不用編寫程序代碼,所以我們在建站過程中也在不少地方用到Views。
用Views生成頁面的時候,涉及到頁面的Tilte,有多種情況記錄如下:
- 如果是固定的标題就很簡單,設定Views的标題就可以了;
- 如果是網址中帶有變量就可能需要頁面标題也變動,這時候可以在Views的标題中加入%1這樣的變量;
- 網站中帶有變量的情況下,還可以在Views中的Arguments處設置Title,其中加入%1、%2這樣的變量,這裡的設置可以覆蓋Views的Title設置;
- 如果希望Title不僅僅是直接嵌入變量,而是需要根據變量進行一定的變換,可以在Header中嵌入PHP程序,使用drupal_set_title($title);這樣的語句來設置頁面标題。
注意在最後一種情況下,不能設置Views的Caching來緩存Rendered output,Query results可以設置為6天,而需要把Rendered output設置為Never,否則刷新頁面的時候就不重複執行Header中的drupal_set_title語句,代之用Views中設置的Title從而引起錯誤。之前這個問題困擾了我好長時間,直到今天仔細檢查才解決。
2017年8月15日補充:drupal 6裡面有這個問題,但drupal 7有些不同,我又剛剛試了一下,在views的header裡面用drupal_set_title是無效的,breadcrumb也是在header裡面設置無效,我們在drupal 7裡面都是另外加block來設置title和breadcrumb的。所以Drupal 7裡面是可以把Rendered output,Query results都設置為6天,具體詳見《Views增加緩存降低數據庫服務器負載》。
2017年8月17日補充:Drupal 7的Views裡面Header添加Global: Text area (Provide markup text for the area.)使用PHP函數drupal_set_title($title); 無效,需要改為Header添加Global PHP (Use PHP code to construct the output of an area.,使用這種格式的内容需要安裝Views PHP模塊)使用PHP函數$view->set_title($title); 才行,這時用drupal_set_breadcrumb($breadcrumb); 也是有效的。
2017年8月18日補充:同事提醒後再次詳細查看,如果Rendered ouput緩存打開的話,隻有print $output;的内容可以被正常緩存下來,而使用PHP實現title/meta keywords/meta description設置的情況就不會重新執行了,導緻除了第一次訪問的時候title/meta keywords/meta description正确以外,刷新訪問就都不正确了,與是否登錄無關。
评论