Làm thế nào để cập nhật trạng thái nút?


7

Tôi đang sử dụng dữ liệu từ JSON để tạo các nút mới hoặc cập nhật các trường hiện có nếu nút tồn tại trên trang web Drupal 8 của tôi. Vì vậy, khi tôi sử dụng phương thức để cập nhật các nút, tôi cần lưu vào id nút mảng của các nút và khóa được cập nhật của các trường có giá trị thay đổi trong nút này.

Sau khi cập nhật xong, tôi cần in bảng với tất cả các nút thuộc loại nội dung này, nơi các trường của các nút được cập nhật cần phải có kiểu khác nhau (màu, nền, v.v.).

Vì vậy, nếu nút cũ của tôi có body = "body1"description = "description 1"nút mới có body = "body2"description = "description 1"sau khi cập nhật xong, tôi cần nhận đầu ra như thế này:

nhập mô tả hình ảnh ở đây

Đây là một ví dụ:

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

Bất cứ đề nghị nào?

Lưu ý : khi tôi sử dụng $node->save();nếu tất cả các giá trị được cập nhật giống nhau thì không có gì thay đổi (ngày của nút trong nội dung từ bảng quản trị giống như trước khi cập nhật), nhưng nếu các giá trị khác nhau, tôi cần lưu trữ id nút, khóa và giá trị của các trường đã thay đổi trong mảng.


Không thực sự rõ ràng khi nào và làm thế nào bạn muốn có đầu ra đó, nhưng như được đề xuất bởi một câu trả lời, nếu bạn sử dụng mô-đun diff và lưu bản sửa đổi mới, thì bạn sẽ nhận được sự khác biệt giữa các giá trị cũ và mới cho bất kỳ thay đổi nào bạn từng thực hiện (giả sử bạn đã lưu trữ nó dưới dạng bản sửa đổi mới)
Berdir

Câu trả lời:


7

Để đặt trạng thái, bạn có thể sử dụng phương thức setPublished () :

chức năng công cộng Node :: setPublished

Đặt trạng thái được công bố của một nút ..

Thông số

bool $ đã xuất bản : TRUE để đặt nút này thành xuất bản, FALSE để đặt nó thành chưa được công bố.

Trong trường hợp của bạn:

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

Tình trạng là ok, tôi có mã này trong mã của tôi. Tôi cần một cái gì đó khác nhau, ví dụ khi tôi lấy dữ liệu từ JSON, một số trường có cùng giá trị, tôi chỉ cần biết trường nào có giá trị khác với trước đó.
StevanRS

@StevanRS Tôi nghĩ rằng bạn cần giải thích rõ hơn câu hỏi của bạn, và sau đó cho tôi biết.
Adrian Cid Almaguer

Trạng thái nút trong Drupal đề cập đến trạng thái được công bố của nó. Vì vậy, không cần làm rõ, đây là câu trả lời. Một cách khác để tìm kiếm một nút đã được cập nhật mà không cần nhìn vào trạng thái được công bố là xem thuộc tính của nó changed, thời điểm nó được sửa đổi lần cuối.
Kevin

@Adrian Cid Almaguer khi tôi sử dụng $ node-> save (); nếu tất cả các giá trị được cập nhật là không có gì thay đổi (ngày của nút trong nội dung từ bảng quản trị giống như trước khi cập nhật), nhưng nếu các giá trị khác nhau, tôi cần lưu trữ id nút, khóa và giá trị của các trường đã thay đổi trong mảng.
StevanRS

1
Lưu ý rằng đi qua một true/ falseđể $node->setPublished()được bị phản đối như của 8.3.x . Thay vào đó sử dụng $node->setPublished()để xuất bản và $node->setUnpublished()để không xuất bản.
bánh rán

2

Bạn có lưu bản sửa đổi mới của nút cập nhật không? Có lẽ bạn có thể sử dụng mô-đun diff để xem những thay đổi giữa nút hiện tại và nút trước đó? Đây không phải là một giải pháp chuyên sâu, nhưng có lẽ có thể là con trỏ hữu ích cho bạn.


0

Đừng quên nút-> save () hoặc thay đổi nút của bạn sẽ bị bỏ qua.

$node = \Drupal\node\Entity\Node::load($nid);
$node->set("body", 'New body text');
$node->set("field_name", 'New value');
$node->setPublished(TRUE);
$node->save();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.