- EL CONOCIMIENTO ES Y DEBE SER LIBRE -

miércoles, diciembre 30, 2009

DHTMLX EN ACCION

Cuando programe por primera vez en la web (hasta ese momento solo lo había hecho en ambiente de escritorio) lo realice en una empresa que había hecho su propio framework Web UI, desde luego muy poderosos los componentes, pero esta carecía de documentación y ejemplos, creo que después de esa ingrata experiencia me aterraba programar con componentes Ajax, pero gracias a un amigo (Ivan Yaco) que me presento y convenció que estos componentes eran todo lo contrario y en verdad la experiencia fue muy grata, es por esto que invito a que lo prueben.

Los componentes javascript DHTMLX (la edición Standard tiene licencia GPL) nos permiten crear aplicaciones RIA bastante interesantes con muy poco esfuerzo. DHTMLX tiene una extensa documentación y muchos ejemplos en su website, que es lo que realmente necesitamos cuando queremos programar. Les recomiendo bajar toda la documentacion y sobre todo los ejemplos a la Pc. no me cansare de mencionar que los ejemplos son bastante explicativos y junto con Doctrine les facilitara la vida enormemente.
En mi experiencia personal al cabo de una semana ya tuve dominio de estos componentes.
El vídeo mostrado corresponde a una versión de prueba de un sistema de documentación que se realizo con DHMLX junto con Doctrine. En los siguientes posts mostrare un ejemplo completo de una aplicación.



miércoles, diciembre 09, 2009

Modelando con Doctrine Parte I

Si tenemos una Base de Datos relacional ya implementada podemos mapear la DB con Doctrine y empezar a utilizar toda su potencia (para verificar la instalacion de Doctrine dirigete aqui ).El archivo generarModels.php nos permitirá generar el mapeo correspondiente:

/*
Archivo generarModels.php
*/
require_once(dirname(__FILE__) . '/Doctrine-1.2.0/lib/Doctrine.php');
spl_autoload_register(array('Doctrine', 'autoload'));

/* Nos conectamos a la DB*/
$dsn = 'mysql:dbname=comercial;host=127.0.0.1';
$user='root';
$password='123456';
/* Conexion a postgre
$dsn = 'pqsql:dbname=comercial;host=127.0.0.1';
$user='postgres';
$password='123456';
*/
$dbh = new PDO($dsn, $user, $password);
$conn = Doctrine_Manager::connection($dbh);
/* Metodo que nos genera los modelos */
Doctrine_Core::generateModelsFromDb('carpetaDeModelos');


Enseguida procedemos a ejecutar el archivo generarModels.php (http://localhost/generarModels.php) y tendremos en la carpeta "carpetaDeModelos" los modelos para empezar a probar Doctrine.
Ahora procedemos a modificar el archivo bootstrap.php y creamos el archivo dqlTestDoctrine.php. Por Favor, antes de ejecutar dqlTestDoctrine.php dirígete a la clase generada y añade require_once según corresponda, en mi caso, quedo así:


/**
* Cliente
*
* This class has been auto-generated by the Doctrine ORM Framework
*
* @package    ##PACKAGE##
* @subpackage ##SUBPACKAGE##
* @author     ##NAME## <##EMAIL##>
* @version    SVN: $Id: Builder.php 6820 2009-11-30 17:27:49Z jwage $
*/
require_once('generated/BaseCliente.php');
class Cliente extends BaseCliente {  }  


/*
Archivo dqlTestDoctrine.php
*/
require_once('bootstrap.php')/*extremadamente importante*/
$q=Doctrine_Query::create()
->select('u.*')   /*todos los campos*/
->from('Cliente  u'); /*selecionamos la clase Cliente*/

print_r($q->execute()->toArray()); /*nos muestra el resultado como un array*/


/*
Archivo bootstrap.php
*/
require_once(dirname(__FILE__) . '/Doctrine-1.2.0/lib/Doctrine.php');
spl_autoload_register(array('Doctrine', 'autoload'))

Doctrine::loadModels('carpetaDeModelos');

$dsn = 'mysql:dbname=comercial;host=127.0.0.1';
$user='root';
$password='123456';

$dbh = new PDO($dsn, $user, $password);
$conn = Doctrine_Manager::connection($dbh);


En mi particular experiencia esta ingeniería inversa tiene algunos inconveniente(por lo menos en postgreSQL) que son los siguientes:
  1. Cuando se encuentran claves primarias compuestas el modelo generado solo mapea una clave primaria, entonces hay que modificar a mano en el modelo generado colocando como clave primaria la clave que obvio Doctrine.
  2. Si están trabajando con PosgreSql y estas utilizando esquemas entonces tendrás que modificar en el modelo generado el nombre de la tabla mapeada anteponiendo el nombre del esquema.

Lo anteriormente mencionado no significa que Doctrine tenga bugs, lo que ocurre es que Doctrine esta optimizado para crear el modelo (que cuenta con relaciones de mucho a muchos, uno a mucho y uno a uno, entre otros elementos adicionales) y a partir del modelo crear la BD (Mysql, PostgreSql, Oracle, SqlServer, etc.)

En el siguiente post crearemos un modelo y empezaremos a utilizar DQL(Doctrine Query Language)





sábado, diciembre 05, 2009

Instalando Doctrine 1.2

Instalar Doctrine 1.2 es bastante sencillo.
  1. Bajamos el Appserv 2.5.9.
  2. Ejecutamos el Appserv 2.5.9 (que nos instala apache, php y mysql).
  3. Verificamos que la version de PHP>=5.2.3+
  4. Habilitamos PDO(Php Data Objects), nos dirigimos a php.ini y añadimos las siguientes lineas:
  5. extension=php_pdo.dll
    extension=php_pdo_pgsql.dll
    extension=php_pdo_mysql.dll
    
  6. Reiniciamos el Servidor Apache.
  7. Bajamos Doctrine 1.2 de aquí.
  8. Descomprimimos Doctrine 1.2 en c:\appserv\www
Siguiente los pasos anteriores ya se debió instalar Doctrine 1.2.
Para verificar la instalación creamos un archivo nombrandolo como bootstrap.php (c:\appserv\www\bootstrap.php)

/*
En los siguiente post haremos referencia a este archivo bootstrap.php
*/
require_once(dirname(__FILE__) . '/Doctrine-1.2.0/lib/Doctrine.php');
spl_autoload_register(array('Doctrine', 'autoload'));
$manager = Doctrine_Manager::getInstance();

Ahora que ya tenemos bootstrap.php procedemos a crear el archivo TestDoctrine.php (c:\appserv\www\TestDoctrine.php)
/*
Probamos que doctrine se instalo correctamente
*/
require_once('bootstrap.php');
echo Doctrine_Core::getPath();
Ahora ejecutamos el archivo TestDoctrine.php (http://localhost/TestDoctrine.php) y nos debe de mostrar la ruta de instalación de Doctrine. La cual significa que Doctrine se instalo satisfactoriamente.

martes, octubre 27, 2009

Doctrine ORM


En este post quiero hablar de un extraordinario ORM para PHP.
Me estoy refiriendo a Doctrine, los que vienen de .NET o Java me comprenderán.
Es que acaso existe la posibilidad de realizar sistemas con PHP, pues conocemos que PHP es un lenguaje bastante light enfocado para web site, principalmente.
Pero a medido que conozco Doctrine(object relational mapper) y Symfony(framework) puedo asegurar que si, es posible, con sus limitaciones pero posible. Si amigos no es tan descabellado.!!!!
Algunas cosas por la que elijo Doctrine son, entre otras, las siguientes:

  • DQL algo similar a HQL de Hibernate.
  • Zend Framework (Zend_Entity) se rindio ante Doctrine.
  • Una extraordinaria comunidad de desarrolladores.
  • Una documentación bastante completa a libre disponibilidad (free).


En fin, estoy muy emocionado por haber encontrado algo tan bien pensado que me facilito la vida enormemente en el desarrollo de una aplicación con capas cuyo cliente se desarrollo en JavaScript específicamente utilice DHTMLX cuya documentación también esta bastante extensa, luego hablaremos de estos componente Web UI.


Nota: Uno de los motivos por los que no posteo es precisamente mi ortografía y la vergüenza de cometer u ofender a algunos lectores espero su comprensión y desde luego la correcciones son bien acogidas.