2012-09-02 73 views
1

我想設置自定義的PHP變量,可以在我的drupal主題(html.tpl.php,page.tpl.php等)中使用我需要基於$節點的標題。我不是Drupal工作方式,模塊和鉤子方面的專家,我只需要知道最簡單/最簡單的方法來完成此任務。我一直在閱讀關於在template.php文件中實現某種鉤子的地方,你可以在其中設置變量,但是我已經試過了我所做的所有事情。爲Drupal 7主題文件設置PHP變量

所以,基本上,你將如何做到這一點:節點的

  1. 得到$標題
  2. 將被一起傳遞到主題文件(例如設置變量,做基本的東西,如:如果( $標題== 'news_page'){$ siteSection = 「新聞」;})
  3. 有$ siteSection可在主題文件中使用

任何幫助將是巨大的..謝謝!

回答

2

在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可能會對您有所幫助。