У меня есть существующий тип контента с несколькими узлами. Я только что добавил новое логическое поле со значением по умолчанию «off».
Однако до тех пор, пока я не сохраню заново каждый узел, значение по умолчанию не задано, поэтому представление, которое должно показывать только те узлы, в которых новое поле использует значение по умолчанию, в настоящее время пусто.
Как я могу обновить существующие узлы, созданные до добавления поля, чтобы установить для этого поля значение по умолчанию?
Ответы:
К сожалению, не существует очень простого способа сделать это (кроме VBO / rules), но вот код, который я использую в функциях обновления в моих установочных файлах моего пользовательского модуля, когда мне нужно предварительно заполнить значения полей для определенного типа узла после добавления нового поля ( в этом случае узлы «страницы»):
Другой ручной метод, упомянутый в этом ответе, использует EntityFieldQuery и загружает / сохраняет каждый узел. Больше Drupal-у, но гораздо менее производительный ... (требует полной загрузки узла и сохранения операции для каждого узла!).
источник
entity_get_controller('node')->resetCache($nids);
- в противном случае последующееnode_load()
может загрузить устаревшие данные из кэша, и любыеnode_save()
из этого объекта будет написать , что несвежий данные обратно в базу данных.Лучшая ставка прямо в MySQl. Таблицы будут выглядеть так:
Если вы посмотрите на них, это довольно просто - вам нужно, чтобы я начал с того, как должен выглядеть запрос, или вы в порядке?
источник
Просто попробуйте следующую логику. это гораздо быстрее и обходить все реализации ловушек также. больше деталей . Вы можете написать простой прямой запрос db_select, чтобы получить все nid и зациклить его с этим примером кода.
источник
используя sql, учитывая, что узлы с не заданным значением поля
field_data_field_pr_choix_du_document - таблица, соответствующая моему полю и содержащая одно значение номинала записи с идентификатором сущности, относящимся к узлу
я сделал с помощью вставки SQL ... выберите синтаксис
https://dev.mysql.com/doc/refman/5.5/en/insert-select.html
источник
Установите и активируйте модуль Views Bulk Operations и создайте представление с отображением страницы.
Добавить => Массовые операции: поле Content (Content) в поле зрения.
обращаться
Выберите поля, которые вы хотите установить значение по умолчанию.
Сохраните вид и перейдите на созданную страницу. Если у вас более одной страницы результатов, вы можете выбрать все элементы на текущей странице, все элементы на всех страницах или установить флажки вручную, соответствующие отдельным узлам. Для продолжения необходимо установить хотя бы один флажок.
Теперь вы устанавливаете значение по умолчанию и сохраняете его.
источник
Я нашел простой способ обновить поля в типе контента с помощью этого модуля: Field Defaults
Смотрите скриншот. Вы можете обновить существующий контент со значениями по умолчанию или сохранить существующие значения.
Я проверил его на D7, и он работает.
источник