web-dev-qa-db-ja.com

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

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

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

したがって、古いノードに_body = "body1"_と_description = "description 1"_があり、新しいノードに_body = "body2"_と_description = "description 1"_がある場合、更新が完了した後、次のような出力を取得する必要があります。

enter image description here

次に例を示します。

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

なにか提案を?

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

7
StevanRS

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

public function Node :: setPublished

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

パラメータ

bool $ published[〜#〜] true [ 〜#〜]このノードを公開に設定するには、[〜#〜] false [〜#〜]に非公開に設定します。

あなたの場合:

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

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

2
absoludo

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();
0
Blaine Lang