計算されたフィールド で値を計算します(別のフィールドに値Aがある場合、同じ値を持つノードをカウントし、1を追加して、計算されたフィールド値の結果を使用します。増分のような)。このフィールドは、 Rules によってノードタイトルを作成するために使用されます。
ノードを保存するたびに、このフィールドが計算されます。いいよ.
ノードを更新するたびに、フィールドが計算されません。いいよ.
しかし、 clone ノードも必要です。ノードを複製するたびに、フィールドは計算されませんが、再計算する必要があります。その結果、ノードのタイトルが同一になり、複製されたノードの計算されたフィールド値が間違っています。
ルールを試しましたが、計算フィールドは「データ値の設定」などのアクションでの書き込みをサポートしていません。次に、 Computed Field を中止し、 Rules を使用してPHP Evaluationを使用してデータ値を設定しましたが、現在、トークンに問題があります。PHP評価で呼び出す必要があり、管理できませんでした…PHP構文は 計算済みフィールド および ルール …
計算フィールドとNode Cloneを一緒に機能させるにはどうすればよいですか?
助けてくれてありがとう。
興味深い質問:
EDIT 1:
Computed Field から Rules にコードを転送しようとしましたが、非常に近いと思います。しかし、私はまだトークンについてのアドバイスが必要です。 PHP Evaluation(action Set a data value))でトークンを呼び出すにはどうすればよいですか?token_replace
?たとえば、[node:nid]
、それを変数に入れるには$nid
? ($node
はこの Rules アクションでは使用できません...)
このPHP構文についてのヒントをありがとう。
EDIT 2:
リクエストに応じて、 Computed Field コードに触発されたルールのエクスポートを以下に示します。問題は、エンティティ参照フィールドのNIDを取得するクエリです(field_site_id_target_id
)。 field_get_items
計算済みフィールド ですが、ルールではPHP評価、機能しません(?)。この値はトークンで使用できることを知っています( [node:field-site-id:nid]
)ですが、PHP評価でそれを呼び出す方法がわかりません。このNIDを取得するために「変数を追加する」ことも試みましたが、それを呼び出す方法がわかりませんPHP評価。
私は誰かがこのフォーラムでこれを解決できると確信しています:)
{ "rules_titre_auto_sample_2" : {
"LABEL" : "Titre auto Sample 2",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "php", "rules" ],
"ON" : {
"node_insert--sample" : { "bundle" : "sample" },
"node_update--sample" : { "bundle" : "sample" }
},
"DO" : [
{ "data_set" : {
"data" : [ "node:field-sample-number-2" ],
"value" : {
"select" : "node:nid",
"php" : { "code" : "$nid_site=db_query(\u0022SELECT field_site_id_target_id FROM {field_data_field_site_id}\u0022)-\u003EfetchField();\r\n$result=db_query(\u0022SELECT count(*) FROM {field_data_field_site_id} WHERE field_site_id_target_id=\u0022.$nid_site)-\u003EfetchField();\r\n$value=sprintf(\u0027%03d\u0027,$result+1);\r\nreturn $value;\r\n" }
}
}
},
{ "data_set" : {
"data" : [ "node:title" ],
"value" : "[node:field-site-id]-[node:field_sample_number_2]"
}
}
]
}
}
EDIT 3:
問題を理解するために要求されたように:
タイトルSite A – 001でNode/1を作成(フィールドサイトID =サイトA、サンプル番号= 001(計算済み))OK
タイトルSite A – 002でNode/2を作成(フィールドサイトID =サイトA、サンプル番号= 002(計算済み))OK
Node/2の編集:タイトルは変更されません。 OK
タイトルSite B – 001でNode/3を作成(フィールドサイトID =サイトB、サンプル番号= 001(計算済み))OK
タイトルサイトBを持つNode/4のNode/3のクローンを作成– 001(フィールドサイトID =サイトB、サンプル番号= 001(計算済み))[〜#〜]エラー[〜#〜] :サイトB – 002である必要があります。
ノードを複製すると、新しい計算の代わりにサンプル番号の値が貼り付けられます。
お役に立てれば。
EDIT 4:
最初の回答とNode Clone。
残念ながら、それは私の元の問題では機能しません。そうです、「保存して編集」オプションを使用すると、クローン後のイベントを使用した場合にルールがトリガーされます。しかし、それでも、私の計算されたフィールドはre-computedではなく、フィールド値が複製され、タイトルは同じです。
私の場合、私は2つの方法しか見ていません:
計算フィールドを中止し、ルールとPHP評価でのみ機能します
OR
コンテンツが保存または更新されたときに計算フィールドを再計算する方法を見つける。計算フィールドに再計算するオプションがあることは知っていますが、表示されるたびに機能し、ノンストップで増加する数の奇妙な結果が得られます...
問題は、計算フィールドが書き込みをサポートしていないことです...したがって、ルールからのデータを設定するアクションは、ここでは使用できません。
その上、あなたのオプションで、それはクローンをすぐに保存し、それは私のクライアントには適切ではありません。例えば、彼らがクローン手順を試してみたいだけなら、彼らは新しいコンテンツを検索してそれを削除しなければならず、私はこれが欲しいです可能な限りユーザーフレンドリー。
私は計算フィールドを再考し、何が起こるかを見ていきます...
EDIT 5:
Computed field 、 Node Clone 、 Rules 、 Auto-Label と Pathauto 、私は本当に何かに近いです。
これまでの質問を要約しましょう:
私のテストとピエールヴリアンからのコメントに基づいて、私は新しい角度を試しました。
計算フィールドには、「毎回フィールド値を再計算する」というオプションがあり、私はそれを試してみました。これで、ノードの作成時またはノードのクローン作成時に、計算されたフィールドとタイトルを取得できました。
しかし、まだ最後の問題があります。コンテンツを保存すると、「ページが見つかりません」というメッセージが表示されます...
実際、Pathautoは各ノード([node:content-type]/[node:title]
)。驚くべきことに、ノードは適切なURLエイリアス(コンテンツの概要で利用可能)で適切に作成されていますが、新しいコンテンツを保存(または複製)した直後に、「ページが見つかりません」"と表示されます。今回はアクションシーケンスに問題があると思います。
この最後の障害について何か考えはありますか?
この手順で問題がなければ、使用した各ステップで明確な答えを作成します。
最後に、 計算済みフィールド なしのソリューションが見つかりました。
Edit 5で引用されているCF以外のすべてのモジュールを使用して、Rulesで自動インクリメント値を作成しました。
ノードのクローンを作成するときに新しい計算を強制するために、ルールノードの「ノードのクローン作成後」(Pierre.Vriensの提案どおり)を使用しましたが、Nodeクローンの構成。次に、ノードのクローンを作成して値を計算し、ノードのタイトルを書き換えるルールを作成しました。
この問題により、新しい強力なモジュールである 条件付きルール に出会いました。そのすばらしいモジュールのおかげで、あなたはルール内で、もしそうでなければ、スイッチを入れることができます...持つ必要があります。
ルールのエクスポート形式で、この(非常に基本的な)ルールを見てください。
{ "rules_demo_of_node_cloning" : {
"LABEL" : "Demo of node cloning",
"PLUGIN" : "reaction rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules", "clone" ],
"ON" : { "clone_node" : [] },
"DO" : [
{ "drupal_message" : { "message" : "bingo, a cloned node ... add any additional Rules Actions you want (after this action)." } }
]
}
}
上記のルールはルールイベントを使用しますノードのクローンを作成した後( Node clone モジュールを有効にしている場合に使用できるイベント) 。このルールで行うことは、「bingo、cloned node ...」で始まるメッセージを表示することだけです。 "(申し訳ありませんが、ルールを単体テストする私のお気に入りの方法...)少なくともそれが起こるはずです...
ただし、 comment nr 6 in issue nr 2212039 によると、このイベントはNode cloneの構成オプション "新しいノードとして保存して編集します。 "、オプション"ノードフォームフィールドに事前入力します "。これらのオプションはadmin/config/content/clone
にあります。そして、このオプションを変更した後、そのようなbingo-message(ルールはそのイベントによってトリガーされます)。
したがって、回避策として、そのオプションを使用することをお勧めします "新しいノードとして保存して編集します。 "、次にこのルールイベント(=ノードのクローン作成後)を既存のルールに追加します。または、このルールイベントを使用して新しいルールを作成し、適切なルール条件/アクションを追加します。これは、新しいノードまたは更新されたノードですでに作業しているルールに類似している可能性があります。さらに良いのは、上記のNode clone構成オプションを変更するだけで、ノードを作成または更新するための)既存のルールが既にトリガーされている可能性があるためです(他に何もする必要はありません)。 。