0

我创建了一个名为 finder 的模块,我想从 url 获取参数,处理它们,然后通过 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”。一旦改变,一切都按预期工作。我也删除了预处理器,因为我的逻辑正在回调中执行。

4

2 回答 2

1

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

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

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

我会将主题函数重命名为不同的名称或回调,这会使事情更容易理解。

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

于 2011-02-02T23:21:45.013 回答
0

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

于 2011-02-03T00:31:35.680 回答