在Drupal爲主題模板(.tpl.php文件)中的頁面構建HTML之前,它會運行預處理「鉤子」。鉤子基本上是一個函數的命名約定,可以讓模塊和主題覆蓋或「掛鉤」到Drupal核心流程上。
例如,如果您想在登錄時向用戶顯示消息,則可以使用hook_user_login
。
function MODULENAME_user_login(&$edit, $account) {
drupal_set_message("Welcome, ". $account->name);
}
當用戶登錄時,Drupal的查找,在「_user_login」結束所有加載功能,運行他們。如果此功能位於啓用的模塊中,則它已加載,所以它也會運行。
如果要在page.tpl.php
文件中創建一個名爲$site_section
的變量,可以將其掛接到template_preprocess_page
。這是一個主題鉤子,所以名稱有點不同,但功能幾乎相同。要從主題中調用此鉤子,您需要在主題目錄中創建一個名爲template.php
的文件。裏面template.php
,我們將添加:
<?php
function THEMENAME_preprocess_page(&$vars){
switch (drupal_strtolower($vars['node']->title)) {
case "about page":
$site_section = "about";
break;
case "news page":
case "news page1":
case "news page2":
$site_section = "news";
break;
default:
$site_section = "none";
break;
}
$vars['site_section'] = $site_section;
}
的<?php
是用來告訴服務器把所有的程序代碼的PHP。然後我們聲明我們的鉤子函數,意圖將Drupal的頁面變量數組加載到名爲$vars
的局部變量中。通過在$vars
之前添加&
,我們將被允許修改在該函數外部使用的值。
switch語句將讓我們有效地測試多個值的頁面標題。節點標題的值可能包含大寫字母,小寫字母和符號,因此爲了避免區分大小寫的不匹配,我們將標題轉換爲小寫字母,然後僅測試它(符號仍然在標題中,儘管)。在switch語句之後,我們將我們的$site_section
本地值的值設置爲參考$vars
陣列以用於page.tpl.php
。
但是,如果您只是打算爲了主題目的而將網站分成多個部分,還有其他方法可以實現此目的。 My answer to a similar situation a few months ago可能會對您有所幫助。