コンテンツタイプがあり、select list fieldがあります。 2つのオプションYesまたはNoがあり、このフィールドは必須フィールドではありません。
ウェブサイトには約100,000のノードがあり、各ノードの「はい」を選択するために一括更新すべてのノードを使用したいと思います。これを行う方法はありますか?
この回答では、「」のような私の追加コメントへの回答も考慮に入れています。現在値があるノードに対して、更新された値はどのようになりますかNo?になるはずですはいまたは残りいいえ? "。 「良い質問:)この場合、すべてのノードにYes値が必要です。他の場合は、まず現在の値を確認してから、必要に応じて変更してください。あなたは正しいです」。
Rules Componentのこの例をご覧ください( Rules エクスポート形式):
{ "rules_set_an_initial_value_for_a_text_field" : {
"LABEL" : "Set an initial value for a text field",
"PLUGIN" : "rule",
"OWNER" : "rules",
"REQUIRES" : [ "rules" ],
"USES VARIABLES" : { "node" : { "label" : "Node", "type" : "node" } },
"IF" : [
{ "entity_has_field" : { "entity" : [ "node" ], "field" : "field_optionlist" } },
{ "NOT data_is" : { "data" : [ "node:field-optionlist" ], "value" : "A" } }
],
"DO" : [
{ "data_set" : { "data" : [ "node:field-optionlist" ], "value" : "B" } }
]
}
}
上記の例をさらに説明するための詳細:
field_optionlist
の選択リストフィールドがあります。このフィールドには、実際には次のような3つの可能な値があります。
Advanced
であってはなりません」というルール条件を使用することにしました(これはリセットしたくない値であると想定しています)。Basic
に変更します。ルール条件Entity has field
を追加して、このフィールドをこのルールコンポーネントでさらに処理できるようにしたことにも注意してください。これは、「データ比較」条件を追加しているときにルールUIで言及されていることでもあります。「」と書かれているところにあるデータセレクターは、ルールで使用できるデータにドリルダウンするのに役立ちます。エンティティフィールドを作成するにはデータセレクタに表示される場合は、「エンティティがフィールドを持つ」(または「コンテンツのタイプ」)」という条件を使用する必要がある場合があります。このEntity has field
条件の重要性を説明するビデオチュートリアルについては、 データタイプとデータ選択 を参照してください。特に、そのビデオの13:30から17:30頃に示されているものを参照してください。
ここでは、選択したコンテンツタイプに関するルール条件を追加していないことに注意してください。これは、追加したい追加条件になる可能性があります。ただし、選択リストフィールドが関心のあるコンテンツタイプに対してのみ使用される場合、Entity has field
条件で十分です。
必要に応じて、上記のエクスポートされたルールを取得(コピー)し、そのフィールドのマシン名のすべての出現箇所をフィールドのマシン名と一致するように変更します(この例では「A」や「B」などの可能な値を調整します)。 。それを行った後、このルールコンポーネントを自分の環境にインポートするだけです。
このルールコンポーネントをインポートしたら、自分のサイトのadmin/config/workflow/rules/components
に移動します。次に、ハイパーリンク「execute」を使用して、自分のサイトでそれをqa-testします。そのリンクを使用した後、というボタンを使用しますSwitch to direct input mode。次に、いくつかのNode identifierを入力してを押すことができますExecuteボタン。選択したノードIDに応じて(つまり、そのフィールドがあり、ルール条件が満たされている場合)、ノードはそれに応じて更新されます。
ルールコンポーネントがノードのすべてのバリエーションに最適であると確信したら、以下のステップ2に進みます。
この手順は非常に簡単です。処理するすべての約100.000ノードの適切なビューを作成し、それを Views Bulk Operations ビューに変換します。 VBOが操作として実行することの手掛かりは...予想通りですステップ1のルールコンポーネントを実行。
方法がよくわからない場合は、 VBOでのルールコンポーネントの使用 "に関するビデオをご覧ください。さらに知りたい場合は、次の" 複数のパラメーターを持つルールコンポーネント "ビデオ。
もちろん、コンポーネントタイプによる処理、「a」特定の値のみにビュー出力を絞り込むなど、上記のアプローチには複数のバリエーションがあります。
注意:一度に100.000ノードを処理することは非常に困難です(メモリ要件など)。そのため、 " VBO設定の詳細 "についてのビデオも参照することをお勧めします... VBOを使用して一度にすべてを処理するように誘惑される前に...
Rules に慣れていない(十分/まだ)場合は、32(!!!)のすばらしい無料のビデオチュートリアル Learn the Rules framework をチェックしてください。
ハッピー [〜#〜] vbo [〜#〜] -ing while Rules -ing!
複数のオプションがあります。
すべてのノードを反復処理してフィールドの値を変更するコードを使用できます(コードを実行するには、モジュール devel など)が必要です。
他のオプションは Views Bulk Operations モジュールを使用して、そのタイプのノードのリストを表示するビューを作成し、views bulk operationsノードを編集するオプションがあるフィールド。これにより、ビュー内のすべてのノードを選択し、同じ値でフィールドを変更できます。
あなたはの線に沿って何かが必要です
<?php
$nodes = node_load_multiple(array(), array('type' => 'page'));
foreach($nodes as $node) {
// Only modify nodes that have something in the body field
$node->field_select['und'][0]['value'] = 'yes';
node_save($node);
}
必要に応じて変更します。後でキャッシュをクリアすることを忘れないでください。
別のオプションは Administrative Views および Views Bulk Operations モジュールをインストールし、以下のスクリーンショットに示すように、値の変更をポイントします
このようなシナリオでは、ノードのタイムスタンプを保持するか、node_save()
プロセス全体を回避する必要があります。この場合は、次のようにします。
$key = 'value'; // Key that holds the field value.
$value = '1'; // Assuming '1' is the value for the option "Yes".
$bundle = 'article'; // Name of the node type.
// Get $bundle node ids.
$query = new EntityFieldQuery();
$result = $query
->entityCondition('entity_type', 'node')
->entityCondition('bundle', $bundle)
->execute();
if (isset($result['node'])) {
// Load matching nodes.
$nids = array_keys($result['node']);
$nodes = entity_load('node', $nids);
foreach ($nodes as $nid => $node) {
// Update the field(s). Assign whole array since some nodes may
// come with an empty field.
$node->field_foobar[LANGUAGE_NONE] = array(array($key => $value));
// Give other modules the opportunity to act before saving fields.
field_attach_presave('node', $node);
// Save field data (modules can also hook here).
field_attach_update('node', $node);
}
// Reset cache for the updated nodes.
entity_get_controller('node')->resetCache($nids);
}
Views Bulk Operations モジュールをインストールして有効にし、ページ表示付きのビューを作成します。
Add => Bulk operations:Content(Content)field in view。
参照
デフォルト値を設定するフィールドを選択します。
ビューを保存して、作成したページに移動します。結果のページが複数ある場合は、現在のページのすべてのアイテムを選択するか、すべてのページのすべてのアイテムを選択するか、または個々のノードに対応するボックスを手動でチェックできます。続行するには、少なくとも1つのチェックボックスをオンにする必要があります。
次に、デフォルト値を設定して保存します。