Entradas

Drupal sí, drupal no

Ciertamente puedo tener sentimientos encontrados respecto a Drupal. Por un lado, muestra una forma rara de hacer las cosas, resulta largo de aprender, la configuración guardada en base de datos dificulta el desarrollo y seguimiento de versiones de sites , hay copyrights raros en un proyecto open source, migraciones masivas empujadas desde arriba, el sentimiento creciente de que el auto armable en casa se va convirtiendo en un trailer... Por otro lado, permite armar cosas modularmente, tiene una comunidad entusiasta, es adoptada como solución por entidades importantes, la esperanza de que tal vez las buenas intenciones lleven a una versión ligera que permita apreciar mejor su encanto, y que la comunidad sea más empujada desde abajo, las diferencias mejor admitidas... Quizas piense alguien que soy un soñador, pero no soy el único... 8-P si uno busca en Google, puede encontrar puntos de vista opuestos a Drupal, total o parcialmente. Yo no soy opuesto, ni estoy a favor ciegamente. ...

Pensando con Drupal

Imagen
Me estoy dando cuenta de que cuando me consultan por el desarrollo de un site, empiezo a pensar en cómo lo puedo hacer en términos de Drupal. Hacer un site típico en Drupal cuesta un poco de resolver las primeras veces pero luego es bastante más llevadero. Cuando hay algo nuevo que implementar con Drupal, es similar, cuesta un poco al comienzo pero luego se hace más llevadero. Y es más fácil si existe un módulo que nos acerque a la solución. Con Drupal y otros frameworks pasa eso. Aunque ya sepamos cómo se hace algo tenemos que volverlo a aprender en términos del framework. Pero lo hacemos porque nos abre las puertas a muchas cosas que aún no sabemos. Sin embargo, eso no significa que todas las soluciones en términos de Drupal sean más simples, eficaces o elegantes que las que podríamos hacer sin él. Pero es un precio que se paga por el confort. Es como cuando se toma un vehículo para viajar. Cuanto más grande y pesado tiende a ser menos maniobrable. Es más fácil d...

Bloques con id descriptivos

Imagen
En Drupal , los bloques suelen tener id numéricos, lo que dificulta el mantenimiento de los estilos que se les aplica (el id numérico de un block puede cambiar si se lo elimina y vuelve a crear, por ejemplo). Puede ser más conveniente usar id descriptivos. Para eso, se puede aplicar algo como: template.php ... /** * Devuelve un id textual para el block * http://www.bluepiccadilly.com/2011/12/give-your-drupal-blocks-more-descriptive-html-id-attribute */ function block_id (&$block) { $info = module_invoke($block->module, 'block', 'list'); if ($info[$block->delta]['info']) { $block_id = 'block-' . $block->module . '-' . $info[$block->delta]['info']; $block_id = str_replace(array(' ', '_'), '-', strtolower($block_id)); return preg_replace('/[^\-a-z0-9]/', '', $block_id); } else { return 'block-' . $block->module . '-' . $block->delta; ...

La forma Drupal

Imagen
Al elaborar un site, a veces me pregunto por qué usar un framework como Drupal. Para hacer algo, primero veo si puedo hacerlo con los módulos que tengo, si no, veo si hay módulos que me acerquen a lo que se necesita, si no, programo lo que se necesita. Otros desarrolladores prefieren usar un framework que les permita programar con soltura lo que se necesita. También pueden revisar antes si ya tienen algo similar o si alguien más lo tiene. ¿Cuál es la diferencia? La forma en que Drupal tiene las soluciones. Quizás no sea perfecta, ni simple, ni elegante, ni eficiente, pero es algo como un estándar. Hay una cierta forma de reutilizar soluciones previas. Puedes ponerles un nombre y publicarlas de modo que otros también puedan usarlas. Hay algo en la forma Drupal que tiene su encanto. Podría ser mejor, pero algo es algo :-)

Divagando en Drupal

Me parece que: Drupal tiene una idea brillante en su forma de proveer extensibilidad. Con el tiempo: los desarrolladores que notaron eso formaron una comunidad. la fama de Drupal fue aumentando. el desarrollo con Drupal se volvió una oportunidad de negocio. Cuando se hizo notorio el negocio, se hizo notorio el comité que guía la evolución de Drupal. La evolución de Drupal no es directamente controlada por la comunidad. Es hecha por la comunidad, pero no necesariamente para la comunidad. El comité motivó a la comunidad para que hiciera algunos saltos evolutivos. Quizás la versión más exitosa ha sido Drupal 6. Drupal 7 parecía un salto evolutivo natural, sin embargo quizás estuvo más inspirado en el desarrollo de la iniciativa Acquia. Saltar de Drupal 6 a Drupal 7 no ha resultado algo fácil. Drupal 8 buscaría volver a Drupal algo más genérico. ¿Vale la pena gastar energía en saltar de Drupal 6 a Drupal 7, o es mejor guardarla para saltar a Drupal 8 cuando llegue el mo...

HTML + Javascript para usar cualquier framework

Lea el artículo original en Puroguramu .

Por qué la Programación Orientada a Objetos es mala para Drupal

artículo de Matt Buttcher (2010/10/13), traducción libre de Antonio Kobashikawa Nota de traductor : Aunque Drupal se ha convertido en un movimiento poderoso, parece que, en el interés por capitalizar algunos negocios asociados, se han tomado decisiones que están distanciando al producto de sus objetivos primarios para la comunidad. Algunas personas han estado notando eso desde hace algún tiempo y me parece interesante el tema. He conducido o contribuido a docenas de proyectos Open Source. Y todo mi código ha sido siempre Orientado a Objetos, con una excepción. Esa excepción es Drupal. Java, Python, PHP, y aún OO Perl... soy un desarrollador que teje con la lana del OO. Así que esto puede sonar chocante para cualquiera que me conoce, pero mi argumento es que la OO es mala para Drupal. Créame que decirlo no es algo notable en mi vida de desarrollador. Me siento como si le dijera a mi niño que debe faltar al colegio, sólo porque tal nivel de sofisticación no es necesaria en su vida...

Acceder a los valores de un nodo con javascript

Imagen
Una forma simple de hacer esto, es a través de Drupal.settings , que es un objeto siempre disponible. Para agregar el nodo a Drupal.settings , lo hago en alguna función adecuada, por ejemplo en la implementación del hook_form_alter() , ya que allí se hacen las alteraciones de los formularios de edición de nodos. Por ejemplo: function mymodule_form_alter(&$form, &$form_state, $form_id) {   switch ($form_id) {     case 'my_node_form':       ...       $node = node_load($form['nid']['#value']);       // port to javascript       if ($node) {         drupal_add_js(array('node' => $node), 'setting');       }       ...       break;     ...   } } Luego, en algún javascript que se invoque para el tipo my_node , se puede usar algo como:   var node = Drupal.settings.node;   var nid = Drupal.settings.node...

Resolviendo el cambio de alias con views_customfield

Imagen
Views Custom Field  es un módulo que permite colocar PHP como contenido de un campo de una vista. Normalmente, uno usa la variable $data para acceder a los valores de los campos que se hayan definido. Por ejemplo, $data->nid permite obtener el valor de nodo y haciendo print_r($data) uno puede explorar otros valores que usar. Pero hay un problema con los valores de los campos CCK. El nombre de los campos que contienen sus valores en $data corresponden a aliases que no son constantes. Por ejemplo, cuando usa filtros expuestos, podrá encontrar que ese nombre de campo en $data cambia según qué filtro esté aplicando. Una forma de solucionar esto es usar $this->view , también disponible, para obtener el alias adecuado en cada caso. Es decir, en lugar de usar $data->some_field_alias usar $data->{$this->view->field['field_id']->field_alias} Este es un ejemplo real: <?php $cliente_nid = $data->{$this->view->field['field_client_nid'...

Aplicando un patch en Windows

Imagen
El comando patch, disponible en Linux, usualmente no está disponible en Windows. Cuando uno quiere aplicar algún patch, suele encontrar una traba de solución no tan fácil. En lugar de las recomendaciones de instalar Cygwin, o algo parecido, alguna vez use Aptana (un derivado de Eclipse) para aplicar un parche. Hoy estoy instalando Simpletest y la documentación indica aplicar  patch -p0 < path/to/simpletest/D6-core-simpletest.patch y ya no recuerdo cómo lo hice con Aptana :-S Tampoco quisiera instalar Cygwin sólo para eso. Esta vez, noto que tengo instalado Git para Windows ( https://git-scm.com/download/win ), hago click derecho sobre el directorio drupal y elijo Git Bash Here . Hago patch --help para comprobar que cuento con el comando y luego: $ patch -p0 < sites/all/modules/simpletest/D6-core-simpletest.patch patching file `install.php' Hunk #1 succeeded at 19 (offset -1 lines). patching file `includes/bootstrap.inc' Hunk #1 succeeded at 1111 (offset -1 li...

Generación modular de HTML

Imagen
Actualmente, cuando desarrolla un sitio usando cierto framework, no lo puede modificar con otro. Si está metido en esto, puede parecer obvio y hasta natural. Pero, si lo vemos en perspectiva, es algo así como una limitación por diseño. Algo que se podría mejorar. Lea el artículo original en  Puroguramu: Generación modular de HTML

Redirigir, excepto si se está recuperando contraseña

Imagen
El requerimiento es que los usuarios logueados sean redirigidos a la página proyectos-nuevos . Eso se puede implementar usando actions/triggers . Es decir, el action redirigir a proyectos-nuevos cuando ocurre el trigger login del usuario. Cuando un usuario solicita recuperar su contraseña, se le facilita un enlace que conduce a una página de acceso provisional y luego, normalmente ocurre una redirección a la edición de su cuenta. Sin embargo, la redireccion con actions/triggers interfiere con esto y conduce también a este caso hacia proyectos-nuevos . Para solucionarlo, es mejor usar el módulo rules . Instalado rules, en  admin/rules/trigger se puede agregar una nueva regla que conduzca a proyectos-nuevos cuando ocurra el login. Produce el mismo efecto que al usar actions/triggers, incluso el de interferir con la redirección de recuperación de contraseña. Para prevenir la redirección en ese caso, se puede agregar una condición PHP a la regla: if (arg(0) == 'use...

Nombre real en el email de registro

Imagen
Normalmente, en el proceso de registro con Drupal, el usuario recibe un email que se refiere a él usando su nombre de usuario. Si entra a  admin/user/settings puede ver que existen ciertos tokens propios, entre los que esta  !username . ¿Y si se desea mostrar el nombre real? Por ejemplo, Antonio Kobashikawa, en lugar de akobashikawa. Una forma es usando hook_mail_alter() . Por ejemplo: // Custom email registration message function misc_mail_alter(&$message) {   // http://drupal.org/files/issues/realname_token_system_mail_notifications.patch   $midparts = explode('_', $message['id'], 2);   if ($midparts[0] == 'user' || $midparts[0] == 'logintoboggan') {     switch ($midparts[1]) {       case 'register_no_approval_required':         $realname = trim($_POST[' field_profile_nombres '][0]['value']) . " " . trim($_POST[' field_profile_apellidos '][0]['value']);         $message['subject'] =...

Entorno Drupal en Linux Mint

Imagen
Luego de usar Ubuntu Natty Narwhal por algunas semanas, estoy probando Linux Mint 11 . Felizmente es un derivado de Ubuntu, así que puedo usar lo que aprendí allí. Los pasos que describo a continuación servirían también en Ubuntu Natty Narwhal. Una de las razones por la que decidí probar Linux Mint fue la incomodidad de usar el escritorio Unity .  Ahora, en Linux Mint, siento que las cosas son más simples y claras.  Para instalar un entorno para trabajar con Drupal: Usé Synaptic Package Manager marcando los siguientes paquetes (y respondiendo afirmativamente a sus requerimientos de dependencias): apache2 php5 mysql-server mysql-client php5-mysql Y otras que me parecieron adecuadas (aunque no sabría decir cuáles son estríctamente necesarias): php5-gd php5-curl php5-xmlrpc php5-sqlite php5-mcrypt php5-xdebug php5-adodb php5-geoip php-pear En el caso de mysql-server , en algún punto solicitará la contraseña del root para proseguir. Como instalé primer...

Geany con Zen Coding

Imagen
Geany es un editor de texto disponible para Linux y también para Windows. Zen Coding es una utilidad que permite generar HTML a partir de una expresión abreviada. Por ejemplo, resulta práctico que algo como 'html:xs' pueda expandirse en el esqueleto completo de un documento XHTML. Hay plugins que permiten tener la funcionalidad de Zen Coding en editores como Notepad++ o gEdit. Para Geany, está tardando un poco. Pero hay una manera, sugerida en el artículo http://damour-ua.com/?p=65 que puede ayudar mientras tanto. Descargar el archivo  http://damour-ua.com/files/zen.zip y descomprimirlo en algún lugar. Por ejemplo, yo lo coloqué como /home/rulo/Bin/zen En Geany, entrar a Edit, Format, Send Selection To, Set Custom Commands y colocar allí una línea como: python /home/rulo/Bin/zen/1.py Para probar la funcionalidad, en un documento de Geany, ingrese una expresión zen coding, como html:xs , selecciónela y pulse CTRL+1. Referencias http://damour-ua.com/?p=65 ...

Drupal 6 con Admin Menu, Admin Theme, Seven, Bartik Mod

Hacen una bonita combinación. Admin Menu http://drupal.org/project/admin_menu Coloca un menú dinámico en el top de la página. Se puede indicar que mantenga la posición aunque haya scroll hacia abajo. Una vez habilitado, puede entrar a la configuración de su tema de administración y quitar el bloque Navigation (Navegación), ya que contiene básicamente los mismos items. Admin Theme http://drupal.org/project/admin_theme Agrega funcionalidades al Administration Theme (admin/settings/admin). Entre ellas, poder indicar en qué otras páginas usar también el tema de administración, o en cuáles no. Seven http://drupal.org/project/seven Un tema simple y agradable destinado a administración. Hace juego con Bartik. Bartik Mod http://kahthong.com/2010/10/bartik-drupal-6-theme-backported http://theme.thanage.eu/node/9 Bartik es el tema oficial de Drupal 7. Aunque no hay una versión oficial para Drupal 6, están estos ports disponibles.

Mostrando nodos con bloques asociados

Imagen
Lo que se requiere es mostrar páginas, cada una de las cuales tiene un banner superior y un banner lateral. Además, que ambos banners sean fácilmente editables. Quizás se pueda resolver con relativa facilidad usando Panels, pero tengo problemas usando ese módulo en un servicio de hosting que limita la memoria para PHP a 32 MB. Idea Que los banners sean nodos asociados a un tipo principal (usando CCK, node reference). La presentación sería usando bloques. Los bloques que contienen a los nodos se definirían usando Views. Implementación Las páginas son nodos de tipo page . Creo el tipo de contenido banner_superior . En mi caso, contiene un CCK imagefield. Creo una vista que provee una lista de nodos de tipo banner_superior. No es necesario definir un display, como se verá en el paso 4. En el tipo de contenido page, agrego el campo field_page_banner_superior , de tipo node reference , con widget tipo select . En la configuración de este campo, indico que el select use los v...

Unobstrusive wev dev

Imagen
Lea el artículo original en  Unobstrusive web dev .

Un entorno de desarrollo Drupal portable con XAMPP y FreeCommander

Imagen
Uso habitualmente Windows 7 y XAMPP 1.7.1 (por la compatibilidad con Drupal 6.x). Hay proyectos que avanzo en casa y hay otros que avanzo en la oficina. En muchas ocasiones requiero consultar cómo hice algo en tal o cual site y me gustaría poder tenerlos al mismo tiempo. Portatil Ir cargando una laptop podría ser ser, pero creo que preferiría otra opción. USB Podría tener mi entorno de desarrollo en el USB y trabajar directamente allí. XAMPP tiene versiones portables que se pueden instalar en un USB. XAMPP Lite es incluso más ligera. Sin embargo, mi experiencia es que es realmente muy lento. Hosting Un tiempo probé hacer el desarrollo directamente en un hosting. La ventaja es que el desarrollo se hace en un solo lugar. La desventaja es que la edición via FTP es mucho más lenta. Además, es una opción vulnerable porque el hosting puede quedar fuera de servicio o haber problemas de conectividad, lo que me ocurrió algunas veces (es para ponerse a pensar, si uno ha puesto bastan...

uphp para Drupal

Imagen
En días recientes, navegando por Internet, me topaba con las opiniones de algunos desarrolladores sobre Drupal. Comparado con otros frameworks, como los tipo MVC, CakePHP o similares, Drupal es raro. Brillante, pero raro. No es MVC y se apoya, más bien, en una arquitectura que usa hooks para permitir la colaboración de los módulos que se instalen. Drupal tiene su modo particular de hacer las cosas y cuesta un poco acostumbrarse. A su modo de tratar los formularios, de hacer los temas, de intervenir en el flujo. Sin embargo, el hecho es que Drupal está floreciendo más rápido que otros frameworks. Muchos puristas de OOP critican que no use objetos, aunque Drupal dice que implementa los conceptos de OOP de modo diferente. Quizás sea eso. Que Drupal ofrece una forma diferente de hacer las cosas que, una vez que se aprenden, ayuda a ser más colaborativo y productivo. Pero, si uno tiene un sistema modelado en OOP tradicional, puede encontrar algunos inconvenientes para pasarlo a Drupal...