2011-09-18 84 views
1

我是Drupal新手,嘗試創建一個主題功能,爲我的視頻創建一個小小的iframe。我在我的菜單回調函數中調用該函數。問題是沒有調用主題函數。我嘗試在主題函數的開始追加模塊名稱,並且也刪除了它,但沒有幫助。每次我進行更改,使回溯我devel的模塊時清除緩存和我看到下面的警告:Drupal主題功能不叫?

警告:call_user_func_array()預計參數1是一個有效的 回調函數「mymodule_mobile_mymodue_mobile_build_iframe」不 在call_user_func_array()中找到或無效的函數名稱( /var/www/includes/theme.inc中的第656行)。 =>

function my_callback_function(){ 
$output = theme('mymodule_mobile_build_iframe',array(
      'arg1'=> $stream, 
      'arg2'=> $node->nid,) 
       ); 
return $output 

} 
function mymodule_mobile_theme(){ 

     return array(
     'mymodule_mobile_build_iframe' => array(
     'arguments' => array(
     'arg1' => NULL, 
     'arg2' => NULL,),),); 
} 

function theme_mymodule_mobile_build_iframe($arg1,$arg2){ 

    $host = 'http://www.myhost.com'; 

    $output = '<video width="320" height="240" controls="controls"> <source src= 
     "'.$host.'/'.$arg1.'/'.$arg2.'/playlist.m3u8" type="video/mp4" /> 
     Your browser does not support the video tag. 
     </video>'; 

    return $output; 
} 

謝謝大家提前!

回答

0

我看不出有任何問題,我們的代碼(我沒有測試它),但是你確定你已清除緩存...請清空緩存並告訴我,如果這個問題仍然存在

+0

是的我已經清除了緩存,實際上我已經在devel模塊中檢查了它是自動的。我不得不提到,我使用的模板文件只包含print $內容,沒有條件或任何內容。它怎麼說這個功能沒有找到? – jax

1

我會懷疑這是一個簡單的命名問題;你的模塊叫做mymodule還是mymodule_mobile?這將與您的模塊的.info文件(顯然減去.info)的名稱相同。

如果它被稱爲mymodule那麼你只需要改變你的主題鉤子名爲mymodule_theme()。所有的Drupal鉤子都是MODULENAME_HOOKNAME(),如果你的模塊叫做mymodule Drupal會期待尋找一個名爲mymodule_theme()的主題鉤子函數。

最簡單的測試是將行drupal_set_message('test');作爲主題掛鉤函數的第一行並清除緩存。如果您沒有看到test消息輸出到屏幕,您的掛鉤功能尚未運行,並且其命名不正確。

如果你確實看到test消息,但它仍然不起作用,我建議它表示其他地方的問題,其餘的代碼看起來很明顯。

編輯 我只注意到你正在使用的模板文件的註釋......我覺得有一些混亂,這樣做你需要有template鍵的排列從hook_theme()返回。你能澄清一下嗎?

+0

我已經測試過,看看hook_theme()是否被回調一個字符串調用。我的模塊叫做mymodule_mobile。 probelem是theme_mymodule_mobile_build_iframe沒有被調用。另外,我也在我的hook_theme中嘗試了模板密鑰。我正在使用根據移動設備大小切換主題的「移動工具」。在這種情況下,我將我的用戶代理設置爲iPhone,因此係統將主題從theme1切換到theme2。這可能是問題的根源嗎? – jax

+0

掛在這是Drupal 7嗎?如果是的話,你的主題函數應該有'variables'鍵而不是'arguments'鍵。如果是Drupal 6,那麼你在'my_callback_function()'中錯誤地將參數傳遞給主題。如果是Drupal 7,在鉤子數組中沒有'variables'或'render element',主題註冊表將忽略該條目,並且不會註冊主題函數。我認爲這會導致你遇到的問題! – Clive

+0

我正在使用Drupal 6.但是,我無法在my_callback_fucntion()中指出問題。 – jax