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.
Комментарии
Спасибо за статью - очень пригодился совет
а если нужно заменить значение поля на пусто?
Это скидка и замена на 0 выводит скидка ноль старая цена равна новой.
нашел решение в views обрабатываю 0 как пусто, или есть более правильное?
$node->field_name = NULL;
спасибо перезаписало но поле все равно выводится как ноль, после редактирования ноды пропадает, кэш сбрасывал, крон запускал
Прошу прощения перезаписал без [LANGUAGE_NONE][0]['value'] и все ок.
Спасибо огромное!
Здравствуйте, а могу я в данной конструкции увеличить значение изменяемого поля на некое целое число и установить граничные условия, типа если х <50, то х+30 инче х=х
Спасибо
можете
Прошу прощения а можно небольшой пример, в php хэлло ворлд
Спасибо
Оставить комментарий