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 по email OK
Мы тут проектик слегка начали на друпале. Не хочешь присоединиться в каком-нибудь качестве ? =)
Если только поконсультировать...
Жаль =) Но если что - обращусь ))
Дорого ? ;-)
С ценами лучше в личку ;)
Обычно я пишу set_time_limit(0);
Запись set_time_limit(999) хороша была бы там, где приложение точно уложится в это время, но в процессе может выйти из-под контроля. Тогда придется ребутать апач, а если установлена такая абстракция (999), то программа сама скоро вылетит.
Вместо
echo 'Done... ',$count,' nodes were refreshed.';
Должно быть:
echo 'Done... '.$count.' nodes were refreshed.';
За скрипт - спасибо. Чтобы не париться со временем выполнения - можно проверять дату последнего изменения ноды и брать те, что не были недавно изменены. Вставить этот сниппет в тело страницы и несколько раз перегрузить страницу, пока не будут все ноды пересохранены.
Мне, кстати, сниппет понадобился для того, чтобы модуль XML Sitemap взял правильные URL для создания карты сайта...
На самом деле можно и запятые ;)
Рад, что скрипт кому-то пригодился.
Да, оказалось, что оператор echo может принимать данные и в такой форме. Спасибо за науку.
$query = "SELECT nid FROM node where type='$type'";
нужно
$query = db_query("SELECT nid FROM {node} where type='%s'", $type);
Так конечно правильней, но для одного раза можно и не использовать db_query.