web-dev-qa-db-ja.com

ルールモジュールを使用してノードが作成されてから50日後にノードを非公開にする方法は?

https://groups.drupal.org/node/240678#comment-78254 で説明されている方法を試してみましたが、それが正確に必要なものではありません。だから私はそれを少し変更しました:

ルールセットを作成する

「コンテンツの非公開」という名前を付けます

設定/変数:

  • データ型= "ノード"
  • ラベル= "ノード"
  • マシン名= "ノード"
  • 保存する

...次の画面...ルールを追加

  • 名前= "コンテンツルールの非公開"
  • 保存する

  • 条件(1):

    • コンテンツが公開されています
    • データセレクター=ノード
    • 保存する
  • 条件(2):

    • コンテンツはタイプ=ノードです
    • 値=コンテンツタイプ
    • 保存する
  • 行動:

    • コンテンツを非公開にする
    • データセレクター=ノード
    • 保存する

ルールを作成する

  • /admin/config/workflow/rulesを使用

  • 名前= "非公開ルール"

  • イベントに反応する=新しいコンテンツを保存した後
  • 保存する

  • 条件:

    • コンテンツはタイプです
    • データセレクター=ノード
    • 値= your-content-type
    • 保存する
  • 行動:

    • コンポーネント評価のスケジュール
    • コンポーネント値=コンテンツの非公開
    • データセレクター= site:current-date <- "これは私が変更したものです。作成から50日後にノードを非公開にします。"
    • 識別子の値= unpublish [node:nid] <-これを削除しました。
    • ノードデータセレクター=ノード
    • 保存する

しかし、日付フィールドはありません。

私は多くの方法を試しましたが、何も機能しないようです。AutoExpireなどの他のモジュールを使用したくありません。

これを機能させるための提案はありますか?

2
Jimbo

Rules Schedulerを調べましたか?ルールを作成し、コンテンツを非公開にするコンポーネントを作成し、元のルールのルールスケジューラをアクションとして「公開日」の50日後にコンポーネントを実行するという点で、プロセスは似ています。以下は、X時間後に公開される予定のノードのビデオです。フォローできます: http://www.youtube.com/watch?v=OgRKLXRbPX8

2
Ash

以下の手順で説明するように、_ Rules モジュールをRules Scheduler(そのサブモジュール)とともに使用します。これらの手順では、your-content-typeではなくcontent type = articleを使用します。

ステップ1:ルール「コンポーネント」を作成する

作成するルールComponentは次のとおりです(ルールエクスポート形式では、コピーと貼り付けを介して独自の環境にインポートするだけです):

{ "rules_unpublish_a_node" : {
    "LABEL" : "Unpublish a node",
    "PLUGIN" : "action set",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "USES VARIABLES" : { "node" : { "label" : "node", "type" : "node" } },
    "ACTION SET" : [ { "node_unpublish" : { "node" : [ "node" ] } } ]
  }
}

ステップ2:ルールコンポーネントを使用して「ルール」を作成する

作成するRuleRules エクスポート形式で示します(コピーアンドペーストで独自の環境にインポートするだけです)。 :

{ "rules_unpublish_nodes_after_50_days" : {
    "LABEL" : "Unpublish nodes after 50 days",
    "PLUGIN" : "reaction rule",
    "ACTIVE" : false,
    "OWNER" : "rules",
    "REQUIRES" : [ "rules", "rules_scheduler" ],
    "ON" : { "node_insert" : [] },
    "IF" : [
      { "node_is_of_type" : { "node" : [ "node" ], "type" : { "value" : { "article" : "article" } } } }
    ],
    "DO" : [
      { "schedule" : {
          "component" : "rules_unpublish_a_node",
          "date" : "+50 days",
          "identifier" : "Unpublish node with node ID [node:nid]",
          "param_node" : [ "node" ]
        }
      }
    ]
  }
}

上記のルールは、前のステップのRules Componentを参照していることに注意してください。これはルールのエクスポート形式であり、コピーアンドペーストを介して独自の環境にインポートするだけです(コンテンツタイプのマシン名に合わせてarticleを調整した後)。

可能な改良

最初にノードが作成された場合にどうなるかを指定しませんでしたが、「公開」ではなく「非公開」として指定しました。そして後でそのようなノードで更新され、「非公開」から「公開」に変更されます。その場合に何を行いたいかに応じて、ルールイベントまたはルール条件、あるいはその両方をさらに絞り込む必要がある場合があります(例:「コンテンツが公開されている」を追加します)。

結論

  • したがって、必要なのは(かなり基本的な)Action Setだけです(私のステップ1と同様)。
  • (質問のように)日付フィールドは必要ありません。「+ 50日」のような相対的な日付を使用するだけです。
1
Pierre.Vriens