Translate to

Buscar

28 de marzo de 2010

Al fín, Hello World!

Siguiendo la guía de un libro había hecho un par módulos, pero sin entender realmente lo que hacía.

Ayer asistí al Drupal Camp Perú 2010. En la conferencia de Fernando P. García, "Cómo hacer tu primer módulo en Drupal 6", él siguió un enfoque algo diferente al que había visto en los libros. Partió de lo que quería que apareciera en la página, dada una ruta, y cómo sería el módulo para lograrlo. Usó el hook_menu().

Hello World!
Basado en el módulo que mostró Fernando, practiqué en casa hacer un módulo que simplemente dijera 'Hello World!'. Por alguna razón, cuando eso me resulta me siento más seguro para poder continuar :)

Lo que deseo es un módulo que, al ingresar a la ruta helloworld, muestre 'Hello World!'.

En el directorio modules apropiado, creé el directorio helloworld, y dentro los archivos helloworld.info y helloworld.modules.

helloworld.info
name = Hello World
description = Hello World module
core = 6.x

helloworld.module

/**
 * Implementation of hook_menu().
 */
function helloworld_menu() {
    $items['helloworld'] = array(
        'title' => 'Hello World',
        'page callback' => 'helloworld_page',
      'access arguments' => array('access content'),
    );
    return $items;
}

function helloworld_page() {
    return 'Hello World!';
}

Me interesó revisar la lista de módulos (admin/build/modules) mientras se hacía esto. Para que aparezca el item correspondiente al nuevo módulo es necesario tener el .info con su contenido y el .module, no importa vacío.
Una vez definido el .module, es necesario limpiar el cache (por ejemplo entrando a admin/settings/performance, Clear cached data), para que se refleje el cambio al acceder al url http://localhost/drupal/helloworld, donde drupal es el nombre de mi site en este caso.

Hello You!

Lo que deseo es un módulo que, al ingresar a la ruta hello/Antonio, muestre 'Hello Antonio!'.

En el directorio modules apropiado, creé el directorio hello, y dentro los archivos hello.info y hello.modules.

hello.info
name = Hello
description = Hello module
core = 6.x

hello.module

/**
 * Implementation of hook_menu().
 */
function hello_menu() {
  $items['hello'] = array(
    'title' => 'Hello',
    'page callback' => 'hello_page',
    'access arguments' => array('access content'),
  );
  return $items;
}

function hello_page($name='World') {
  return 'Hello '.$name.'!';
}

Una vez definido el .module, es necesario limpiar el cache (por ejemplo entrando a admin/settings/performance, Clear cached data), para que se refleje el cambio al acceder al url http://localhost/drupal/hello/Antonio, donde drupal es el nombre de mi site en este caso.

Frameworks y Drupal

Framework... con qué se come?
Recuerdo que, cuando empecé a programar en PHP, navegando por Internet encontraba algunas veces la palabra framework.

Primero pasaba de largo, pensando que todavía estaría lejos el momento en que estuviera listo para abordar algo que, seguramente por complejo, no había visto en los tutoriales o libros introductorios de PHP. Quizás deberían hablar más sobre eso.

Alguna vez bajé un framework e intenté hacer algo, pero lo dejaba después de un rato, frustrado por no entender dónde poner las cosas para lograr las cosas que quería.
Ya había desarrollado algunas aplicaciones web, principalmente usando el JSP del mundo Java. Con PHP todo era similar pero más simple y ligero, más directo y más rápido, y me empezaba a gustar. Pero no entendía lo de los framework.

Luego, estuve encargado del desarrollo de una aplicación web que debía ser hecha con Struts 1.1. Tardé como un mes en darme cuenta que el framework determinaba una secuencia de trabajo. Eso era. Por eso se llamaba framework. Quizás suene gracioso, pero sinceramente pienso que muchas personas usan frameworks sin entender realmente lo que son.

Después, aprender Struts en Java me ayudó a que fuera luego más fácil volver a intentarlo en PHP, y aprendí CakePHP y otros frameworks más.

Ahora, después de haber desarrollado sin esos frameworks y con ellos, en solitario y en equipo, sin y con estándares declarados, y después de haber reflexionado algún tiempo, tengo algunas ideas y opiniones sobre el tema.

Todos son frameworks
Un framework es, básicamente, una forma de trabajar.

Muchas personas piensan, casi de inmediato, que ser framework es algo exclusivo de Struts, CakePHP, CodeIgniter, Zend, o similares, publicados en un site, con enlaces para descargar y documentación que leer y practicar.

Esos son frameworks famosos pero, en realidad, cada persona y cada equipo de trabajo determina un framework cada vez que hace un desarrollo. Lo que funciona bien se puede volver a usar y lo que no funciona bien se puede probar de otro modo. Con el tiempo se van incorporando nuevos casos y se va puliendo el esquema que, descubrimos un día, se llama framework.

Incluso cuando se usa un framework estandar se determina otro framework al desarrollar, ya que cada equipo lo puede usar de diferente modo para resolver el mismo problema.
Pienso que un framework debería ser entendido de un modo amplio. No sólo como una manera de organizar el código, sino como la manera de trabajar de la gente sobre ese código. Porque ambas cosas están relacionadas. Por ejemplo, si un equipo no comprende MVC, puede tomar un framework MVC como base y en el proceso de desarrollo desfigurarlo hasta llegar a una solución con las mismas, o más, complicaciones de un proyecto no-MVC.

Es decir, un framework tiene un workflow asociado.

Adoptar un framework significa aprender a producir de modo sostenible código que siga cierto esquema. Aprender cómo se debe ver el código, pero a la vez también cómo podría ser un flujo de trabajo que permita hacerlo indefinidamente.

Qué vendría a ser Drupal?
Digamos que desarrollas aplicaciones web habitualmente. Sería bueno que pudieras agregar y quitar funcionalidades fácilmente. Que tuviera una naturaleza modular. ¿Cuántos proyectos has desarrollado que permita incorporar una funcionalidad de ese modo?.

Además, sería muy bueno que esas cosas se pudieran hacer desde la misma interfaz web. ¿Cuantos proyectos has desarrollado que permitan instalar y desinstalar funcionalidades desde la misma página?

Si pudieras hacerlo, llegarías a algo similar a Drupal. Luego, podrías empezar a desarrollar módulos para manejo de usuarios, manejo de contenido, acceso a contenido, subir imágenes, etc. Pero, un momento, Drupal ya tiene módulos para eso y mucho más.

Entonces, incluso aunque pudieras hacer por tí mismo una aplicación a la Drupal, es bastante conveniente usar Drupal y descubrir qué otras cosas más podemos hacer con él.
La web marcó un hito cuando permitió enlazar páginas de información, democratizando la publicación. El wiki marcó otro hito cuando permitió hacerlo usando la misma página para editar, democratizando un poco más las cosas.

Actualmente, gran parte de las aplicaciones web se desarrollan de modo similar a como antes se desarrollaban las páginas web; usando editores externos y profesionales especializados. Pero Drupal nos está acercando más a la posibilidad de hacer el desarrollo completo usando la misma página, y que dependamos menos de otros profesionales para lograr la aplicación web que queremos.

Creo que no hay muchos frameworks que se preocupen de proveer un desarrollo modular o desde la misma página.
Posiblemente, en el futuro, vayan apareciendo más entornos a la Drupal, o tratando de ser más drupables, de modo similar a la explosión web, o la explosión de wikis que hubo después que apareció el primero.
Sí, también me parece buena idea. Así que desde hace un tiempo estoy estudiando Drupal. Felizmente hay bastante material para consultar y gente dispuesta a darnos una mano.

Ya puedo hacer sites con cierta funcionalidad, pero aún no me siento seguro. En especial con el desarrollo de módulos. Me suelo sentir como cuando intentaba aprender MVC por primera vez. Un poco perdido y sin ningun texto ni nadie con una explicación simple y clara.

Entonces, voy escribiendo esta bitácora de mi exploración en Drupal, la Drutacora. Quizás a alguien le ayuden estas notas en su propio viaje.

Más artículos