没有调用Drupal主题功能?

时间:2011-09-18 18:36:35

标签: php drupal drupal-modules drupal-theming

我是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;
}

提前谢谢大家!

2 个答案:

答案 0 :(得分:1)

我怀疑这是一个简单的命名问题;是您的模块mymodulemymodule_mobile?这将与模块的.info文件名称相同(显然减去.info)。

如果它被称为mymodule,那么您只需要将主题钩子更改为名为mymodule_theme()。所有Drupal挂钩都是MODULENAME_HOOKNAME(),如果你的模块被调用mymodule Drupal期望找到一个名为mymodule_theme()的主题钩子函数。

最简单的测试是将行drupal_set_message('test');作为主题钩子函数的第一行并清除缓存。如果您没有看到test消息输出到屏幕,则挂钩功能未运行,并且未正确命名。

如果您确实看到了test消息,但仍然无效,我建议它在其他地方显示问题,其余代码看起来就是正确的。

修改 我刚刚在评论中注意到你正在使用模板文件...我认为这样做有些困惑你需要在template返回的数组中使用hook_theme()键。你能澄清一下吗?

答案 1 :(得分:0)

我没有看到你的代码有任何问题(我没有测试它),但你确定你已经清除了缓存...请清除缓存并告诉我这个问题是否仍然存在