Procesamiento de operaciones en lote usando Drush

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.

--
-- Table structure for table `split_users`
--

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

<?php

$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

drush php-script author.php

y listo, la base comenzó a actualizarse.

Etiquetas: