Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Drupal模块回调、预处理和模板之间传递数据_Php_Drupal_Drupal Modules_Drupal Theming - Fatal编程技术网

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

Php 在Drupal模块回调、预处理和模板之间传递数据,php,drupal,drupal-modules,drupal-theming,Php,Drupal,Drupal Modules,Drupal Theming,我已经创建了一个名为finder的模块,我想从url获取参数,处理它们,然后通过tpl文件显示结果。以下是相关函数 function finder_menu() { $items = array(); $items['finder'] = array( 'page callback' => 'finder_view', 'access callback' => TRUE, ); return $items; }

我已经创建了一个名为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\u预处理\u finder\u视图。最后,我知道result.tpl.php用于输出。但是,我不知道如何在回调中进行有意义的工作,如何使数据在预处理器中可用,以便添加到“变量”中,以便我可以访问tpl文件

在使用tpl文件的情况下,回调对任何事情都有用吗?我以前也这样做过,回调完成所有工作并传递给主题函数,但这次我想使用一个文件作为输出

谢谢


更新:这实际上是一个参数命名问题。Drupal6在hook_主题中使用“arguments”键,而不是“variables”。一旦改变,一切都如期进行。在回调中执行逻辑时,我也删除了预处理器。

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

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

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

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


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

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

过去在使用tpl文件时,我在预处理函数中预先准备了数据。在那里,我还可以通过将tpl文件添加到传递给它的变量引用中,在tpl文件中添加所需的任何数据。但是,当我使用模块回调时,如何将在那里生成的任何内容传递到我的tpl文件?如果不需要预处理器,我不在乎它。返回主题('finder\u view',$providers);就是这样。如果将数据格式化为theme()可以转换为变量的格式,则可以一起跳过预处理函数。请更新问题并在此处提及。如果您下次使用的是Drupal6或7,您还应该提到。因为这正是两个版本之间的区别,7个使用变量,6个使用参数。我认为比这更糟糕。我很确定5是变量,6是参数,7是变量。Drupal核心开发者是虐待狂。