2つの日付フィールド(enable_dateとdisable_date)を持つコマース製品タイプ(エンティティは表示ノードではない)があります。ルール/コンポーネントを作成し、ルールスケジューラを使用してこれらの2つのフィールドの値に基づいてこれらの製品を無効および有効にするようにスケジュールする手順は何ですか?
ユースケースでは、常に表示する必要があるイベントノード(製品表示)がありますが、添付の登録(製品エンティティ)を特定の日時に無効にする必要があります。つまり、登録は終了しましたが、ユーザーは場所、地図などのイベント情報を引き続き表示できます。ルールスケジューラを使用すると、確実にこれを実行できます。さまざまな結果を試しましたが、まだルールモジュールを学習しています。任意の助けいただければ幸いです。
まず、商品のステータスを設定するためのルールコンポーネントを作成します。
Set product status
などの適切な名前を付けます。Product
、マシン名product
のパラメーターを作成します。もう1つのタイプ真の値、ラベルStatus
、マシン名status
。product:status
)を選択します。status
)を選択します。これで、スケジュールできるコンポーネントがあります。次に、スケジュールされたアクションの作成をトリガーする必要があります。製品を有効にするプロセスについて説明します。同じ方法に従って、簡単に無効にする別のルールを作成できるはずです。
site:current-date
Enable product [commerce-product:product-id]
のようなものを選択しますcommerce-product
を選択します。次に、日付がフィールドから削除された場合にスケジュールされたアクションを削除するには:
また、製品が削除されたときにスケジュールされたアクションを削除する別のルールも良いでしょう。
私はすぐにそれをやってみました、そしてそれは私にとってはうまくいくようです。問題があれば教えてください。
これは私が過去にやったことであり、すべての製品をループする必要なしに製品IDを取得するのに役立つと思います。
VBOを使用して、ループするエンティティIDのリストをビューにロードできます。その方法については、こちらをご覧ください。 http://nodeone.se/sv/node/777
これにより、2つのビューを作成して、今日有効にして今日無効にする製品のエンティティIDを返すことができます。
次に、1日1回限り、cronまたは何かの間に実行するルールを作成します。
VBOディスプレイを介してエンティティオブジェクトのリストをロードするアクションを追加します。そのループパラメータリストに基づいてループを追加します。デフォルトは「entity_list」です。ループを実行してアクションを追加し、製品エンティティであるエンティティリストを反復して、製品を無効または有効にします。データを選択->値を設定
値の部分に入ると、「エンティティリスト」データセレクターがポップアップ表示され、必要に応じて有効または無効にする値を設定できます。
うまくいけば、これで必要な場所に移動できます。行き詰まった場合はお知らせください。
ほんの少しフォローアップして、両方のVBOビューを1つのルールに追加できます。 1つのVBOディスプレイで、ループを有効にする必要のある今日のすべての製品を取得します。次に、今日の製品をオフにするVBOディスプレイを取得する別のアクションを作成できます。だから、これはあなたの製品をオン/オフにする毎日実行され、何かをスケジュールすることを心配する必要はありません。
Drupal groups。でも、この質問に関連して良い答えが見つかりました。これはDrupalでルールを作成することについての本当に素晴らしい議論です。 https://groups.drupal.org/node/240678 の資料。