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



>我正在尝试在我的模块中保存一个全局变量并从另一个函数访问它。我不想将其存储在 _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");
    }

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

或者,也许可以使用静态值。

$GLOBALS : http://php.net/manual/en/reserved.variables.globals.php

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

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

Mārtiņš Briedis对static_variables是正确的,drupal_static只是正式的方式。

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

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

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

相关内容

  • 没有找到相关文章

最新更新