私は drupal にかなり慣れていませんが、友人から助けを求められたので、少し夢中になりました。多くのことをうまく機能させることができましたが、頭を悩ませることができない問題が 1 つあります。これが私が達成しようとしていることです:
Nodeエンティティを持つOGグループとして表されるコースがあります。各コースのコンテンツ タイプは「Course」(エンティティはノード タイプ) で、価格が設定されています。ルールでは、ユーザーがコースに参加するのに十分なクレジットを持っているかどうかを確認しようとしているため、「og メンバーシップを保存する前に」イベントでトリガーされます。ユーザーに十分な資金がない場合は、OG メンバーシップの保存を中止してエラーをスローしたいと考えています。
非常に簡単ですが、発生するとは予想していなかった問題がいくつかあります。これは私がしていること/持っていることです:
- 各ユーザーには「field-credit」と呼ばれるカスタム フィールドがありますが、site:current-user:field-credit を介していつでもどこでもルールにアクセスできるため、問題はありません。
- コースは、コース価格を格納するためのカスタム フィールド「field-price」を定義した「Course」のカスタム コンテンツ タイプを持つ Node エンティティを含む単純な OG グループに他なりません
ルール モジュール (UI 経由) で、次のようなルールを作成します。
- イベント「OGメンバーシップを保存する前」でトリガー
- 条件は次のとおりです (この順序で)。
- エンティティ [og-membership:group:entity] は Node タイプです (コンテンツ タイプにアクセスできるようにします)
- コンテンツ [og-membership:group:entity] はコース タイプです (コース固有のフィールドにアクセスできるようにします)
- データ比較: [site:current-user:field-credit] は [og-membership:group:entity:field-price] よりも低い
そして、ここで私が完全に理解できないことがあります-これらの条件(ノードで作業していることを示すエンティティタイプ、およびコースで作業していることを示すノードコンテンツタイプ)を追加した後、データセレクターで必要なすべてのフィールドを確認できます。したがって、ルールはそれらを認識して使用する必要があります。しかし、実際には、それらは存在しません。[og-membership:group:entity:field-price] を含むメッセージを表示すると (データセレクターからアクセスできます)、コースの価格は表示されず、そのような変数がないように動作します。アクションでエンティティのフェッチを行うことはできますが、フェッチされたエンティティ (コンテンツ) は条件で表示されず、データ セレクターを介してアクセスすることさえできないため、それは役に立ちません。その (エンティティ) コンテンツ タイプはわかりません (ただし、[fetched-entity:
なぜこれが起こっているのか、それとももっと良いのか、どうすれば修正できるのか、誰にもわかりますか? すぐに使えるルールで実現できる独自のモジュールを作成したくありませんが、この動作はすでに2日間私を悩ませています。
システムは Drupal 7 で実行されています。
編集:「新しいコンテンツを保存した後」でトリガーされるルールでは、コンテンツ タイプ (コンテンツ [ノード] はコース タイプ) をチェックしてすべてが期待どおりに設定されるため、コースのすべてのフィールドが使用可能であると確信しています。