1

モジュールにグローバル変数を保存して、別の関数からアクセスしようとしています。この可変アプリケーション全体が必要なため、$_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");
    }
4

3 に答える 3

5

グローバル変数を格納するには、$GLOBALSスーパーグローバルに格納します。

または、おそらく、静的な値を使用できます。

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

static変数: http: //php.net/manual/en/language.oop5.static.php

于 2012-09-24T06:24:24.640 に答える
4

必要なのは、同じリクエスト内に変数を格納する場所があり、さまざまな関数がアクセスできるようにすることだけである場合は、drupal_staticを参照してください。複数のリクエストにわたって変数を追跡する必要がある場合は、$_SESSIONが最適です。

MārtiņšBriedisはstatic_variablesについて正しく、drupal_staticはそれを行うための形式化された方法にすぎません。

于 2012-09-24T06:37:41.403 に答える
0

popmeup_comment_insert()( hook_comment_insert()の実装)は、とは異なるページリクエストで呼び出されますpopmeup_page()。この結果、相対ページ要求が実行されると、静的変数またはグローバル変数は自動的にリセットされます。

唯一の選択肢は、Drupal変数、またはモジュールから使用されるカスタムデータベーステーブルを使用することです。Drupal変数は、ページコンテンツの構築に値が要求されていない場合でも、Drupalブートストラップ中に読み込まれるため、破棄します。あなたの場合、ページを出力するときにこれらの値が必要なので、カスタムデータベーステーブルを使用したいと思います。

入力に使用hook_comment_insert()しているので、異なるユーザーが同時に、またはページのコールバックが呼び出される前に、新しいコメントを挿入できることを考慮する必要があります。あなたのコードはそれを考慮する必要があります。2人の異なるユーザーが新しいコメントを作成する場合、どの値をデータベースに保存する必要がありますか?

于 2013-01-02T16:24:13.013 に答える