web-dev-qa-db-ja.com

ルールスケジューラを使用して、特定の日付フィールドに基づいてコマース製品エンティティを無効および有効にするにはどうすればよいですか?

2つの日付フィールド(enable_dateとdisable_date)を持つコマース製品タイプ(エンティティは表示ノードではない)があります。ルール/コンポーネントを作成し、ルールスケジューラを使用してこれらの2つのフィールドの値に基づいてこれらの製品を無効および有効にするようにスケジュールする手順は何ですか?

ユースケースでは、常に表示する必要があるイベントノード(製品表示)がありますが、添付の登録(製品エンティティ)を特定の日時に無効にする必要があります。つまり、登録は終了しましたが、ユーザーは場所、地図などのイベント情報を引き続き表示できます。ルールスケジューラを使用すると、確実にこれを実行できます。さまざまな結果を試しましたが、まだルールモジュールを学習しています。任意の助けいただければ幸いです。

3
Nigel Waters

まず、商品のステータスを設定するためのルールコンポーネントを作成します。

  1. Configuration->Workflow->Rules->Components->新しいコンポーネントを追加します
  2. アクションセットを作成します。
  3. コンポーネントにSet product statusなどの適切な名前を付けます。
  4. タイプCommerce Product、ラベルProduct、マシン名productのパラメーターを作成します。もう1つのタイプ真の値、ラベルStatus、マシン名status
  5. アクションを追加:データ値を設定
  6. Dataの場合、データセレクターを使用して、製品パラメーターのステータス(product:status)を選択します。
  7. Valueの場合、データセレクターを使用してステータスパラメーター(status)を選択します。
  8. 保存する

これで、スケジュールできるコンポーネントがあります。次に、スケジュールされたアクションの作成をトリガーする必要があります。製品を有効にするプロセスについて説明します。同じ方法に従って、簡単に無効にする別のルールを作成できるはずです。

  1. Configuration->Workflow->Rules->新しいルールを追加
  2. トリガーを選択します新しいコマース製品を保存した後および既存のコマース製品を更新した後
  3. Entity has fieldという条件を追加します。
  4. Entityの場合、データセレクターを使用して、エンティティとしてcommerce-productを選択します。
  5. Fieldの場合、ドロップダウンを使用して開始日フィールドを選択します。
  6. 追加条件データ値が空です
  7. Data to checkの場合、データセレクターを使用して開始日フィールドを選択します。
  8. [否定]チェックボックスをオンにします(フィールドが空ではない場合のみ続行します)
  9. 別の条件を追加データ比較を選択し、開始日フィールドを選択より大きいsite:current-date
  10. アクションScheduleコンポーネントの評価を追加します。
  11. Componentについては、以前に作成したコンポーネントを選択します。
  12. Scheduled Evaluation Dateの場合、データセレクターを使用して開始日を取得します。
  13. Identifierの場合、Enable product [commerce-product:product-id]のようなものを選択します
  14. Statusの場合は、チェックボックスをオンにします。
  15. Productの場合、データセレクターを使用してcommerce-productを選択します。

次に、日付がフィールドから削除された場合にスケジュールされたアクションを削除するには:

  1. 上記の手順1〜7(ただし8ではありません)に従って、新しいルールを作成します。
  2. アクションを追加スケジュールされたタスクを削除
  3. Componentについては、以前に作成したコンポーネントを選択します。
  4. Identiferには、以前に使用したものと同じ文字列を使用します。

また、製品が削除されたときにスケジュールされたアクションを削除する別のルールも良いでしょう。

私はすぐにそれをやってみました、そしてそれは私にとってはうまくいくようです。問題があれば教えてください。

12
Andy

これは私が過去にやったことであり、すべての製品をループする必要なしに製品IDを取得するのに役立つと思います。

VBOを使用して、ループするエンティティIDのリストをビューにロードできます。その方法については、こちらをご覧ください。 http://nodeone.se/sv/node/777

これにより、2つのビューを作成して、今日有効にして今日無効にする製品のエンティティIDを返すことができます。

次に、1日1回限り、cronまたは何かの間に実行するルールを作成します。

VBOディスプレイを介してエンティティオブジェクトのリストをロードするアクションを追加します。そのループパラメータリストに基づいてループを追加します。デフォルトは「entity_list」です。ループを実行してアクションを追加し、製品エンティティであるエンティティリストを反復して、製品を無効または有効にします。データを選択->値を設定

値の部分に入ると、「エンティティリスト」データセレクターがポップアップ表示され、必要に応じて有効または無効にする値を設定できます。

うまくいけば、これで必要な場所に移動できます。行き詰まった場合はお知らせください。

ほんの少しフォローアップして、両方のVBOビューを1つのルールに追加できます。 1つのVBOディスプレイで、ループを有効にする必要のある今日のすべての製品を取得します。次に、今日の製品をオフにするVBOディスプレイを取得する別のアクションを作成できます。だから、これはあなたの製品をオン/オフにする毎日実行され、何かをスケジュールすることを心配する必要はありません。

1
iLLin

Drupal groups。でも、この質問に関連して良い答えが見つかりました。これはDrupalでルールを作成することについての本当に素晴らしい議論です。 https://groups.drupal.org/node/240678 の資料。

0
WaQaR Ali