it-swarm-vi.com

Cập nhật trường số lượng lớn?

Tôi đã thêm một trường (văn bản) mới vào a Drupal 7 loại nội dung đã có nhiều nút.

Làm cách nào tôi có thể điền vào trường với một giá trị mặc định cho tất cả các nút này?

34
daphshez

Bạn có thể sử dụng EntityFieldQuery để truy xuất danh sách các nút, sau đó cập nhật các trường của nút bằng node_save() :

$lang = LANGUAGE_NONE; // Replace with ISO639-2 code if localizing
$node_type = 'page'; // Machine name of the content type

$query = new EntityFieldQuery;
$result = $query
  ->entityCondition('entity_type', 'node')
  ->propertyCondition('type', $node_type)
  ->execute();

if (!empty($result['node'])) {
  $nodes = entity_load('node', array_keys($result['node']));

  foreach($nodes as $node) {
    // Replace field_foo with the machine name of the field to update.
    // - 0 refers to specific value within the field array, for when the field contains
    //    multiple values. If the field only has one value, it should be 0.
    $node->field_foo[$lang][0]['value'] = 'New Value';
    node_save($node);
  }
}

Nếu đây là hoạt động một lần, bạn có thể sử dụng hàm Devel của mô-đun Thực thi hàm PHP để chạy ở trên: nếu không, bạn có thể tạo một mô-đun tùy chỉnh đơn giản.

37
user7

Tôi sẽ sử dụng Lượt xem hoạt động hàng loạt và sử dụng "Thực thi tùy ý PHP Script" để thực hiện các mục bên trên, nhưng bạn không phải thực hiện tất cả các mã bổ sung , chỉ một đoạn nhỏ làm những gì bạn muốn (như $object->field_foo['und'][0]['value'] = 'some_value')

17
rfay

Nếu bạn chỉ muốn cập nhật trường với một số giá trị, thì thay thế hiệu quả hơn cho câu trả lời được chấp nhận là:

$lang = LANGUAGE_NONE; // Replace with ISO639-2 code if localizing
$node_type = 'page'; // Machine name of the content type

$query = new EntityFieldQuery;
$result = $query
  ->entityCondition('entity_type', 'node')
  ->propertyCondition('type', $node_type)
  ->execute();

if (!empty($result['node'])) {
  $nodes = entity_load('node', array_keys($result['node']));

  foreach($nodes as $node) {
    // Replace field_foo with the machine name of the field to update.
    // - 0 refers to specific within the field array, for when the field contains
    //    multiple values. If the field only has one value, it should be 0.
    $node->field_foo[$lang][0]['value'] = 'New Value';
    field_attach_presave('node', $node);
    field_attach_update('node', $node);
  }
}

Sự khác biệt là trong việc sử dụng trực tiếp field_attach_presavefield_attach_update Hàm, cập nhật chính xác chỉ trường nút và bỏ qua phần còn lại của quá trình lưu nút. Điều này có tác động rằng sẽ không có nút đặt trước/lưu nút nào được gọi, ngày "đã thay đổi" sẽ không được cập nhật thành ngày hiện tại, v.v ... Theo trường hợp sử dụng của bạn, có thể tốt hơn khi sử dụng toàn bộ quá trình node_save ().

9
Mirsoft

Thật vậy, VBO (Lượt xem hoạt động hàng loạt) là một giải pháp tốt. Hơn nữa, với các phiên bản mới nhất, bạn sẽ tìm thấy tùy chọn "Sửa đổi giá trị thực thể" cung cấp một cách rất dễ dàng để cập nhật ngôn ngữ nút trong một thao tác.

4
xaa

Cài đặt và kích hoạt mô đun Lượt xem hoạt động hàng loạt và tạo chế độ xem bằng màn hình trang.

Thêm => Hoạt động hàng loạt: Trường nội dung (Nội dung) trong chế độ xem.

Tham khảo

enter image description here

Chọn các trường bạn muốn đặt giá trị mặc định.

Trong trường hợp của bạn tiêu đề của nó. Trong ảnh là thẻ.

Lưu chế độ xem và đi đến trang mà nó đã tạo. Nếu bạn có nhiều trang kết quả, bạn có thể chọn chọn tất cả các mục trên trang hiện tại, tất cả các mục trên tất cả các trang hoặc bạn có thể kiểm tra thủ công các hộp tương ứng với các nút riêng lẻ. Ít nhất một hộp kiểm tra phải được kiểm tra để tiến hành.

Bây giờ bạn đặt giá trị mặc định và lưu nó.

2
DRUPWAY