2010-10-15 31 views
1

所以我爲Drupal 6.x創建了一個自定義模塊,它可以工作,因爲我可以在page.tpl.php頁面中看到所需的結果,但是當我編輯一個頁面從GUI(它允許PHP標記),該對象不可訪問。Drupal自定義模塊對象無法從GUI訪問PHP標籤

我可以在SESSION中設置值,我可以從GUI和模塊訪問,但這是正確的方法嗎?

這裏是我的錯誤:

Fatal error: Call to a member function getEmail() on a non-object in /var/www/domain/includes/common.inc(1695) : eval()'d code on line 221 

Call Stack 
# Time Memory Function Location 
1 0.0003 64108 {main}() ../index.php:0 
2 0.0965 11659504 menu_execute_active_handler() ../index.php:18 
3 0.1040 12626908 call_user_func_array () ../menu.inc:348 
4 0.1040 12627316 node_page_view() ../menu.inc:0 
5 0.1040 12627532 node_show() ../node.module:1797 
6 0.1040 12627848 node_view() ../node.module:1101 
7 0.1040 12628192 node_build_content() ../node.module:1006 
8 0.1041 12648832 node_prepare() ../node.module:1085 
9 0.1041 12649112 check_markup() ../node.module:1041 
10 0.1047 12671980 module_invoke() ../filter.module:457 
11 0.1047 12693240 call_user_func_array () ../module.inc:462 
12 0.1047 12693900 php_filter() ../module.inc:0 
13 0.1048 12694164 drupal_eval() ../php.module:82 
14 0.1059 12883728 eval(''?> 

getEmail()是一類就是在我的自定義模塊的功能。我可以從page.tpl.php中調用它,那麼爲什麼我不能從我在Admin GUI中編輯過的頁面調用它?

編輯:

從模塊添加代碼:

//wrapperFunction() is calling the class and setting the values 
// this is just a getter/setter class w/ 1 function that formats a phone number, nothing special 
$custom = new CustomObj(); 
$custom->setEmail('[email protected],com'); 

return $custom; 

page.tpl.php中

// calls the wrapper function and returns the object 
$custom_obj = wrapperFunction(); 
echo $custom_obj->getEmail(); // this prints the email just fine 

編輯頁面通過管理GUI(允許PHP標籤) 將此代碼添加到該頁

<?php echo $custom_obj->getEmail(); ?> // throws the error 

很抱歉,這是我第一次Drupal的模塊,因此任何有識之士將是偉大的,因爲我也是第一次使用的Drupal,嘆息......

+1

你可以粘貼你調用getEmail()的代碼嗎? – 2010-10-15 19:47:17

回答

0

那麼要解決我的問題我把所有的邏輯到模塊和我想改變的領域我設定會議的蒼蠅。所以在page.tpl.php頁面中,我檢查了是否設置了SESSION值,如果使用了它,那麼使用默認值。通過使用SESSION,我能夠將所有期望的值傳遞到任何頁面,而不管頁面製作的位置(GUI或硬編碼)。

1

你應該儘量把片段

// calls the wrapper function and returns the object 
$custom_obj = wrapperFunction(); 
echo $custom_obj->getEmail(); // this prints the email just fine 

node.tpl.php代替page.tpl.php。 node.tpl.php在 page.tpl.php之前執行,所以你的錯誤出現在$ custom_obj不存在,因爲它只是在page.tpl.php中創建的(通過調用new的wrapperFunction())。

[我不知道你想要達到什麼目的。它通常不是一個好主意,你的tpl文件中有任何業務邏輯,你似乎在這裏...]

+0

@phill:做到了嗎? – 2010-10-17 20:26:03

+0

今天將進行測試,但是您能否告訴我在每個頁面上需要添加業務邏輯的位置?使用node.tpl.php而不是page.tpl.php會更好嗎?新創建模塊以及Drupal所以任何幫助在正確的方向 – 2010-10-18 13:21:01

+0

另外我使用我自己的主題,只是供參考如果更改你回答 – 2010-10-18 13:52:19