Як я можу швидко відновити всі вузли на своєму веб-сайті (щоб запустити правило, яке активується під час оновлення вмісту)?


24

Я допустив деякі помилки, налаштовуючи певний тип вмісту на своєму сайті. Щоб виправити ці помилки, я зробив правило, яке виконує деякі дії "коли наявний вміст оновлюється". Однак я не хочу переглядати свій сайт і вручну зберігати всі вузли один за одним. Чи є спосіб скористатися Правилами або Переглядами групових операцій для швидкого відновлення всіх вузлів?

Відповіді:


22

VBO має "Виконати код PHP". Запустіть його та введіть "node_save ($ особи);" (без лапок) у текстовому полі. Це зробить трюк, обробляючи тайм-аути за вас.


1
Ах, набагато швидше :)
Клайв

5
У VBO є опція "Зберегти вміст", яка зробить те ж саме, не пишучи власний PHP.
stevenw00

Не вдалося знайти параметр "Зберегти вміст", але метод php, який ви згадали, спрацював чудово! Спасибі!
хокей2112

Спробував і php, і vbo методи без успіху. У моєму шафі лише лише інструкція "Зберегти" належним чином оновлює мітки для настільного поля. Дивно ...
Bisonbleu

14

Я не знаю про правила або VBO, але ви можете використовувати короткий фрагмент коду, щоб отримати той самий результат:

$nids = db_query('SELECT nid FROM {node}')->fetchCol();
foreach (node_load_multiple($nids) as $node) {
  node_save($node);
}

Якщо у вас багато вузлів, які можуть зайняти трохи часу, тому, якщо ваш сервер дозволяє, було б хорошою ідеєю продовжити ліміт часу на початку цього коду, можливо, необмежену кількість, якщо це вимкнено :

set_time_limit(0);

12

Ви можете використовувати функцію node_mass_update () :

module_load_include('inc', 'node', 'node.admin');
$nids = db_query('SELECT nid FROM {node}')->fetchCol();
node_mass_update($nids, array());

Це дуже добре, оскільки вам не потрібно дбати про обмеження часу. Пакетний процес оновлення вузлів розпочнеться автоматично, якщо є більше 10 вузлів.


5
Відмінно працював на понад 200 000 вузлів. Обробляє партію за вас. Якщо у вас включений модуль devel, ви можете просто вставити вищевказаний код на сторінку '/ devel / php'
2pha

1
Блискуче рішення, працює у фоновому режимі, тому немає шансів на тайм-аут чи вбивство на сайтах
Daniel Waters

5

Оновлення: я щойно створив Resave All Nodes . Наразі вона містить лише форму для запуску пакетного процесу для збереження всіх вузлів вибраних типів вузлів. В даний час в альфа. Я також планую додати команду Drush (бета) та деякі тести (стабільні).

Скриншот форми Drupal Resave All Nodes


Там зберегли вузли . Він призначений для використання на кронових трас. Але ви також можете його запустити вручну. Просто виберіть, який тип контенту потрібно відредагувати.

Перш ніж запустити ручне оновлення, натиснувши "Зберегти вузли зараз", вам доведеться одного разу "Зберегти конфігурацію" (вибрав тип крона та тип вмісту).


2

Перейдіть до адміністратора / контенту та фільтруйте за типом вмісту - опубліковано лише. Виберіть усе, а потім виберіть "змінити значення" з операцій, що випадають. Клацніть «виконати». На наступній сторінці виберіть 'статус' у властивостях та залиште опублікованим. Натисніть "Далі" Усі опубліковані вузли будуть збережені без змін.

Повторіть для неопублікованих вузлів (але виберіть неопублікований як властивість).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.