ユーザーアカウントのフィールドを使用して、いくつかのユーザー変数を格納しています。これらの変数には、ユーザーはアクセスできません。変数にアクセスするために、すべてのページでuser_loadを使用する効率を心配しています。多分それはvariable_set()を使用する方が良いですか? drupalで変数を設定/アクセスするための推奨手順は何ですか?
効率が目標であり、変数が複雑すぎない場合は、ユーザーエンティティのdata
プロパティを利用できます。これは、シリアル化された文字列として_{users}
_テーブルに格納され、デフォルトでグローバル_$user
_オブジェクトの一部として使用できます。あらゆるタイプのユーザーロード(最低限のユーザーロードであっても)のためにデータベースから読み込まれるため、オーバーヘッドを基本的に何も減らすことができます。
それを使用する方法の最良の例は hook_user_presave()
のドキュメントにあります:
_function hook_user_presave(&$edit, $account, $category) {
// Make sure that our form value 'mymodule_foo' is stored as
// 'mymodule_bar' in the 'data' (serialized) column.
if (isset($edit['mymodule_foo'])) {
$edit['data']['mymodule_bar'] = $edit['mymodule_foo'];
}
}
_
次に、コードの別のポイントで値を取得するのは、次のように簡単です。
_global $user;
$mymodule_bar = $user->data['mymodule_bar'];
_
フィールドは素晴らしいですが、ご存知のようにオーバーヘッドが増えるため、少量のデータの場合、このようにdata
プロパティを使用しない理由はわかりません。
変数テーブルを使用すると、すぐに管理できなくなると思います。ユーザーごとに異なる変数になるか、すべてのユーザーのデータを含む単一の変数を保存する必要があります...どちらも望ましいことではありません。