Обновление массового поля?

Я добавил новое (текстовое) поле в тип контента Drupal 7, у которого уже много узлов.

Как заполнить поле значением по умолчанию для всех этих узлов?

35 голосов | спросил daphshez 17 PMpSun, 17 Apr 2011 14:35:53 +040035Sunday 2011, 14:35:53

5 ответов


36

Вы можете использовать EntityFieldQuery , чтобы получить список узлов, а затем обновить поля узла с помощью node_save () :

$ lang = LANGUAGE_NONE; //Замените код ISO639-2, если локализация
$ node_type = 'page'; //Имя машины для типа содержимого

$ query = new EntityFieldQuery;
$ result = $ query
  -> entityCondition ('entity_type', 'node')
  -> свойствоCondition ('type', $ node_type)
  - > выполнение ();

if (! empty ($ result ['node'])) {
  $ nodes = entity_load ('node', array_keys ($ result ['node']));

  foreach ($ nodes as $ node) {
    //Замените field_foo именем машины для обновления.
    //- 0 относится к определенному значению в массиве полей, поскольку, когда поле содержит
    //несколько значений. Если поле имеет только одно значение, оно должно быть 0.
    $ node-> field_foo [$ lang] [0] ['value'] = 'Новое значение';
    node_save ($ узел);
  }
}

Если это одноразовая операция, вы можете использовать Devel модуль Выполнить PHP для запуска вышеуказанного: в противном случае вы можете создать простой пользовательский модуль.

ответил 17 PMpSun, 17 Apr 2011 15:12:28 +040012Sunday 2011, 15:12:28
16

Я бы использовал Массовые операции просмотра и использовал «Выполнять произвольный PHP-скрипт», чтобы сделать по существу пункты выше, но вы не не нужно делать весь дополнительный код, просто маленький фрагмент, который делает то, что вы хотите (например, $ object-> field_foo ['und'] [0] ['value'] = 'some_value' )

ответил rfay 18 PMpMon, 18 Apr 2011 18:02:57 +040002Monday 2011, 18:02:57
6

Если вы хотите только обновить поле с некоторым значением, то более результативной альтернативой принятому ответу будет следующее:

$ lang = LANGUAGE_NONE; //Замените код ISO639-2, если локализация
$ node_type = 'page'; //Имя машины для типа содержимого

$ query = new EntityFieldQuery;
$ result = $ query
  -> entityCondition ('entity_type', 'node')
  -> свойствоCondition ('type', $ node_type)
  - > выполнение ();

if (! empty ($ result ['node'])) {
  $ nodes = entity_load ('node', array_keys ($ result ['node']));

  foreach ($ nodes as $ node) {
    //Замените field_foo именем машины для обновления.
    //- 0 относится к определенному в массиве полей, поскольку, когда поле содержит
    //несколько значений. Если поле имеет только одно значение, оно должно быть 0.
    $ node-> field_foo [$ lang] [0] ['value'] = 'Новое значение';
    field_attach_presave ('node', $ node);
    field_attach_update ('node', $ node);
  }
}

Разница заключается в использовании непосредственно field_attach_presave и field_attach_update функций, которые корректно обновляют только поле узла и пропускают оставшуюся часть процесса сохранения узла. Это может повлиять на то, что не будут вызваны вызовы /сохранение перехвата узлов, «измененная» дата не будет обновлена ​​до текущей даты и т. Д. Согласно вашему варианту использования это может быть лучше, чем использование всего процесса node_save ().

ответил Mirsoft 21 Maypm14 2014, 14:31:05
4

Действительно, VBO (Views Bulk Operations) - хорошее решение. Кроме того, с последними версиями вы найдете вариант «Изменить значения сущности», который обеспечивает очень простой способ обновления языка узлов за одну операцию.

ответил xaa 6 FebruaryEurope/MoscowbWed, 06 Feb 2013 23:20:02 +0400000000pmWed, 06 Feb 2013 23:20:02 +040013 2013, 23:20:02
1

Установите и включите модуль Views Bulk Operations и создайте представление со страничным дисплеем.

Добавить => Массовые операции: поле Content (Content) в поле зрения.

Обратитесь

 введите описание изображения здесь>> </a> </p>

<p> Выберите поля, для которых вы хотите установить значение по умолчанию. </p>

<p> В вашем случае его название. На изображении это теги. </p>

<p> Сохраните представление и перейдите на созданную страницу. Если у вас более одной страницы результатов, вы можете выбрать все элементы на текущей странице, все элементы на всех страницах или вручную установить флажки, соответствующие отдельным узлам. По крайней мере, один флажок должен быть проверен для продолжения. </p>

<p> Теперь вы устанавливаете значение по умолчанию и сохраняете его. </p></div>
										<div class=ответил Smalution 13 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 13 Sep 2016 15:45:38 +0300 2016, 15:45:38

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132