我是Drupal的新手,并尝试创建一个主题功能,为我的视频创建一个小iframe。我在菜单回调函数中调用该函数。问题是没有调用主题函数。我试图在主题函数的开头附加模块名称,也删除了它没有帮助。我每次进行更改时清除缓存并在我的开发模块中启用回溯,我看到以下警告:
警告:call_user_func_array()期望参数1有效 回调,函数'mymodule_mobile_mymodue_mobile_build_iframe'没有 在call_user_func_array()中找到或者无效的函数名称(第656行) /var/www/includes/theme.inc)。 =>
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 :(得分: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()
键。你能澄清一下吗?
答案 1 :(得分:0)
我没有看到你的代码有任何问题(我没有测试它),但你确定你已经清除了缓存...请清除缓存并告诉我这个问题是否仍然存在