Массовое обновление полей?


Я добавил новое (текстовое) поле в тип контента Drupal 7, в котором уже есть много узлов.

Как я могу заполнить поле значением по умолчанию для всех этих узлов?

 34
Author: kiamlaluno, 2011-04-17

5 answers

Вы можете использовать EntityFieldQuery чтобы получить список узлов, затем обновите поля узла с помощью 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);
  }
}

Если это одноразовая операция, вы можете использовать функцию Devel модуля Execute PHP для выполнения вышеуказанного: в противном случае вы можете создать простой пользовательский модуль.

 38
Author: dreftymac, 2017-04-05 17:57:58

Я бы использовал Просмотр массовых операций и использовал "Выполнить произвольный PHP-скрипт" для выполнения по существу вышеперечисленных пунктов, но вам не нужно выполнять весь дополнительный код, просто небольшой фрагмент, который делает то, что вы хотите (например $object->field_foo['und'][0]['value'] = 'some_value')

 18
Author: rfay, 2011-04-18 14:02:57

Если вы хотите только обновить поле некоторым значением, то более эффективной альтернативой принятому ответу является следующий:

$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);
  }
}

Разница заключается в прямом использовании функций field_attach_presave и field_attach_update, которые корректно обновляют только поле узла и пропускают остальную часть процесса сохранения узла. Это влияет на то, что не будут вызываться крючки предварительного сохранения/сохранения узлов, дата "изменено" не будет обновлена до текущей даты и т. Д. В соответствии с вашим вариантом использования это может быть лучше, чем использовать весь процесс node_save().

 10
Author: Mirsoft, 2014-05-21 10:31:05

Действительно, VBO (Просмотр массовых операций) является хорошим решением. Кроме того, в последних версиях вы найдете опцию "Изменить значения сущностей", которая обеспечивает очень простой способ обновления языка узлов за одну операцию.

 4
Author: xaa, 2013-02-06 21:18:25

Установите и включите модуль Просмотр массовых операций и создайте представление с отображением страницы.

Добавить => Массовые операции: Поле содержимого (Содержимое) в поле зрения.

См.

enter image description here

Выберите поля, для которых вы хотите установить значение по умолчанию.

В вашем случае его название. На изображении это теги.

Сохраните представление и перейдите на созданную им страницу. Если у вас несколько страниц результатов, вы можете выбрать все элементы на текущей странице. страница, все элементы на всех страницах, или вы можете вручную установить флажки, соответствующие отдельным узлам. Для продолжения необходимо установить по крайней мере один флажок.

Теперь вы устанавливаете значение по умолчанию и сохраняете его.

 2
Author: DRUPWAY, 2020-06-15 09:13:00