web-dev-qa-db-ja.com

ルールのhook_variable_info()で定義されたユーザー変数

hook_variable_info() でカスタムモジュールの変数を宣言しています。ルールでそれらのいくつかにアクセスしたいと思います。どうやってやるの?

これは Variable モジュールを使用すると、この値にきめ細かいアクセス制御を追加できるようになるためです。そうしないと、ルールを管理するための完全なアクセス権をユーザーに与えざるを得なくなります。

更新:私はこの問題を発見しました: Make Drupal変数をデータブラウザーでルールにアクセスできるようにします 正直に言うと、それが何を言っているのか完全に理解できません。

1
BetaRide

Rulesモジュールはトークンを使用し、Variableモジュールは hook_tokens() を実装しているため、何もする必要はありません。

そのhook_tokens()の実装から返された値が期待する値ではない場合、独自のモジュールで hook_tokens_alter() を実装して、変数によって返されるトークン値を変更できますモジュール。

エンティティプロパティ情報 を読み取ると、次のようなコードを使用する必要があることを意味します。

_function mymodule_entity_property_info() {
  $info = array();

  // Add meta-data about the variables exposed from the Variable module.
  $properties = &$info['site']['properties'];

  // ...

  return $info;
}
_

entity_property_verbatim_set()entity_property_verbatim_set(&$data, $name, $value, $langcode, $type, $info)として定義されている場合でも、セッターコールバックなどに渡されるパラメーターに関する情報は見つかりませんでした。

_function entity_property_verbatim_set(&$data, $name, $value, $langcode, $type, $info) {
  $name = isset($info['schema field']) ? $info['schema field'] : $name;
  if (is_array($data) || (is_object($data) && $data instanceof ArrayAccess)) {
    $data[$name] = $value;
  }
  elseif (is_object($data)) {
    $data->$name = $value;
  }
}
_

逆もまた同様です entity_metadata_user_set_properties()entity_metadata_user_set_properties($account, $name, $value)として定義されます。

_function entity_metadata_user_set_properties($account, $name, $value) {
  switch ($name) {
    case 'roles':
      $account->roles = array_intersect_key(user_roles(), array_flip($value));
      break;
  }
}
_

entity_metadata_user_entity_property_info() 次の定義でそのセッターコールバックを使用します。

_  $properties['roles'] = array(
    'label' => t("User roles"), 
    'description' => t("The roles of the user."), 
    'type' => 'list<integer>', 
    'getter callback' => 'entity_metadata_user_get_properties', 
    'setter callback' => 'entity_metadata_user_set_properties', 
    'setter permission' => 'administer users', 
    'options list' => 'entity_metadata_user_roles', 
    'access callback' => 'entity_metadata_user_properties_access',
  );
_
2
kiamlaluno