I just discovered another problem, I am using an access control module, so I had to add 2 functions so my user could load/save any node: function mymodule_loadAnyNode($nid) { if ($nid==0) return FALSE; global $user; static $orig_user = array(); array_push($orig_user, $user); $user = user_load(1); $node=node_load($nid); $user = array_pop($orig_user); return $node; } function mymodule_saveAnyNode($node) { if ($nid==0) return FALSE; global $user; static $orig_user = array(); array_push($orig_user, $user); $user = user_load(1); $return=node_save($node); $user = array_pop($orig_user); return $return; } 2010/4/20 Mukesh Agarwal <mike4u4ever2001@gmail.com>:
Try changing $node->uid.. The timestamps will have to change when you update a node.. it is necessary for many modules to be identified of the change like search and xmlsitemap
On Tue, Apr 20, 2010 at 3:43 PM, Lluís Forns <enboig@gmail.com> wrote:
My problem right now is node_save itself: uid and timestamps are changed by node_save. Is there a way to avoid that? Or should I reset these fields with db_query("UPDATE ...")?
2010/4/20 Lluís Forns <enboig@gmail.com>:
This is the way I am following now. I hope my code will fix all the "broken" nodes.
2010/4/20 Steven Jones <steven.jones@computerminds.co.uk>:
Hi Lluís,
You can use Drupal's Batch API to process large sets of objects like this. Documentation for the API is here:
http://api.drupal.org/api/group/batch
And it includes an example for iterating over all nodes.
Hope that helps!
Regards Steven Jones ComputerMinds ltd - Perfect Drupal Websites
Phone : 024 7666 7277 Mobile : 07702 131 576 Twitter : darthsteven http://www.computerminds.co.uk
On 20 April 2010 08:38:19 UTC+1, Lluís Forns <enboig@gmail.com> wrote:
I have some modules creating nodes calling directly node_save() and now when trying to rebuild permissions table drupal fails at a random node.
I think this is caused because of some bad created nodes, and I thing I have found a way to fix them; but it fail because of memory limit. Is there a way to make node_load() not store nodes in cache? (I have around 30k nodes)
Thanks
<?php function mymodule_update_6008() { $ret=array(); $res=db_query("SELECT nid, type FROM {node}"); while ($row=db_fetch_array($res)){ $prenode['type']=$row['type']; $prenode=(object)$prenode; $node_new=node_object_prepare($prenode); $node_old=node_load($row['nid']); foreach($node_old AS $key => $value) { $node_new->$key = $value; } node_save($node_new); } } ?>
-- *Les normes hi són perquè hi pensis abans de saltar-te-les *La vida és com una taronja, què esperes a exprimir-la? *Si creus que l'educació és cara, prova la ignorància. *La vida és com una moneda, la pots gastar en el que vulguis però només una vegada. *Abans d'imprimir aquest missatge, pensa en el medi ambient.
-- *Les normes hi són perquè hi pensis abans de saltar-te-les *La vida és com una taronja, què esperes a exprimir-la? *Si creus que l'educació és cara, prova la ignorància. *La vida és com una moneda, la pots gastar en el que vulguis però només una vegada. *Abans d'imprimir aquest missatge, pensa en el medi ambient.
-- *Les normes hi són perquè hi pensis abans de saltar-te-les *La vida és com una taronja, què esperes a exprimir-la? *Si creus que l'educació és cara, prova la ignorància. *La vida és com una moneda, la pots gastar en el que vulguis però només una vegada. *Abans d'imprimir aquest missatge, pensa en el medi ambient.
-- Cheers, Mukesh
-- *Les normes hi són perquè hi pensis abans de saltar-te-les *La vida és com una taronja, què esperes a exprimir-la? *Si creus que l'educació és cara, prova la ignorància. *La vida és com una moneda, la pots gastar en el que vulguis però només una vegada. *Abans d'imprimir aquest missatge, pensa en el medi ambient.