Seguro hay muchas formas de hacerlo, ésta es una.
Había que inyectar 2 campos (apellidos y nombres) con contenido procedentes de una tabla que no era parte de Drupal.
CREATE TABLE IF NOT EXISTS `split_users` (
`nid` int(5) DEFAULT NULL,
`uid` int(5) DEFAULT NULL,
`content_type` varchar(6) DEFAULT NULL,
`names` varchar(35) DEFAULT NULL,
`firstname` varchar(22) DEFAULT NULL,
`lastname` varchar(26) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `split_users` (`nid`, `uid`, `content_type`, `names`, `firstname`, `lastname`) VALUES
(6206, 40408, 'author', 'Lawrence S. Hamilton', 'Lawrence S.', 'Hamilton'),
(6208, 40410, 'author', 'Jill Carr-Harris', 'Jill', 'Carr-Harris');
El código que usé fue
$sql = "SELECT * FROM {split_users}";
$result = db_query($sql);
while($row = db_fetch_object($result)){
$items[$row->nid] = array(
'firstname' => $row->firstname,
'lastname' => $row->lastname,
'names' => $row->names,
'nid' => $row->nid,
);
}
/*
$items['21685'] = array(
'firstname' => 'Juan',
'lastname' => 'Dumas',
'names' => 'Juan Dumas',
'nid' => 21685,
);
*/
foreach($items as $k => $v){
$node = node_load($k);
if(isset($node)) {
$node->field_lastname[0]['value'] = $v['firstname'];
$node->field_firstname[0]['value'] = $v['lastname'];
node_save($node);
print "node " . $v['nid'] . " was updated \n";
}
else {
print "node " . $v['nid'] . " was not updated \n";
}
}
?>
Luego puse dentro de un archivo, llamado por ejemplo author.php y lo puse dentro del folder theme de Drupal. Luego ejecute el comando
y listo, la base comenzó a actualizarse.