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