Drupal → Массово изменить значение поля у определённых нод

12.04.2011

Временами требуется массово сменить значение какого-нибудь поля, например цену товаров в определённой категории магазина.

Ниже, пример изменения значения текстового поля field_price у материалов типа product, у которых текстовое поле field_category имеет значение Игрушки:

drupal_set_time_limit(600);
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node');
$query->propertyCondition('type', 'product'); // фильтр по типу ноды
$query->fieldCondition('field_category', 'value', 'Игрушки'); // фильтр по текстовому полю
$result = $query->execute();
foreach (array_keys($result['node']) as $nid) {
  $node = node_load($nid, NULL, TRUE);
  $node->field_price[LANGUAGE_NONE][0]['value'] = 110; // новое значение поля
  node_save($node);
}
drupal_set_message('Обновлено ' . count($result['node']) . ' нод');

Чтобы воспользоваться кодом, нужно поставить модуль Devel, открыть страницу devel/php, вставить код в textarea и нажать кнопку Выполнить. Перед выполнением кода обязательно сделайте бэкап базы.

Добавлено позже

С некоторых пор этого же можно добиться и из админки с помощью модуля Views Bulk Operations.

Написанное актуально для
Drupal 7
Похожие записи

Комментарии

EducatedFool
19.05.2011, 21:15

Спасибо за статью - очень пригодился совет

Гость
20.08.2015, 11:11

а если нужно заменить значение поля на пусто?
Это скидка и замена на 0 выводит скидка ноль старая цена равна новой.

Гость
20.08.2015, 11:13

нашел решение в views обрабатываю 0 как пусто, или есть более правильное?

Гость
20.08.2015, 11:41

спасибо перезаписало но поле все равно выводится как ноль, после редактирования ноды пропадает, кэш сбрасывал, крон запускал

Гость
20.08.2015, 11:42

Прошу прощения перезаписал без [LANGUAGE_NONE][0]['value'] и все ок.
Спасибо огромное!

Гость
28.01.2016, 10:45

Здравствуйте, а могу я в данной конструкции увеличить значение изменяемого поля на некое целое число и установить граничные условия, типа если х <50, то х+30 инче х=х
Спасибо

Гость
28.01.2016, 11:31

Прошу прощения а можно небольшой пример, в php хэлло ворлд
Спасибо

Добавить комментарий