Filtrado de contenidos por taxonomías en los panels de nodos (Drupal)

Ver Comentarios

Posted on : 28-02-2011 | By : Carlos Cordero | In : Drupal, PHP, Software

Hoy vamos con un truco para todas aquellas personas que utilizan el módulo de Panels en Drupal y quieren limitar la visualización de distintos widgets de contenidos en paneles de tipo nodo, dependiendo de la taxonomía a la que pertenezca el nodo visualizado.

Dentro del panel que estemos configurando (supongo que todos nuestros nodos tiran de un mismo panel), añadimos un contenido nuevo, pongamos un banner que solo queremos que salga en los nodos que pertenecen a la taxonomía/taxón “XYZ”. Para limitarlo, solo tenemos que añadir a dicho widget una nueva regla de visibilidad (Visibility rules), seleccionar que será de tipo “code PHP” e introducir el siguiente código:

$clave = 'XYZ';
$q = explode("/", $_GET['q']);if(count($q) > 1)
{$node = node_load($q[1]);
$terms = taxonomy_node_get_terms($node);
foreach($terms as $term) {if($term->name == $clave)
 {return TRUE;}}}return FALSE;

Por supuesto, no olvidéis indicar que el tipo de contenido introducido es PHP. Cambiamos “XYZ” por el nombre de la categoría en la cual queremos que salga y… listo!

Un proyecto más para recordar

Ver Comentarios

Posted on : 27-02-2010 | By : Carlos Cordero | In : Drupal, Enlaces, Internet, PHP

Ha costado, ha sido más duro de lo esperado, pero finalmente el jueves lanzamos la nueva versión de Practicopedia. Ha sido bastante más de medio año de proyecto, con quizás demasiadas manos metidas dentro en un principio pero que al final ha podido salir a la luz, y bien que lo ha hecho.

Este es un claro ejemplo de Drupal llevado al extremo de la personalización y “toqueteo”, pero no ha hecho más que volver a demostrar el potencial que tiene este CMS para crear verdaderas aplicaciones que puedan ser utilizadas como base de negocio de una empresa.

Ya es la hora de que entren aquellas personas que van a dedicarse al mantenimiento evolutivo del proyecto, y sólo puedo esperar que lo traten con mucho mimo.

Practicopedia

Cesar y Alex han tenido una gran parte de la “culpa” de que esta nueva versión viese la luz, al segundo de ellos, Alex, mucha suerte en Asturias, vas a vivir como un rey y a ser muy feliz.

Ahora, como corresponde a este negocio (al igual que muchos otros), tocará cerrar un libro y después de un par de días de vacaciones (que creo que me merezco ;) ), empezaremos con un nuevo proyecto, todo nuevo, y a seguir aprendiendo.

Utilizando JasperReports con PHP

Ver Comentarios

Posted on : 23-02-2010 | By : Carlos Cordero | In : Java, PHP, Software

JasperReports es una de las librerías de generación de informes más populares y versátiles, bajo tecnología Java, incluyendo iReports, la herramienta visual para la generación de los informes.

Es una lástima, pero hay que admitir que actualmente bajo PHP no existe ninguna librería que esté minimamente a la altura, teniendo que recurrir a librerías del estilo FPDF para la exportación en PDF… y por supuesto diseñando los informes “a manini”.

Por lo tanto, pongámonos manos a la obra y busquemos una forma de unir PHP y Java, así podremos utilizar JasperReports desde una aplicación PHP. Usaremos una librería llamada php/Java Bridge, que nos permitirá realizar llamadas a métodos Java desde el código PHP de la aplicación. Aunque no es la única existente en el mercado y podamos encontrar otros bridges como Quercus, será la que utilice en este post por ser gratuita y cumplir la funcionalidad que necesitamos, utilizar JasperReports desde PHP.

Read the rest of this entry »

Drupal o Joomla, ¿es sólo cuestión de gustos?

Ver Comentarios

Posted on : 21-02-2010 | By : Carlos Cordero | In : Drupal, PHP

Drupal o Joomla, los dos gestores CMS más conocidos en el mundo “open source” bajo plataforma PHP. Los dos son de libre distribución, no tienen costes de licencias, se instalan facilmente y tienen una gran comunidad que los avala. Dicho así, puede parecer que la elección de uno u otro se puede basar en una simple decisión de gustos o estética… pero nada más lejos de la realidad, tomar esa decisión a la ligera puede significar perder tiempo y dinero.

Como es habitual, basándonos en que los dos buscan resolver una funcionalidad definida, en este caso ser un CMS, podemos resumir sus diferencias de la siguiente forma: Joomla busca ser un gestor sencillo, intuitivo y fácil de implementar mientras que Drupal sacrifica sencillez a cambio de una flexibilidad y posibilidad de ampliación infititamente superior a la de su homólogo.

Y en este punto nos encontramos, a lo largo de los años me he encontrado ya con demasiados proyectos que han sufrido el mismo problema, lo que los anglosajones definen como “hit the wall” al utilizar Joomla: una mala planificación incita al uso de este gestor pensando en “lo bonito que es” y lo “fácil que resulta utilizarlo”. La pesadilla ocurre cuando se intenta ampliar la funcionalidad de la página y empiezan los dolores de cabeza: limitaciones en la lógica de tratamiento de los datos, limitaciones en las modificaciones visuales… resulta que lo que en un principio parecía sencillo se vuelve en contra del usuario.

Joomla o Drupal

Read the rest of this entry »

Cliente SOAP bajo PHP

Ver Comentarios

Posted on : 28-09-2009 | By : Carlos Cordero | In : PHP, Software

Un apunte muy rápido para consumir WSDL desde PHP, que hoy me he tenido que pegar con ello para llamar a un servidor bajo .net y lo he solucionado al final de la forma más tonta del mundo.

Nos descargamos wsdl2php desde aqui. Esta pequeño script parseará el WSDL que le indiquemos y nos creará una fichero con la clase SoapClient de PHP5 lista para usar junto a todas las clases que ofrezca el servicio, es decir, nos quita todo el trabajo de encima.

Sólo nos faltará crear un script para lanzar la ejecución:

<?php
require_once 'ClasesCreadas.php';
$client = new ClasesCreadas();
print_r($client->LlamadaAEjecutar($parametros);
?>

A veces las cosas fáciles son las que mejor funcionan :)

Servicios Web REST

Ver Comentarios

Posted on : 25-09-2009 | By : Carlos Cordero | In : Java, PHP, Software

Me encantan esos días en los que puedes dedicarte a investigar, el hecho de poder leer mucha documentación para encontrar la mejor solución a un problema, sin presiones, sin plazos de entrega…

Para ponernos en situación, tenemos una especie de modelo editorial donde se almacenan cantidades más ó menos importantes de datos, desarrollado en java con toda la pesca incluída: Spring, Hibernate y usando MySQL como BD. Meses atrás se hizo a toda prisa una aplicación web de consulta, en este caso en PHP. Si, se que alguno querrá arrancarse los ojos al leer esto pero: el código de PHP lanza querys directas contra la BD (es decir, se pasa el modelo de ORM de Hibernate por los santos)… que queréis, se hizo en día y medio, cosas de los plazos.

Por si alguno todavía no se ha dado cuenta, eso tiene un grave problema (dejando de lado que es una chapuza increíble) y es que requiere trasladar todos los cambios que se hagan en el modelo a nuestra aplicación PHP (y normalmente suele pasar que se olvida y falla en el peor momento). A la hora de cambiar esto, se podría optar por utilizar algún tipo de implementación PHP sobre JAVA tipo Quercus (que ya utilizamos en otra rama), pero viendo los dolores de cabeza que ha dado, prefería evitarlo…

¿Solución? Servicios Web. ¿SOAP? ¡Mucho lio! … Mejor solución: REST (Representational state transfer): una solución de arquitectura “parida” para las necesidades justas que tenemos, y en este caso, limitadas a peticiones GET y algún POST (quizás para las búsquedas…). Ya tenemos nuestra solución: servicios web REST que den una salida JSON. El motivo de dar una salida JSON es evidente: queremos que sea interpretado por PHP, el cual tiene las funciones específicas para ello, y de esa forma no nos limitamos a ninguna arquitectura (nunca se sabe…).

Ahora viene el lado servidor, tenemos que implementar los servicios web en JAVA y sobre todo, tenemos que mantener y aprovechar la arquitectura existente. Ah! Una última cosa… no podemos depender de un contenedor específico, por si acaso ;)

De nuevo, solución: JAX-RS, la solución más sencilla que nos aporta JAVA para montar servicios REST. En este caso hemos utilizado una implementación que se llama Jersey (que queréis que haga si le ponen esos nombres…). Utilizando maven se ha vuelto muy sencillo, unas dependencias por aquí, otras por allá, y todo ready! Aqui os dejo el “getting started” de Jersey, si miráis el código os quedaréis muy sorprendidos, al fin y al cabo utiliza POJOs.

 1    // The Java class will be hosted at the URI path "/helloworld"
 2    @Path("/helloworld")
 3    public class HelloWorldResource {
 4
 5        // The Java method will process HTTP GET requests
 6        @GET
 7        // The Java method will produce content identified by the MIME
 8        // type "text/plain"
 9        @Produces("text/plain")
10        public String getClichedMessage() {
11            // Return some cliched textual content
12            return "Hello World";
13        }
14    }

Admito que he estado un par de horas pegándome con un conflicto de versiones de dependencias que tenían jersey e hibernate, causados por la librería asm, cosa de tener ya un sistema montado por detrás. Ahora mismo no lo recuerdo exáctamente, pero creo que hibernate utilizaba la rama 1.x de asm y jersey la 2.x, algunos métodos han cambiado y… POUM! Las últimas versiones de hibernate ya no tienen esa dependencia así que sólo había que incluirla en el ignore de maven para hibernate y todo solucionado. ¿Veis? Si hubiese mirado los foros de hibernate antes… me hubiese evitado ese tiempo de pelea con el tomcat (si, lo he montado sobre un tomcat, aunque supongo que termine en un resin).

Si alguno monta un servicio con esto, ya me enviará la URL para probarlo (si es público claro ;) )

Desarrollando con Joomla

Ver Comentarios

Posted on : 14-08-2007 | By : Carlos Cordero | In : PHP, Software

Describir las ventajas de un CMS me llevaría varios posts, pero si quisiese entrar en detalle sobre lo que aporta el CMS Joomla, tendría que dedicar la mitad de este Blog a ello. Tengo que admitir que el “Open Source” me encanta y cuando puedo me encanta colaborar (ya sea en análisis, desarrollo, documentación ó testeo…), y sin embargo, me encuentro muchos proyectos con una “grave enfermedad”: El código es intratable, hay tantos parches sobre parches de otros parches que al final tardarías menos en crear una solución desde cero que intentar modificar lo que ya hay. No es el caso de Joomla.

Hace tiempo trabajé con sus primeras versiones, cuando se hizo el fork desde Mambo, pero en estas últimas semanas por motivos profesionales he tenido que estudiar todo su código y estructura: ¡Que maravilla! Ya no sólo es que tenga una buena documentación, si no es que además su estructura modular es una maravilla. Una lectura más bien rápida de su API y ya estaba programando módulos y componentes. En el apartado de diseño y maquetado no son menos las ventajas del sistema, un simple fichero en el cual se incluyen a elección del diseñador los espacios organizados para módulos, y todo ello controlado por CSS (adaptable igualmente según módulos desde el administrador). Tengo cronometrado mi tiempo de instalación de Joomla en 4 minutos, aunque automatizando un script bash para la configuración de permisos, el tiempo todavía se podría reducir un par de minutos.

Aunque se supone que esto es compartido por cualquier CMS (y por desgracia no es siempre así), ahí va una lista de aquellos puntos que considero como verdaderos puntos fuertes de Joomla, y que lo hacen una solución que supera lo puramente amateur, pudiendo pasar a un entorno corporativo:

  • Alta seguridad (nos olvidamos de los problemas de las “Variables Globales” de PHP), así como configuración de los permisos para evitar intrusiones.
  • Modularidad Total de sus componentes: Joomla es como el “Lego”, te dan una base y a partir de ahí lo que necesites
  • Gran comunidad de desarrolladores: Hay varios cientos de módulos de buena calidad listos para ser usados
  • Diseño: Nos olvidamos de los diseños cuadrados. Si se desea, se puede realizar un diseño de cualquier tipo, incluso utilizando tecnología Web 2.0 (lo que tanto está de moda vamos…)
  • Programación: Un programador habitual de PHP no tendrá problema alguno en programar módulos, mambots ó componentes. Una lectura de su documentación y API será suficiente para saber las bases.
  • Integración de Componentes actuales: Basándome en el punto anterior, adaptar un software existente para su funcionamiento bajo Joomla será cuestión de poco cambio en muchos casos (siempre y cuando el software ya existente no sea un “montón de basura compilada”).
  • Disminución de Tiempos de Desarrollo: Algo imprescindible en estos tiempos de competencia tan brutal. Hablamos de menos de 1 hora para tener una web funcionando en Internet (y aún menos automatizando parte del proceso).

Con más tiempo dedicaré otro post para hablar de la programación bajo Joomla, aunque poco podré aportar a la gran documentación existente.

Manual de Desarrollo: http://help.joomla.org/content/section/12/125/