xandeadx.ru Блог музицирующего веб-девелопера

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

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

Ниже, пример изменения значения текстового поля 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
Похожие записи

Комментарии RSS

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

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

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

$node->field_name = NULL;

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

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

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

можете

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

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании