<rmcreative>

RSS

Drupal, пересохранить все ноды определённого типа

27 марта 2008

По работе занимаюсь в данный момент Drupal. После установки модуля CCK Computed Field встала задача заново сгенерировать все значения вычисляемых полей CCK для всех нод. Для этого был написан вот такой вот кусочек кода:

//Change type here
$type = 'book';
$query = "SELECT nid FROM node where type='$type'";
 
$result = array();
$result = db_query($query);
 
$count = 0;
while ($current_node = db_fetch_array($result)){
  //set_time_limit(999);
  $current_node_id = node_load($current_node["nid"]);
  node_save($current_node_id);
  $count++;
}
echo 'Done... ',$count,' nodes were refreshed.';

Запускается через блок Execute PHP модуля Devel.

Комментарии RSS

  1. №79
    Жилинский
    Жилинский 27 марта 2008 г., 16:20:51

    Мы тут проектик слегка начали на друпале. Не хочешь присоединиться в каком-нибудь качестве ? =)

  2. №80
    Sam
    Sam 27 марта 2008 г., 17:54:15

    Если только поконсультировать...

  3. №81
    Жилинский
    Жилинский 27 марта 2008 г., 17:59:33

    Жаль =) Но если что - обращусь ))

    Дорого ? ;-)

  4. №82
    Sam
    Sam 27 марта 2008 г., 18:05:20

    С ценами лучше в личку ;)

  5. №85
    Антон Исайкин
    Антон Исайкин 29 марта 2008 г., 13:18:38

    Обычно я пишу set_time_limit(0);

    Запись set_time_limit(999) хороша была бы там, где приложение точно уложится в это время, но в процессе может выйти из-под контроля. Тогда придется ребутать апач, а если установлена такая абстракция (999), то программа сама скоро вылетит.

  6. №358
    VladSavitsky
    VladSavitsky 17 июня 2008 г., 16:28:57

    Вместо

    echo 'Done... ',$count,' nodes were refreshed.';

    Должно быть:

    echo 'Done... '.$count.' nodes were refreshed.';

    За скрипт - спасибо. Чтобы не париться со временем выполнения - можно проверять дату последнего изменения ноды и брать те, что не были недавно изменены. Вставить этот сниппет в тело страницы и несколько раз перегрузить страницу, пока не будут все ноды пересохранены.

    Мне, кстати, сниппет понадобился для того, чтобы модуль XML Sitemap взял правильные URL для создания карты сайта...

  7. №359
    Sam
    Sam 17 июня 2008 г., 16:32:28

    На самом деле можно и запятые ;)

    Рад, что скрипт кому-то пригодился.

  8. №360
    VladSavitsky
    VladSavitsky 17 июня 2008 г., 18:19:13

    Да, оказалось, что оператор echo может принимать данные и в такой форме. Спасибо за науку.

  9. №416
    mixa
    mixa 08 июля 2008 г., 2:38:57

    $query = "SELECT nid FROM node where type='$type'";

    нужно

    $query = db_query("SELECT nid FROM {node} where type='%s'", $type);

  10. №417
    Sam
    Sam 08 июля 2008 г., 11:31:49

    Так конечно правильней, но для одного раза можно и не использовать db_query.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.