web-dev-qa-db-ja.com

Drupal 7では、すべてのファイルエンティティのカスタムルールイベントを作成するにはどうすればよいですか?

ルールAPIを使用してルールにイベントシナリオを追加する小さなモジュールを作成するのに問題があります。基本的に、ファイルエンティティの特定のフィールドにそのファイルを保存するときに特定の値があるかどうかを検出するために検出するルールを作成しています。次に、条件が満たされている場合、アクションは/ video /のURLパスエイリアスを変更して、システム内の最新のビデオファイル(file/[fid])を指すようにします。

しかし、私は新しいイベントを作成してさえ機能するように動けなくなっています。以下のコードは、ルールイベントリストに表示することに成功しています。条件を設定すると、データセレクターは正しいファイルフィールドを公開します。しかし、非常に単純な条件を設定したり、条件を設定しなかったりしても、アクションが起動しません。

(余談ですが、Rulesモジュールにはファイルエンティティを処理するための機能があらかじめパッケージ化されているべきではありませんか?ノード、ユーザー、コメントにはたくさんのイベントがありますが、ファイルにはありません。)

それで、以下の私のコードの何が問題になっていますか?

/**
 * Implementation of hook_rules_event_info().
 */
function rules_extended_rules_event_info() {
  return array(
    'rules_extended_rules_event_file_insert' => array(
      'group' => t('Entity'),
      'label' => t('After saving a new entity'),
      'module' => 'rules_extended',
      'variables' => array (
        'file' => array ('type' => 'entity', 'label' => t('created entity')),           
      ),
    ),
    'rules_extended_rules_event_file_update' => array(
      'group' => t('Entity'),
      'label' => t('After updating an existing entity'),
      'module' => 'rules_extended',
      'variables' => array (
        'file' => array ('type' => 'entity', 'label' => t('updated entity')),
      ),
    ),
  );
}
5
Adam Friedman

hook_rules_event_info()を宣言するだけではなく、イベントタイプに関するルールを伝えるだけですが、そのイベントを呼び出す必要があります。

宣言イベントを呼び出すには、rules_invoke_event()を使用します。

/**
 * Implements hook_entity_insert().
 */
function rules_extended_entity_insert($entity, $type) {
  if ($type == 'file') {
    rules_invoke_event('rules_extended_rules_event_file_insert', $entity);
  }
}
1
Decipher