Category Archives: Desarrollo Web

Entendiendo las clases de PHP Reflection

ReflectionMethod

Esta clase permite llamar a métodos de una clase de manera dinámica. Imaginemos que tenemos una clase Manager con dos métodos:

class Manager
{
    metodoHola()
    {
        echo 'Hola';
    }
 
    metodoAdios()
    {
        echo 'Adios';
    }
}

Si queremos llamar a los métodos de la clase Manager de forma dinámica, en función de un parámetro, la clase ReflectionMethod nos permite hacerlo:

$reflectionMethod = new \ReflectionMethod('Manager', 'metodo'.ucfirst($variable));
$reflectionMethod->invoke($manager);

En el anterior ejemplo, si $variable = 'hola', al ejecutar $reflectionMethod->invoke($manager) ejecutaríamos el método metodoHola. Si en cambio fuese $variable = 'adios' llamaríamos a metodoAdios.

Incluir tiempo estimado e imputado en las líneas de tareas en Feng Office

Feng Office és una buena herramienta de gestión de proyects, open source y gratuita. Las herramientas gestoras de proyectos siempre tienen el inconveniente que no todas las funcionalidades se adaptan a la manera de trabajar de uno, sin embargo, gracias a ser open source, se puede modificar para conseguirlo.

Una de las necesidades que tenía, era la de visualizar rápidamente y en cada tarea el tiempo estimado en esa tarea y el tiempo acumulado en el desarrollo de la misma, para poder valorar en mientras trabajo si estoy cumpliendo los plazos.

Línea de tarea en Feng Office

A continuación voy a detallar los cambios que he realizado para visualizarlo. He trabajado sobre la versión de Feng Office 1.7.5.

Continue reading

Copiar y pegar desde word con TinyMCE

Desde que empecé a utilitzar los conocidos “HTMLarea”, “textarea enriquecido” o editor WYSIWYG han surgido problemas cuando el cliente hacía copy paste de los textos desde word debido a que mantenía el formato. El código de estilos acababa desmontando la página del site, con la correspondiente llamada del cliente: “Oye, que de repente la página se ve mal…”.

Hace ya tiempo que empecé a implementar TinyMCE, para mí el mejor editor WYSIWYG, y he descubierto que dispone de un plugin realmente bueno y que soluciona los problemas que antes comentaba: SimplePaste.

El plugin es realmente simple. Cuando haces crtl+v sobre el editor borra todo el formato del texto que has pegado. Y ya está. Yo lo he empezado a utilizar y es ideal.

Instalarlo es muy sencillo:

  1. Descargar el archivo zip i descomprimirlo.
  2. Colocar la carpeta simplepaste dentro de la carpeta plugins de la instalación de TinyMCE.
  3. Modificar la configuración del TinyMCE en la página web para que cargue el plugin:

plugins: simplepaste

paste_auto_cleanup_on_paste : true,
paste_create_linebreaks : false,
paste_use_dialog : false,
paste_remove_styles: true,
paste_convert_middot_lists : false,
paste_unindented_list_class : ‘unindentedList’,
paste_strip_class_attributes: ‘all’,
paste_convert_headers_to_strong: false,
paste_as_plain_text: true

El que quiera saber más puede visitar el hilo de discusión sobre SimplePaste en el foro de TinyMCE.

Graus de qualitat en els formularis web

Els formularis web són la eina clau en la interacció entre servidor i client, la forma que té el sistema per a que l’usuari pugui passar informació al site. Gairebé tot es fa amb formularis, registrar-se a una web, escriure un post a un foro, un tema a un blog… tot i que des del surgiment del web 2.0 en alguns casos han sigut substituits per formularis AJAX, però aquí no parlaré ara d’AJAX, si no dels formularis de tota la vida.

Com tot, els formularis també tenen diferents graus de qualitat, i depenent de la que vulguis implementar tindrà un temps d’el·laboració o un altre. Molta gent es pensa que un formulari és quelcom fàcil de fer, i sí, ho és, però molt entretingut i quant millors els vulguis fer encara més.

Continue reading

Indexació de webs multiidioma amb PHP i Apache

La indexació de pàgines als buscadors és quelcom que s’ha tornat gairebé imprescindible a l’hora de publicar una pàgina web. I aquesta importància recau d’igual manera en sites multiidioma on totes les pàgines en tots els idiomes han d’estar indexades.

Jo conec dos sistemes per fer pàgines web multiidioma. El primer seria el clàssic de ficar la web en un idioma, per exemple català, dins http://www.javierseixas.com/blog/wp-admin/post.php?action=edit&post=23la carpeta ‘ca’. Per traduïr-la a un altre idioma, per exemple el castellà, es duplica la carpeta, se li assigna el nom ‘es’ i es tradueixen tots els arxius html que la componen. Aquest sistema no el recomano ja que obliga a que quan s’hagi de fer una modificació fer-la en tants arxius com pàgines hi hagin, lo qual duplica el treball i el temps. De totes maneres no queda més remei que fer-ho així en servidors que no suportin algun tipus de llenguatge.

El segon sistema que conec és mitjantçant includes que contenen les textos fixes, com titol de seccions, nom de botons, etc. Hi ha un include per cada idioma, i mitjançant una sessió carregarà un include o un altre. S’haurà de declarar una sessió per defecte, per quan l’usuari entri per primer cop l’assigni i carregui l’idioma per defecte. Si l’usuari canvia l’idioma canviarà el valor de la sessió.

Fins aquí tot bé, però què passa quan un robot entra al nostre site? El robot trobarà l’enllaç per canviar d’idioma, però no sabrà interpretar el canvi de sessió, per lo qual, el robot només detectarà i indexarà el nostre site en l’idioma per defecte. I com es soluciona aquest problema?

La clau està en col·locar a l’enllaç on es canvia l’idioma una adreça falsa. Per exemple:

<a href="http://www.javierseixas.com/ca">Català</a>
<a href="http://www.javierseixas.com/es">Castellà</a>

Fet això, el PHP haurà de saber en quin idioma s’està navegant. Això es pot saber per la funció $_SERVER['REQUEST_URI'] que retorna la part de l’adreça després del domini. Tot seguit, el PHP haurà de decidir quin include incloure segons hagi dit el REQUEST_URI, per exemple, ca per català , es pel castellà, en per l’anglés. En aquest punt recomano seguir les sigles que utilitza la wikipedia.

I el darrer punt clau el juga Apache. S’ha d’activar el ModRewrite i escriure les regles per l’idioma concret:

RewriteRule ^ca/(.+) /?sec=$1
RewriteRule ^es/(.+) /?sec=$1
RewriteRule ^en/(.+) /?sec=$1

Iniciació al patró MVC

Fa una setmana i poc vaig decidir donar el pas i començar a dissenyar l’arquitectura d’una pàgina web que estic fent seguint amb el sistema MVC (Model-Vista-Controlador). Pel que havia llegit era la forma més avançada de programar en PHP i la millor forma de dissenyar un site. Les seves avantatges són la gran facilitat de manteniment i modificació d’una web ja que aquest sistema utilitza la POO (Programació Orientada a Objectes).

Sincerament, no m’ha sigut fàcil entendre el concepte i el funcionament del sistema, però després d’haver invertit MOLTES hores ja he trovat el camí, i vull fer aquest post per deixar constància i publicar alguns consells que faciliti a altres la introducción al tema. Una de les coses que més m’han dificultat el entendre com funcionaba ha sigut la gran complexitat dels exemples i el lleguantge massa tècnic. En aquest escrit intentaré utilitzar explicacions clares i fàcils d’entendre. Això sí, aconsello abans de començar amb el MVC entendre una mica sobre la POO en PHP. Comencem!

Continue reading

Web 2.0: Li deus al JavaScript

Aquesta setmana m’he estrenat com a blogger a “la Grapadora“, el blog de Grapa, amb un article anomenat: Web 2.0: Se lo debes al JavaScript. Com que l’article l’he publicat en castellà vull deixar aquí la traducció al català:

El JavaScript era, farà tres anys, un llenguatge de programació de segona. La seva principal funció era la de controlar petits detalls en l’enviament de formularis, com que els camps estiguessin correctament omplerts i poca cosa més. Pràcticament estava relegat a aquesta funció quan un dia algú va inventar AJAX i va nèixer el web 2.0. Sense anar més lluny, JavaScript és la J d’AJAX: Asynchronous JavaScript And XML. Aquest detall dòna una idea de la seva importància i la seva vinculacó al nou sistema.

Ara, una gran massa de programadors utilitzem JavaScript, no només per implementar AJAX, sino també per totes aquestes parafernà lies i efectes tan macus que semblen Flash però que no ho són, amagar i ensenyar textos, crear nous elements a l’HTML i un llarg etcétera. I tot axò, ¿per què és tan bo? Doncs perquè facilita la interacció usuari-màquina estalviant carregar la pàgina cada cop que punxes un enllaç, perquè fa la navegació més agradable visualment, perquè millora la usabilitat i perquè, d’aquesta manera, els textos també són indexables en navegadors (cosa que, cal recordar, no passa en Flash).

Coneixent això, resulta evident lo important que és el JavaScript per un site i molts estaran d’acord amb mí en que s’està convertint en una eina bàsica per la navegació web. M’atreviria a dir que el 96% de les noves webs utilitzen JS d’alguna manera o una altra.

Però com tot a la vida, el JavaScript no és perfecte. L’ús de JS també té alguns inconvenients d’usabilitat i accesibilitat. Si, per exemple, algú visita una web amb un navegador antic que no el soporti, o si té el llenguatge deshabilitat al seu navegador, no podrà accedir correctament al site. Davant d’això, alguns conservadors defenen que el JavaScript fa el web inaccessible als usuaris que no disposin de programes que el soportin. Això és cert, però crec que ja va sent hora que aquests usuris s’actualitzin una mica. Si hi ha algú que encara navegui amb IE5 no té perdó de Déu, i més, quan existeixen molts altres navegadors gratuïts, Firefox per exemple, que sí el soporten.

I per si encara fos poc, davant del boom del JS han surgit, des de fa algún temps, gran quantitat de frameworks que facil·liten als programadors la implementació de JavaScript i AJAX als nous sites web. Mootools, Prototype i jquery són alguns dels exemples més coneguts. De fet, poc a poc va creant-se la perspectiva en la qual ja no s’aprèn JS, sino la estructura d’algún o altre framework.

Sigui com sigui, el JavaScript s’ha convertit en un llenguatge imprescindible en la web actual del qual si releguéssim seria donar un pas enrere en l’evolució d’internet.