Php 没有调用Drupal主题函数?

Php 没有调用Drupal主题函数?,php,drupal,drupal-modules,drupal-theming,Php,Drupal,Drupal Modules,Drupal Theming,我是Drupal新手,尝试创建一个主题函数,为我的视频创建一个小iframe。我正在调用菜单回调函数中的函数。问题是没有调用主题函数。我试图在主题函数的开头添加模块名,但也删除了,但没有任何帮助。每次进行更改并在我的devel模块中启用回溯时,我都会清除缓存,并看到以下警告: 警告:call\u user\u func\u array()要求参数1是有效的 回调,函数“mymodule\u mobile\u mymodue\u mobile\u build\u iframe”不是 在call_u

我是Drupal新手,尝试创建一个主题函数,为我的视频创建一个小iframe。我正在调用菜单回调函数中的函数。问题是没有调用主题函数。我试图在主题函数的开头添加模块名,但也删除了,但没有任何帮助。每次进行更改并在我的devel模块中启用回溯时,我都会清除缓存,并看到以下警告:

警告:call\u user\u func\u array()要求参数1是有效的 回调,函数“mymodule\u mobile\u mymodue\u mobile\u build\u iframe”不是 在call_user_func_array()中找到函数名或函数名无效(第656行,共页 /var/www/includes/theme.inc)。=>

function my\u callback\u function(){
$output=theme('mymodule\u mobile\u build\u iframe',数组(
“arg1”=>$stream,
'arg2'=>$node->nid,)
);
返回$output
}
函数mymodule_mobile_theme(){
返回数组(
“mymodule\u mobile\u build\u iframe”=>阵列(
'参数'=>数组(
“arg1”=>NULL,
'arg2'=>NULL,),),),);
}
函数主题\u mymodule\u mobile\u构建\u iframe($arg1,$arg2){
$host=http://www.myhost.com';
$output=
您的浏览器不支持视频标记。
';
返回$output;
}

提前谢谢大家

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

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

我怀疑这是一个简单的命名问题;您的模块名为
mymodule
还是
mymodule\u mobile
?这将与模块的
.info
文件同名(显然减去
.info

如果名为
mymodule
,则只需将主题挂钩更改为
mymodule\u theme()
。所有Drupal钩子都是MODULENAME\u HOOKNAME(),如果您的模块被调用
mymodule
Drupal将期望查找名为
mymodule\u theme()
的主题钩子函数

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

如果您确实看到
test
消息,但它仍然不起作用,我建议它指示其他地方存在问题,那么您的其余代码看起来很正确

编辑
我刚刚在一条评论中注意到您正在使用一个模板文件……我认为这样做有点混乱,您需要在从
hook\u theme()
返回的数组中使用
template
键。你能澄清一下吗?

我怀疑这是一个简单的命名问题;您的模块名为
mymodule
还是
mymodule\u mobile
?这将与模块的
.info
文件同名(显然减去
.info

如果名为
mymodule
,则只需将主题挂钩更改为
mymodule\u theme()
。所有Drupal钩子都是MODULENAME\u HOOKNAME(),如果您的模块被调用
mymodule
Drupal将期望查找名为
mymodule\u theme()
的主题钩子函数

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

如果您确实看到
test
消息,但它仍然不起作用,我建议它指示其他地方存在问题,那么您的其余代码看起来很正确

编辑
我刚刚在一条评论中注意到您正在使用一个模板文件……我认为这样做有点混乱,您需要在从
hook\u theme()
返回的数组中使用
template
键。你能澄清一下吗?

是的,我已经清除了缓存,事实上我已经在devel模块中检查过它是自动的。我必须提到,我使用的模板文件中只有print$内容,没有任何条件或任何东西。为什么它说找不到函数?是的,我已经清除了缓存,事实上我已经在devel模块中检查了它是否是自动的。我必须提到,我使用的模板文件中只有print$内容,没有任何条件或任何东西。为什么它说找不到函数?我实际上已经通过回显字符串测试了hook_theme()是否被调用。我的模块称为mymodule_mobile。问题是没有调用theme\u mymodule\u mobile\u build\u iframe。此外,我还尝试了hook_主题中的模板键。我正在使用“移动工具”,根据移动设备的大小切换主题。在本例中,我将我的用户代理设置为iPhone,因此,系统将主题从theme1切换到theme2。这可能是问题的根源吗?等等,这是Drupal 7吗?如果是这样,则主题函数应该具有
变量
键,而不是
参数
键。如果是Drupal 6,则在
my\u callback\u function()
中将参数错误地传递给主题。如果是Drupal 7,没有钩子数组中的
变量
呈现元素
,主题注册表将忽略该项,并且不会注册主题函数。我认为这会导致你的问题!!我正在使用Drupal6。但是,我无法在我的回调函数()中指出问题所在。实际上,我已经通过回显字符串测试了hook主题()是否被调用。我的模块是呼叫
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;
}