ノードのステータスを更新するには?


7

Drupal 8 Webサイトにノードが存在する場合、JSONからのデータを使用して新しいノードを作成するか、既存のフィールドを更新します。したがって、メソッドを使用してノードを更新する場合、更新されたノードのノードIDと、このノードの値が変更されたフィールドのキーを配列に保存する必要があります。

更新が完了したら、このコンテンツタイプのすべてのノードを含むテーブルを印刷する必要があります。更新されたノードのフィールドは異なるスタイル(色、背景など)を持つ必要があります。

したがって、私の古いノードが body = "body1"ありdescription = "description 1"、新しいノードがbody = "body2"ありdescription = "description 1"、更新が完了したら、次のような出力を取得する必要があります。

ここに画像の説明を入力してください

次に例を示します。

$node = \Drupal\node\Entity\Node::load($nid);
$node->set("body", 'New body text');
$node->set("description", 'New value');
$node->save();

なにか提案を?

$node->save();すべての更新された値が同じ場合に使用すると、何も変更されません(管理パネルのコンテンツのノードの日付は更新前と同じです)が、値が異なる場合、変更されたフィールドのノードID、キー、値のみを保存する必要がありますアレイ。


いつどのように出力するかは明確ではありませんが、ある回答で提案されているように、diffモジュールを使用して新しいリビジョンを保存すると、これまでに行った変更の古い値と新しい値の差分が得られます(新しいリビジョンとして保存した場合)
Berdir 2017

回答:


7

ステータスを設定するには、setPublished()メソッドを使用できます。

パブリック関数Node :: setPublished

ノードの公開ステータスを設定します。

パラメーター

$公表をBOOL TRUE公開し、このノードを設定するには、 FALSE未発表に設定します。

あなたの場合:

$node = \Drupal\node\Entity\Node::load($nid);
$node->set("body", 'New body text');
$node->set("field_name", 'New value');
$node->setPublished(TRUE);

ステータスは問題ありません。コードにこれがあります。たとえば、JSONからデータを取得する場合、一部のフィールドは同じ値を持っています。どのフィールドが以前と異なる値を持っているかを知る必要があるだけです。
StevanRS 2017

@StevanRS私はあなたがあなたの質問をよりよく説明する必要があると思います、それから私に知らせてください。
Adrian Cid Almaguer

Drupalのノードステータスは、公開された状態を指します。だから、明確化することなく、これが答えです。公開された状態を確認せずに更新されたノードを検索する別の方法は、そのchangedプロパティ、つまり最後に変更された時間を確認することです。
ケビン

$ node-> save();を使用するときの@Adrian Cid Almaguer すべての更新された値が同じである場合、何も変更されません(管理パネルのコンテンツのノードの日付は更新前と同じです)が、値が異なる場合、変更されたフィールドのノードID、キー、および値のみを配列に格納する必要があります。
StevanRS 2017

1
true/ falseを渡すこと$node->setPublished()8.3.xで非推奨であることに注意してください。代わりにを使用$node->setPublished()して、公開および$node->setUnpublished()非公開にしてください。
ドーナツ

2

更新されたノードの新しいリビジョンを保存しますか?たぶん、diffモジュールを使用して、現在のノードと以前のノードの間の変更を確認できますか?これは詳細なソリューションではありませんが、おそらくあなたにとって有用な指針になるでしょう。


0

node-> save()を忘れないでください。ノードの変更は無視されます。

$node = \Drupal\node\Entity\Node::load($nid);
$node->set("body", 'New body text');
$node->set("field_name", 'New value');
$node->setPublished(TRUE);
$node->save();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.