在Drupal中定义模块内的全局变量

时间:2012-09-24 05:52:32

标签: drupal global-variables

我正在尝试在我的模块中保存一个全局变量并从另一个函数访问它。我不想将它存储在$ _SESSION中,因为我需要这个变量应用程序。以下是我正在尝试的代码,但它根本不起作用。

  function popmeup_menu() {
    $items['example/feed'] = array(
    'title' => 'Example RSS feed',
     'page callback' => 'popmeup_page',
     'access arguments' => array('access content'),
     'type' => MENU_CALLBACK
    );
    return $items;
  }

    function popmeup_page() {
      print variable_get($xmlt, "");
    }

    function popmeup_comment_insert($comment) {
      variable_set($xmlt,"xmltoreturn");
    }

3 个答案:

答案 0 :(得分:5)

要存储全局变量,请将其存储在$GLOBALS superglobal。

或许,您可以使用静态值。

$GLOBALShttp://php.net/manual/en/reserved.variables.globals.php

static变量:http://php.net/manual/en/language.oop5.static.php

答案 1 :(得分:4)

如果您只需要在相同的请求中存储变量,则可以访问不同的函数,然后查看drupal_static。如果您需要在多个请求中跟踪您的变量,那么$ _SESSION就是您要查看的地方。

MārtiņšBriedis对static_variables的看法是正确的,而drupal_static只是形式化的方式。

答案 2 :(得分:0)

popmeup_comment_insert()hook_comment_insert()的实现)在与popmeup_page()不同的页面请求中调用。因此,当相关页面请求完成时,任何静态或全局变量都会自动重置。

唯一的替代方法是使用Drupal变量或模块中使用的自定义数据库表。我会丢弃Drupal变量,因为它们是在Drupal引导期间加载的,即使它们的值没有被请求构建页面内容。在您的情况下,因为在输出页面时需要这些值,我宁愿使用自定义数据库表。

当您使用hook_comment_insert()填充它时,您应该考虑不同的用户可以同时插入新的注释,或者在调用页面回调之前。您的代码应该考虑到这一点。如果两个不同的用户创建新注释,哪个值应保存在数据库中?