2013-05-03 105 views
1

當我嘗試在drupal 7中聲明一個簡單的函數時出現奇怪的錯誤。我在模板文件的頂部聲明瞭一個函數(我知道,通常是一個no no,但我需要得到這些模板進行快速,沒有時間開發的功能模塊現在)所以我聲明在文件的頂部以下內容:函數聲明與自身衝突

1. function templateB_EventRegistrationNode($params = NULL) { 
2. /* code */ 
3. } 

然而,當我嘗試運行我得到模板出現以下錯誤

Fatal error: Cannot redeclare templateB_EventRegistrationNode() (previously declared in C:\wamp\www\vsi\sites\all\themes\vsi_new_template_b\templates\node.tpl.php:1) in C:\wamp\www\vsi\sites\all\themes\vsi_new_template_b\templates\node.tpl.php on line 3

(行號已更改爲匹配前充足)

任何人都有任何想法爲什麼第一行與函數的最後一行衝突?順便說一句,具有不同名稱的函數的副本在另一個模板中工作,所以代碼是有效的。

+2

可能是因爲模板文件可能包含多次,第二個包含導致錯誤。 – 2013-05-03 17:35:13

+2

行號是無關緊要的(正如你對這個例子模糊不清)。這是問題的功能重新宣佈。通過將它包裝在if(!function_exists(「...」)){「中來使用延遲定義。 – mario 2013-05-03 17:36:24

+0

真棒,謝謝你,指出我在正確的方向。 – matt 2013-05-03 17:39:46

回答

1

在Drupal中,主題模板文件使用的任何函數都應放在主題使用的template.php文件中。

@mario對錯誤是正確的,因爲該文件被多次包含,但如果將函數放在template.php文件中,錯誤將不會再出現,因爲它只包含一次。

模板文件的內容應該只是顯示輸出所需的代碼。

+0

我認爲這是一個新手的錯誤,沒有想到我添加了一個小函數就是我的* .tpl.php文件。奇怪的是,它在我的當地流浪者身上沒有錯誤,但在我的測試服務器上失敗。絕對是你不會做錯兩次的事情之一。 – Zoheir 2015-05-03 23:52:27