我创建了一个名为finder的模块,我想从网址中获取参数,将它们压缩,然后通过tpl文件显示结果。这是相关的功能......
function finder_menu()
{
$items = array();
$items['finder'] = array(
'page callback' => 'finder_view',
'access callback' => TRUE,
);
return $items;
}
function finder_theme($existing, $type, $theme, $path)
{
return array(
'finder_view' => array(
'variables' => array('providers' => null),
'template' => 'results',
),
);
}
function finder_preprocess_finder_view(&$variables)
{
// put my data into $variables
}
function finder_view($zipcode = null)
{
// Get Providers from Zipcode
return theme('finder_view', $providers);
}
现在我知道正在调用finder_view。我也知道正在调用finder_preprocess_finder_view。最后,我知道result.tpl.php正用于输出。但我无法解决如何在回调中做有意义的工作,以某种方式使预处理器中的数据可用于添加到“变量”,以便我可以访问tpl文件。
在你使用tpl文件的情况下,回调甚至对任何事情都有用吗?我已经完成了回调完成所有工作并传递给主题函数的过去,但这次我想用一个文件来输出。
...谢谢
更新:这实际上是一个参数命名问题。 Drupal 6在hook_theme中使用'arguments'键而不是'variables'。一旦改变,一切都按预期工作。我也删除了预处理器,因为我的逻辑是在回调中执行的。
答案 0 :(得分:1)
你的逻辑应该始终在回调中。通过在菜单数组中指定“文件”,可以将其放在单独的文件中。
在您的示例中,一旦您从邮政编码中“获取提供商”,这些连接非常重要。 :)
在你的主题函数中你可以,并且应该将你的$ providers数组转换成更像传统drupal $ vars arary的东西,或者你可以跳过预处理和模板,只需在你的主题中完成所有的主题工作。主题功能。预处理和模板是便利,并不总是需要。
我会将主题函数重命名为不同的东西,或者回放的东西,这会让事情变得更容易理解。
这有帮助吗?我不是100%确定你真正在问什么,但是如果你想要在保持结构良好的同时简化你的代码,希望这会有所帮助。
答案 1 :(得分:0)
hook_theme中存在的问题是我使用'变量'而不是'参数'。我应该删除这个问题吗?