2011-09-18 73 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