Hero

Como ejecutar PHP scripts con Drush (Drupal Shell)

Mayo 31, 2013

enzo
PHP
Programación
Drupal
Drush

En algunas ocasiones necesitamos ejecutar acciones en Drupal muy personalizadas y de una única ejecución como por ejemplos algún script para ajustar datos en la base de datos o migración de usuarios y/o contenido.

Al ser una acción de una o pocas ejecuciones lo mas razonable sea crear un script de PHP que ataque directamente el problema, pero a veces esta tarea se complica porque no tenemos acceso a las funciones de Drupal como la abstracción de base de datos y funciones de Drupal para efectuar la carga de nodos y usuarios. La falta de estas funciones nos llevaría muy probable mente a reinventar la rueda o hacer inclusiones parciales de librerías.

Afortunadamente para este tipo de problemas viene Drush a nuestro rescate, a continuación vemos un ejemplo.

  1. Crear script.

Para este ejemplo crearemos un script para obtener un listado de usuarios de nuestro Drupal e imprimirlos en pantalla.

<pre title="script.php"><?php

/*
 * Return uid=>email for all of the users we want to subscribe
 */
function users() {

  $uids_query = 'select uid,name from {users} where uid != 0 order by uid asc limit 0,10'; // Change query to choose your users
  $uids_result = db_query($uids_query);
  $users = array();
  foreach($uids_result as $uid_row) {
    $users[$uid_row->uid] = $uid_row->name;
  }
  return $users;
}

// header
$rows = array(array(dt('User ID'),dt('User Name')));

$users = users();
foreach ($users as $uid => $email) {
  $row = array();
  $row[] = $uid;
  $row[] = $email;
  $rows[] = $row;
}

print_r($headers);

drush_print_table($rows, TRUE);

?>

Como se puede apreciar no se ha realizado ninguna inclusión de alguna librería o archivo, además se han hecho uso de la funciones db_query, drush_print_table y de la función dt para realizar traducciones desde Drush.

El anterior script lo guardamos con el nombre de script.php

  1. Ejecutar el script.

Para ejecutar el script solo debemos ubicarnos dentro de algún lugar que Drush detecte unan instalación de Drupal o también se podría usar por medio de los @aliases de Drush.

El comando de ejecución sería como el siguiente.

$ drush php-script script.php

la salida de este script sería similar a la siguiente.

ID de usuario  User Name
 1              chef
 15             Ale
 35             kendall
 37             rmont
 38             cools
 39             manler
 41             AGraj
 42             kespino
 43             TYauG
 44             Inur0

Al momento de la ejecución del script drush hace un llama al full bootstrap de Drupal y es por eso que todas las librerías y funciones estan disponibles.

Alternativamente se puede ejecutar el script con opciones de línea de comandos y obtener los valores a través de la funciones drush_get_option (“opción-name ’), y los argumentos de línea de comandos se puede acceder ya sea a través drush_get_arguments (), que devuelve todos los argumentos en un arreglo o usando drush_shift (), que elimina el siguiente argumento de la lista y la devuelve.

Espero que les haya sido de ayuda y sea una razón mas para usar Drush cada día más.

Recibe consejos y oportunidades de trabajo 100% remotas y en dólares de weKnow Inc.