Главная/Статьи/Drupal7: Массовое изменение значения поля у нод
Drupal

Drupal7: Массовое изменение значения поля у нод

Способ выборки определённых нод и их массового обновления. Для выполнения операций используется модуль Devel через devel/php.

Реальный пример: на туристическом сайте, изначально содержавшем туры только по Франции, требовалось добавить поддержку Испании. Для этого создано новое поле select с выбором страны, и нужно было проставить значение у всех существующих нод.

Основной код

drupal_set_time_limit(600);
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node');
$query->propertyCondition('type', 'tour');
$result = $query->execute();
foreach (array_keys($result['node']) as $nid) {
  $node = node_load($nid, NULL, TRUE);
  $node->field_country[LANGUAGE_NONE][0]['value'] = 'france';
  node_save($node);
}
drupal_set_message('Обновлено ' . count($result['node']) . ' нод');

Расширенные варианты

Фильтр по пустому полю:

$query->fieldCondition('field_country', 'value', 'NULL');

Фильтр по значению страны с массовой установкой цены:

$query->fieldCondition('field_country', 'value', 'andorra');
$node->field_price[LANGUAGE_NONE][0]['value'] = 500;