Drupal主题功能不叫?
我是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;
}
谢谢大家提前!
我看不出有任何问题,我们的代码(我没有测试它),但是你确定你已清除缓存...请清空缓存并告诉我,如果这个问题仍然存在
我会怀疑这是一个简单的命名问题;你的模块叫做mymodule
还是mymodule_mobile
?这将与您的模块的.info
文件(显然减去.info
)的名称相同。
如果它被称为mymodule
那么你只需要改变你的主题钩子名为mymodule_theme()
。所有的Drupal钩子都是MODULENAME_HOOKNAME(),如果你的模块叫做mymodule
Drupal会期待寻找一个名为mymodule_theme()
的主题钩子函数。
最简单的测试是将行drupal_set_message('test');
作为主题挂钩函数的第一行并清除缓存。如果您没有看到test
消息输出到屏幕,您的挂钩功能尚未运行,并且其命名不正确。
如果你确实看到test
消息,但它仍然不起作用,我建议它表示其他地方的问题,其余的代码看起来很明显。
编辑 我只注意到你正在使用的模板文件的注释......我觉得有一些混乱,这样做你需要有template
键的排列从hook_theme()
返回。你能澄清一下吗?
我已经测试过,看看hook_theme()是否被回调一个字符串调用。我的模块叫做mymodule_mobile。 probelem是theme_mymodule_mobile_build_iframe没有被调用。另外,我也在我的hook_theme中尝试了模板密钥。我正在使用根据移动设备大小切换主题的“移动工具”。在这种情况下,我将我的用户代理设置为iPhone,因此系统将主题从theme1切换到theme2。这可能是问题的根源吗? – jax
挂在这是Drupal 7吗?如果是的话,你的主题函数应该有'variables'键而不是'arguments'键。如果是Drupal 6,那么你在'my_callback_function()'中错误地将参数传递给主题。如果是Drupal 7,在钩子数组中没有'variables'或'render element',主题注册表将忽略该条目,并且不会注册主题函数。我认为这会导致你遇到的问题! – Clive
我正在使用Drupal 6.但是,我无法在my_callback_fucntion()中指出问题。 – jax
是的我已经清除了缓存,实际上我已经在devel模块中检查了它是自动的。我不得不提到,我使用的模板文件只包含print $内容,没有条件或任何内容。它怎么说这个功能没有找到? – jax