在Drupal模块回调,预处理和模板之间传递数据

时间:2011-02-02 22:53:56

标签: php drupal drupal-modules drupal-theming

我创建了一个名为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'。一旦改变,一切都按预期工作。我也删除了预处理器,因为我的逻辑是在回调中执行的。

2 个答案:

答案 0 :(得分:1)

你的逻辑应该始终在回调中。通过在菜单数组中指定“文件”,可以将其放在单独的文件中。

在您的示例中,一旦您从邮政编码中“获取提供商”,这些连接非常重要。 :)

在你的主题函数中你可以,并且应该将你的$ providers数组转换成更像传统drupal $ vars arary的东西,或者你可以跳过预处理和模板,只需在你的主题中完成所有的主题工作。主题功能。预处理和模板是便利,并不总是需要。

我会将主题函数重命名为不同的东西,或者回放的东西,这会让事情变得更容易理解。

这有帮助吗?我不是100%确定你真正在问什么,但是如果你想要在保持结构良好的同时简化你的代码,希望这会有所帮助。

答案 1 :(得分:0)

hook_theme中存在的问题是我使用'变量'而不是'参数'。我应该删除这个问题吗?