Я добавил новое (текстовое) поле в тип контента Drupal 7, который уже имеет много узлов.
Как заполнить поле значением по умолчанию для всех этих узлов?
Вы можете использовать EntityFieldQuery
для получения списка узлов, а затем обновить поля узла с помощью node_save()
:
$lang = LANGUAGE_NONE; // Replace with ISO639-2 code if localizing
$node_type = 'page'; // Machine name of the content type
$query = new EntityFieldQuery;
$result = $query
->entityCondition('entity_type', 'node')
->propertyCondition('type', $node_type)
->execute();
if (!empty($result['node'])) {
$nodes = entity_load('node', array_keys($result['node']));
foreach($nodes as $node) {
// Replace field_foo with the machine name of the field to update.
// - 0 refers to specific value within the field array, for when the field contains
// multiple values. If the field only has one value, it should be 0.
$node->field_foo[$lang][0]['value'] = 'New Value';
node_save($node);
}
}
Если это разовые операций, вы можете использовать Devel модуль Выполнение PHP функции для запуска выше: в противном случае, вы можете создать простой пользовательский модуль.
Я бы использовал Views Bulk Operations и использовал бы «Выполнить произвольный PHP-скрипт», чтобы выполнить, по существу, перечисленные выше пункты, но вам не нужно делать весь дополнительный код, только маленький фрагмент, который делает то, что вы хотите (например
$object->field_foo['und'][0]['value'] = 'some_value'
)источник
Если вы хотите обновить только поле с некоторым значением, то более производительная альтернатива принятому ответу такова:
Разница заключается в использовании напрямую
field_attach_presave
иfield_attach_update
функций, которые корректно обновляют только поле узла и пропускают оставшуюся часть процесса сохранения узла. Это оказывает влияние на то, что никакие перехваты предварительного сохранения / сохранения узла не будут вызываться, «измененная» дата не будет обновлена до текущей даты и т. Д. В соответствии с вашим вариантом использования может быть лучше использовать весь процесс node_save ().источник
Действительно, VBO (Views Bulk Operations) является хорошим решением. Кроме того, в последних версиях вы найдете опцию «Изменить значения сущностей», которая обеспечивает очень простой способ обновления языка узлов за одну операцию.
источник
Установите и включите модуль Views Bulk Operations и создайте представление с отображением страницы.
Добавить => Массовые операции: поле Content (Content) в поле зрения.
обращаться
Выберите поля, которые вы хотите установить значение по умолчанию.
В вашем случае это название. На изображении это теги.
Сохраните вид и перейдите на созданную им страницу. Если у вас есть более одной страницы результатов, вы можете выбрать все элементы на текущей странице, все элементы на всех страницах или установить флажки вручную, соответствующие отдельным узлам. Для продолжения необходимо установить хотя бы один флажок.
Теперь вы устанавливаете значение по умолчанию и сохраняете его.
источник