Archive
Cambiar el url de tu sitio drupal
Imaginamos que tienes 3 sitios corriendo sobre una misma instalacion Drupal 6 con multi-sites (sitio1.com, sitio2.com, sitio3.com en su directorio /sites) y quieres cambiar sitio3.com por ejemplo1.com.
En el pasado hubieras renombrado el directorio, ejecutado algunas consultas SQL cuidadosamente o cambiado manualmente todos los links que apuntan a ese nombre para todos tus contenidos (trabajo muy tedioso, con posibilidad de equivocarse en el camino).
Afortunadamente existe un módulo que te ahorrará todo este trabajo, con este módulo tú solo renombras el directorio, ejecutas el modulo (con 2 entradas de datos, nombres del sitio antiguo y actual) y se ejecutará automaticamente todas las consultas SQL para ti. Este post te explicará como realizar este proceso con éxito.
Si se desea migrar el sitio de un servidor a otro, manteniendo toda la configuracion y contenido, pero cambiar el nombre del sitio se debe realizar el siguiente proceso, si se quiere solo cambiar el nombre sin migrar pasar al segundo punto:
Copiar el sitio de un servidor a otro
Antes de seguir los pasos para cambiar el nombre de tu sitio, debes hacer una copia de todo el sitio incluido su configuración (virtual host) al servidor de destino, es decir que se debe mantener el nombre del sitio de origen (el nombre se cambiará luego) con la misma información de la base de datos:
- Hacer un backup de tu base de datos de tu servidor origen
- Copiar un drupal en el directorio web de tu servidor destino
- Copiar los modulos, temas, y archivo de configuracion (settings.php, modificar si es necesario los datos de tu conexion a la bd) de tu sitio origen dentro del sitio destino (mantener por ahora el mismo nombre de tu sitio, eso se cambiara luego).
- Configuracion del virtual host (mantener el mismo nombre del sitio, eso se cambiara luego)
- Restaurar los datos de la base de datos del servidor origen al servidor destino, con el mismo nombre de la bd que indique la configuracion del sitio origen (settings.php)
- Ingresar al sitio con el mismo nombre desde el servidor destino en el navegador.(Debe mostrarse igual, la diferencia es que ahora se muestra desde el servidor destino)
- Ahora seguir los pasos para cambiar el nombre de la direccion url del sitio.
Ahora se cambiará el nombre del sitio usando el módulo “Site Directory Migrate”, descargarlo desde http://drupal.org/project/sitedir_migrate y copiar la carpeta dentro de /sites/all/modules/ de tu instalacion drupal, seguir los siguientes pasos:
Cambiar el URL del sitio
- Haz un backup de tu base de datos y de su sitio (por seguridad) Nota: Es recomendable usar un tema limpio que no ha sido modificada para tener un mejor resultado (se recomienda cambiar de tema, usar garland), antes de pasar al paso siguiente cambiar el tema del sitio (cambiarlo por garland).
- Renombra tu sitio /sites/{tu sitio url} a la nueva dirección /sites/{tu nueva dirección}
- Modifica apropiadamente tu configuración del servidor (virtual host) que coincida con la nueva dirección url
- Ir a tu nueva dirección de tu sitio en tu navegador
- Habilita el módulo sitedir_migrate y sus módulos asociados.
- Ir a {tu nuevo sitio url}/admin/settings/sitedir_migrate
- Ingrese tu antiguo y tu nuevo directorio de tu sitio, no incluye “/sites/” (verificar que los dos datos sean correctos)
- Click en Enviar(Submit).
- Reestablecer el tema que tenía tu sitio con la dirección antigua
- Deshabilitar el módulo sitedir_migrate, no los necesitas tenerlo habilitado
Instalar y desinstalar una tabla para tu módulo en drupal
Dentro de la carpeta de tu módulo debes incluir un archivo con el nombre de tu módulo con extension .install (e.j. mimodulo.install).
En este archivo se va definir la estructura representativa para uno o más tablas con sus llaves relacionadas e índices. Esto es definido por hook_schema() (el prefijo hook debe ser reemplazado por el nombre de tu módulo en este caso mimodulo_schema() ).
<?php
function mimodulo_schema() {$schema['stats_user_file'] = array(
‘description’ => ‘The base table for cies stats.’,
‘fields’ => array(
‘id’ => array(
‘description’ => ‘identifier for stats.’,
‘type’ => ‘int’,
‘not null’ => TRUE,
‘default’ => 0),
‘tid’ => array(
‘description’ => ‘identifier for a term.’,
‘type’ => ‘int’,
‘not null’ => TRUE,
‘default’ => 0),
‘uid’ => array(
‘description’ => ‘identifier for user.’,
‘type’ => ‘int’,
‘unsigned’ => TRUE,
‘not null’ => TRUE,
‘default’ => 0),
‘fid’ => array(
‘description’ => ‘identifier for file.’,
‘type’ => ‘int’,
‘not null’ => TRUE,
‘default’ => 0),
‘timestamp’ => array(
‘description’ => ‘timestamp UNIX’,
‘type’ => ‘int’,
‘not null’ => TRUE,
‘default’ => 0)
)
‘indexes’ => array(
‘tabla1_changed’ => array(‘changed’),
‘tabla1_created’ => array(‘created’),
),
‘unique keys’ => array(
‘id_tid’ => array(‘id’, ‘tid’),
‘uid’ => array(‘uid’)
),
‘primary key’ => array(‘id’)
);
return $schema;
}
?>
En http://drupal.org/node/146843 se puede ver la estructura de definición de un esquema con más detalles, tipo de datos y referencias.
Solo faltaría agregar hook_install() y hook_uninstall() para instalar y desinstalar respectivamente la tabla definida anteriormente
<?php
function mimodulo_schema() {
/* Definicion de la estructura de la tabla */
}function mimodulo_install() {
// Crea mi tabla
drupal_install_schema(‘mimodulo’);
}function mimodulo_uninstall() {
// Borra mi tabla
drupal_uninstall_schema(‘mimodulo’);
}?>
Libreria events.lib.inc.php incluido desde global.inc.php
Esta información va para todos los desarrolladores de la plataforma dokeos en su última versión (1.8.6), la librería events.lib.inc.php ahora se está incluyendo desde el archivo global.inc.php para que pueda ser usado directamente desde cualquier parte de código, como saben las funciones de esta librería son usadas para registrar informaciones cuando algun tipo de evento ocurre.
Chamilo Móvil
En los ultimos 2 años la web movil ha experimentado un fuerte crecimiento, tanto en términos de número de usuarios web con acceso desde un teléfono móvil, y el número de sitios web en linea accesibles.
Es claramente un momento emocionante para la web móvil y de Internet para móviles en general.
Chamilo en su versión corporativa ofrece funcionalidades a través de este medio, haciendo uso de tres poderosas herramientas muy populares para el desarrollo de una aplicación web movil que son:
WURFL (Wireless Universal Resource File) : Es una base de datos de dispositivos móviles que registra las especificaciones y capacidades de cada uno de ellos.
Tera-WURFL : Es una libreria para PHP que utiliza MySQL y un mecanismo de cache para alcanzar excelente performance y reducir el tiempo que se toma para hacer consultas a una base de datos WURLF.
HAWHAW (HTML and WML Hybrid Adapted Webserver) : Es una libreria para PHP hecho disponible gratuitamente a traves de un solo archivo hawhaw.inc. HAWHAW trabaja con Tera-WURLF para hacer uso de la base de datos WURFL y asi generar el WML(Wireless Markup language) que es usado para crear paginas que pueden ser mostrados en un browser WAP (browser de un movil).
Con todo esto y atraves de los servicios web, Chamilo corporativo ofrece funcionalidades que pueden ser consultadas desde un celular
Aca les muestro un pequeño demo sobre una cosulta a los eventos de la agenda de un curso determinado desde un nokia 6670:

En esta primera imagen el usuario selecciona el curso, el mes y el año de los eventos de dicho curso

Se muestra un calendario resaltando los dias donde existen eventos para dicho mes y año, al seleccionar un dia resaltado, se muestra
la lista de eventos para ese dia.
Esto es sólo el comienzo, más adelante les mostraré más cosas de las funcionalidades que Chamilo ofrece atraves de un móvil.
Libreria XAJAX en PHP
Xajax es una biblioteca código abierto de PHP capaz de generar aplicaciones Web con tecnología AJAX.
Xajax utiliza una forma de trabajo de funciones, designando qué funciones o métodos de código PHP se convierten en funciones AJAX
Puede descargarlo Aqui
Ejemplo 1 : Xajax y funciones PHP
<?php
//Incluir con PHP el archivo donde está la clase xajax
require (‘xajax/xajax_core/xajax.inc.php’);//Instanciamos el objeto de la clase xajax
$xajax = new xajax();//Escribimos una función en PHP, que luego llamaremos con por medio de ajax
function cambia_texto($mensaje){//instanciamos el objeto para generar la respuesta con ajax
$respuesta = new xajaxResponse();
//escribimos en la capa con id=”mensajeDiv” el texto de $mensaje
$respuesta->assign(“mensajeDiv”,”innerHTML”,$mensaje);
//tenemos que devolver la instanciación del objeto xajaxResponse
return $respuesta;
}
//asociamos la función creada anteriormente al objeto xajax
$xajax->registerFunction(“cambia_texto”);
//El objeto xajax tiene que procesar cualquier petición
$xajax->processRequest();
?><html>
<head>
<!– En el <head> indicamos al objeto xajax se encargue de generar el javascript necesario –>
<?php $xajax->printJavascript(“xajax/”); ?>
</head>
<body>
<!– Se llama a la funcion javascript generada por xajax con el prefijo ‘xajax_’ seguida del nombre de la funcion creada con php –>
<input type=”button” onclick=”xajax_cambia_texto(‘Hola Ajax’);” value=”Pulsa” />
<div id=”mensajeDiv”></div>
</body>
</html>
Ejemplo 2: Xajax y objetos
<?php
//Incluir con PHP el archivo donde está la clase xajax
require_once(“xajax/xajax_core/xajax.inc.php”);
//Creamos la clase cuyo metodo utilizara el xajaxResponse
class alumno{
private $mensaje=”Ajax”;
public function hola(){
//instanciamos el objeto para generar la respuesta con ajax
$objResponse = new xajaxResponse();
//En este caso el metodo lanzara un alert js con el texto “Ajax”
$objResponse->alert(‘Hola ‘.$this->$mensaje);
//Devolvemos el objeto xajaxResponse
return $objResponse;
}
}
$alumno = new alumno()
//Instanciamos el objeto de la clase xajax
$xajax = new xajax();
//asociamos el metodo del objeto $alumno al objeto xajax con un array(“nombreEnJS”,$objeto,”metodo”)
$xajax->registerFunction(array(“miFuncion”, $alumno,”hola”));
//El objeto xajax tiene que procesar cualquier petición
$xajax->processRequest();
?>
…
<?php $xajax->printJavascript(“xajax/”) ?>
<input type=”submit” value=“Llamar” onclick=”xajax_miFuncion(); return false;”>
METODOS DE LA CLASE XAJAX
$xajax = new xajax();
$xajax->setFlag(“debug”, true);
$xajax->setFlag(“decodeUTF8Input”, true);
$xajax->setFlag(“characterEncoding”,’ISO-8859-1′);
$xajax->registerFunction(“miFuncion”);
$xajax->processRequest();
METODOS DE LA CLASE AJAXRESPONSE
$objResponse = new xajaxResponse();
$objResponse->redirect(“http://www.google.com”);
$objResponse->alert(“Mostramos un alert.”);
$objResponse->confirmCommands(2, “Mensaje que pregunta?”);
$objResponse->call(“funcionJS”, “arg 1″, “arg N” );
$objResponse->includeScript(archivo.js);
$objResponse->assign(“etiqDiv”, “innerHTML”, “dato”);
$objResponse->assign(“etiqueta3”, “style.width”, “25%”)
$objResponse->remove(“etiqDiv”);
Ejemplo 3 : Formularios Xajax
<?php
require_once(“xajax/xajax_core/xajax.inc.php”);
function testForm($formData){
$objResponse = new xajaxResponse();
$objResponse->assign(“submittedDiv”, “innerHTML”, nl2br(print_r($formData, true)));
return $objResponse;
}
$xajax = new xajax(); $xajax->registerFunction(“testForm”);
$xajax->processRequest();
?>
…
<form id=”testForm1″ onsubmit=”return false;”>
<input type=”text” name=”textInput” value=”text” />
<input type=”text” name=”textInput2″ value=”text” />
<select id=”select” name=”select”>
<option value=”1″>One</option> <option value=”2″>Two</option><option value=”3″>Three</option>
<option value=”4″>Four</option>
</select>
<input type=”submit” value=“submit por xajax” onclick=”xajax_testForm(xajax.getFormValues(‘testForm1′)); return false;” />
</form>
<div id=”submittedDiv”></div>
Ejemplo 4 : Llamar una funcion javascript desde codigo php
<?php
require(“xajax/xajax_core/xajax.inc.php”);
function callScript() {
$response = new xajaxResponse();
$value2 = “elemento 2″;
$response->call(“myJSFunction”, “argumento 1″, 9432.12,
array(“myKey” => “elemento 1″, “key2″ =>$value2));
return $response;
}
$xajax = new xajax();$xajax->registerFunction(“callScript”);
$xajax->processRequest();
?>
…
<?php $xajax->printJavascript(“xajax/”) ?>
<script type=”text/javascript”>
function myJSFunction(Argtext, ArgNum, ArrayArg) {
var newString = Argtext + ” y ” + (+ ArgNum + 100) + “\n”;
newString += ArrayArg["myKey"] + ” | ” + ArrayArg.key2;
alert(newString);
}
</script>
<input type=”button” value=”Click Me” onclick=”xajax_callScript()” />
CAMBIOS EN LA VERSION 0.5 XAJAX
$xajax->registerFunction(‘funcion’);
X
$xajax->register(XAJAX_FUNCTION, ‘funcion’);
$xajax->processRequests();
X
$xajax->processRequest();
Publica todos los métodos públicos de un objeto:
$xajax->register( XAJAX_CALLABLE_OBJECT, $objeto);
Examen Zend Certified Engineer
Un lunes 09 de marzo di mi examen de certificación Zend
Recuerdo que hace un tiempo leí el libro de certificación de PHP4. Pero el exámen del 5 es muy diferente. Simplemente quiero compartir la experiencia y darle algunas recomendaciones a quienes se piensen certificar.
Esta certificación no se trata de evaluar funciones memorizadas. Definitivamente es un examen bien pensado y orientado a profesionales con experiencia en desarrollo con PHP, también se califican conceptos de seguridad en Internet, Web Services, Sockets, Bases de Datos, etc.
Si lleva programando en PHP menos de 1 año, no piense que esta certificación será facil.
Recomendación 1: Les recomiendo comprarse el libro Zend PHP 5 Certification Study Guide (Clic aquí)
La preparación para la certificación debe durar como mínimo 15 días. Los otros días es muy recomendable realizar prácticas sobre Web Services, XML, Streams, Regex.
El libro NO lo tiene todo, después de dar el examen me dí cuenta que el libro cubre sólo los temas básicos, hay muchas funcionalidades del lenguaje que no están descritas en el libro. Le recomiendo que revise el manual de PHP y los comentarios, definitivamente es el mejor recurso que hay (Clic aquí).
Una vez más repito, este examen no es una cuestión teórica. Los mejores candidatos a este examen son personas que desarrollan comunmente software con PHP y no simplemente saben aspectos básicos del lenguaje.
El examen está dividido en preguntas de Seguridad, XML y servicios web, Strings, preguntas basicas de PHP, funciones, Base de Datos y SQL, Arrays,patrones de diseño, programación orientada a objetos y diferencias entre php 4 y 5.
Recomendación 2:
Visitar el Blog “Read The Web” de un desarrollador php Chino!
Clic aquí
Aquí encontrará unas revisiones de cada tema de la certificación.
Hay muchos recursos disponibles y seguro Google traerá información interesante. Existen exámenes de prueba que zend ofrece a precio muy cómodo, es importante tener un buen puntaje en ese examen(Excelent), con eso vez el nivel de preparación que estas alcanzando
Recomendación 3:
Comprar el Mock Exam de phpArchitect:
Clic aquí
Los exámenes de PHP Architect son muy útiles, pues de estos se aprende mucho. El estilo estos exámenes es similar al examen original, es decir dura 90 minutos, son 75 preguntas repartidas en los temas que ya mensioné, tiene la opción de volver a revisar la pregunta antes de terminar el examen.
Después de estar preparado puedes programar tu examen , lo puedes comprar en el sitio web de Zend Technologies y lo podrá presentar en cualquier centro autorizado Pearson Vue.
Éxitos en su examen !!
Servicios web con PHP utilizando la herramienta NuSoap
El presente artículo esta dirigido a las personas que ya poseen conocimientos sobre Internet y programación y quieren comenzar a conocer el mundo de los web services (servicios web).
Antes de comenzar con lo que es NuSoap creo que es conveniente realizar una introducción a lo que son los Servicios Web, y para esto debemos comenzar con la definición de Web Service.
Web Service: es un sistema software diseñado para soportar la interoperabilidad máquina – máquina a través de una red. Este tiene una interfaz descripta en un formato que puede ser procesado por una máquina (específicamente WSDL, que veremos más adelante). Otros sistemas interactúan con el Web service utilizando mensajes SOAP los cuales se encuentran establecidos previamente.
Entonces podríamos decir que un Web Service es una comunicación por medio de mensajes SOAP entre diferentes equipos a través de una red.
SOAP – Simple Object Access Protocol
Es un protocolo de comunicación, el cual permite la comunicación entre aplicaciones a través de mensajes por medio de Internet. Es independiente de la plataforma, y del lenguaje. Esta basado en XML y es la base principal de los Web Services. Los mensajes SOAP son documento XML propiamente dicho, pero esto lo veremos más adelante cuando veamos un ejemplo de un mensaje SOAP.
WSDL – Web Services Description Language
Es un protocolo basado en XML que describe los accesos al Web Service. Podriamos decir que es el manual de operación del web service, porque nos indica cuales son las interfaces que provee el Servicio web y los tipos de datos necesarios para la utilización del mismo.
¿Que es NuSOAP?
NuSOAP es un kit de herramientas (ToolKit) para desarrollar Web Services bajo el lenguaje PHP. Esta compuesto por una serie de clases que nos harán mucho más fácil el desarrollo de Web Services. Provee soporte para el desarrollo de clientes (aquellos que consumen los Web Services) y de servidores (aquellos que los proveen). NuSOAP esta basado en SOAP 1.1, WSDL 1.1 y HTTP 1.0/1.1
No es el único soporte para Web Services en PHP, existen otros, pero es uno de los que están en una fase de desarrollo mucho más avanzada. Sin ir más lejos, PHP a partir de su versión 5 comienza a dar soporte para SOAP, pero aun esta en fase experimental.
La instalación es bastante sencilla, solo basta ir a la pagina en sourceforge de NuSOAP http://sourceforge.net/projects/nusoap/ y bajar el archivo comprimido (es un .zip).
Lo descomprimimos en un directorio de nuestro servidor web (como puede ser /lib que es el directorio por default), y listo, ya podemos hacer uso de NuSOAP.
Ejemplo de servicios web utilizando nusoap
Les mostrare la forma de usar nusoap para aplicaciones de servicios web usando wsdl.
ejemplo : nusoap usando wsdl
(Como proveedor del servicio web)
1.- Incluimos la libreria nusoap dentro de nuestro archivo
require_once(‘lib/nusoap.php’);
2.- Creamos la instancia al servidor
$server = new soap_server();
3.- Inicializamos el soporte WSDL
$server->configureWSDL(‘hellowsdl2′, ‘urn:hellowsdl2′);
4.- Registramos la estructura de datos usado por el servicio
// Parametros de entrada
$server->wsdl->addComplexType(
‘Person’,
‘complexType’,
‘struct’,
‘all’,
”,
array(
‘firstname’ => array(‘name’ => ‘firstname’, ‘type’ => ‘xsd:string’),
‘age’ => array(‘name’ => ‘age’, ‘type’ => ‘xsd:int’),
‘gender’ => array(‘name’ => ‘gender’, ‘type’ => ‘xsd:string’)
)
);
// Parametros de salida
$server->wsdl->addComplexType(
‘SweepstakesGreeting’,
‘complexType’,
‘struct’,
‘all’,
”,
array(
‘greeting’ => array(‘name’ => ‘greeting’, ‘type’ => ‘xsd:string’),
‘winner’ => array(‘name’ => ‘winner’, ‘type’ => ‘xsd:boolean’)
)
);
5.- Registramos el metodo a exponer
$server->register(‘hello’, // method name
array(‘person’ => ‘tns:Person’), // input parameters
array(‘return’ => ‘tns:SweepstakesGreeting’), // output parameters
‘urn:hellowsdl2′, // namespace
‘urn:hellowsdl2#hello’, // soapaction
‘rpc’, // style
‘encoded’, // use
‘Greet a person entering the sweepstakes’ // documentation
);
6.- Definimos el metodo como una función PHP
function hello($person) {
global $server;
$greeting = ‘Hello, ‘ . $person['firstname'] .
‘. It is nice to meet a ‘ . $person['age'] .
‘ year old ‘ . $person['gender'] . ‘.’;
if (isset($_SERVER['REMOTE_USER'])) {
$greeting .= ‘ How do you know ‘ . $_SERVER['REMOTE_USER'] . ‘?’;
}
$winner = $person['firstname'] == ‘Scott’;
return array(
‘greeting’ => $greeting,
‘winner’ => $winner
);
}
7.- Usamos el pedido para invocar el servicio
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ”;
$server->service($HTTP_RAW_POST_DATA);
(Como cliente, consumidor del servicio web)
——————————————-
1.- Incluimos la libreria nusoap dentro de nuestro archivo
require_once(‘lib/nusoap.php’);
2.- Creamos la instancia como cliente
$client = new soapclient(‘http://localhost/phphack/hellowsdl2.php?wsdl’, true);
3.- Chekeamos para un posible error
$err = $client->getError();
if ($err) {
// Display the error
echo ‘<h2>Constructor error</h2><pre>’ . $err . ‘</pre>’;
// At this point, you know the call that follows will fail
}
4.- Llamamos al metodo soap
$person = array(‘firstname’ => ‘Willi’, ‘age’ => 22, ‘gender’ => ‘male’);
$result = $client->call(‘hello’, array(‘person’ => $person));
5.- Chekeamos para una falla al momento de llamar al metodo
if ($client->fault) {
echo ‘<h2>Fault</h2><pre>’;
print_r($result);
echo ‘</pre>’;
} else {
// Check for errors
$err = $client->getError();
if ($err) {
// Display the error
echo ‘<h2>Error</h2><pre>’ . $err . ‘</pre>’;
} else {
// Display the result
echo ‘<h2>Result</h2><pre>’;
print_r($result);
echo ‘</pre>’;
}
}
6.- Una vez que todo este bien obtenemos la información deseada del servicio a travez del metodo que hemos invocado
se pude ver los pedidos y respuestas de esta manera:
echo ‘<h2>Request</h2>’;
echo ‘<pre>’ . htmlspecialchars($client->request, ENT_QUOTES) . ‘</pre>’;
echo ‘<h2>Response</h2>’;
echo ‘<pre>’ . htmlspecialchars($client->response, ENT_QUOTES) . ‘</pre>’;
// Display the debug messages
echo ‘<h2>Debug</h2>’;
echo ‘<pre>’ . htmlspecialchars($client->debug_str, ENT_QUOTES) . ‘</pre>’;
Algunos frameworks para PHP más usados
A continuación las características de algunos de los Frameworks para PHP más usados.
Zend Frameworks
El Zend Frameworks es simple, no necesita instalación especial, requiere PHP 5 e incorpora el patrón MVC.
Se debe descargar y copiarlo hacia nuestro servidor local, veamos a través de un pequeño ejemplo cómo podemos crear un lector de RSS. Los ficheros que creemos podemos copiarlos dentro del directorio “library”.
<?php
// Componente requerido
require_once 'Zend/Feed.php';
// Incluimos la dirección de nuestro fichero rss que deseamos importar
$feed = Zend_Feed::import('http://localhost/rss.php');
// Se recorrerán todos los item del fichero, mostrando el titulo y el enlace
foreach ($feed->items as $item) {
echo "<p>" . $item->title() . "<br />";
echo $item->link() . "</p>";
}
?>
Symfony
Diseñado con el objetivo de optimizar la creación de las aplicaciones web, con el uso de sus características. Posee una librería de clases que permiten reducir el tiempo de desarrollo.
Symfony está desarrollado en PHP5, se puede utilizar en plataformas *nix (Unix, Linux) y Windows. Requiere de una instalación, configuración y líneas de comando, incorpora el patrón MVC, soporta AJAX, plantillas y un gran número de bases de datos.
Luego de descargar, debemos desempaquetar hacia un directorio dentro de nuestro servidor web. Puede configurar el archivo “symfony.bat” e introducir la ruta completa del archivo “php.exe” en la línea 34.
set PHP_COMMAND=c:/xampp/xampp/php/php.exe
Si nos encontramos en el directorio “sf_sandbox” podemos ir a las líneas de comando y conocer la versión del framework: symfony -V. Podemos verificar la creación de nuestro proyecto introduciendo en el navegador, por ejemplo: http://localhost/sf_sandbox/web/frontend_dev.php
La estructura de los directorios es:
sf_sandbox/ // directorio del proyecto apps/ // archivos de la aplicación batch/ // procesos cache/ // cache config/ // configuración data/ // archivos y códigos de datos doc/ // documentación lib/ // librerías y códigos de proposito general log/ // archivos de log plugins/ // plugins test/ // tests web/ // directorio público
Si deseamos crear un weblog debemos crear el archivo “schema.yml” en el directorio “sf_sandbox/config/”. Después de haberlo creado podemos usar las siguientes líneas de comando dentro del directorio “sf_sandbox/”:
- symfony propel-generate-crud frontend post Post : crear y listar Post.
- symfony propel-generate-crud frontend comment Comment : crear y listar comentarios.
- symfony clear-cache : limpiar la cache.
Los modulos serán creados en “sf_sandbox\apps\frontend\modules\”. Podemos ver el resultado:
- http://localhost/sf_sandbox/web/frontend_dev.php/post
- http://localhost/sf_sandbox/web/frontend_dev.php/comment
Se puede acceder a los archivos y modificar las plantillas a nuestro gusto.
Seagull
El framework Seagull, nos permite realizar una programación modular, posee un Sistema de Gestión de Contenidos (CMS).
Entre sus características de encuentran su compatibilidad con PHP 4 y PHP 5, ORM integrado, incorpora el patrón MVC, uso de templates, soporte para múltiples bases de datos, validación de datos, alto nivel de configuración, autentificación, integración de librerías PEAR.
Debemos descargar el framework, luego descomprimirlo hacia un directorio dentro de nuestro servidor web. Luego introducimos la dirección en nuestro navegador para realizar su instalación. Ejemplo: http://localhost/seagull/www/.
Debemos completar los 6 pasos siguientes:
- Aceptar la licencia
- Autorización
- Debemos crear en el directorio el archivo “
AUTH.txt” que contenga el código generado o descargarlo en “seagull/”. Si se crea correctamente podremos continuar al siguiente paso. - Detección: aquí se detectará los módulos disponibles, así como la configuración y versión de PHP.
- Conexión con las bases de datos: debemos configurar los datos necesarios para realizar la conexión con el servidor de base de datos.
- Configuración de la base de datos: introducir el nombre de la base de datos. Se puede utilizar una existente.
- Creación del Usuario Administrador: se creará la cuenta de usuario que utilizaremos para administrar a Seagull Framework.
Luego de Finalizar su instalación podemos crear contenidos visitando http://localhost/ seagull/www/ e introduciendo el usuario y clave de administración.
Prado
Prado está basado en componentes eventos con el objetivo de acelerar el desarrollo de aplicaciones web usando PHP 5.
El concepto del desarrollo de aplicaciones en Prado es diferente, se utilizan componentes, eventos y propiedades en vez de procedimientos, URL y parámetros.
Este Framework combina especificaciones en un archivo XML, plantillas HTML y una clase PHP. Prado, cuenta con soporte para AJAX, validación, autentificación, plantillas, múltiples bases de datos.
Entre los beneficios que podemos encontrar para el desarrollo de aplicaciones web se encuentran:
- Reutilización: los códigos y componentes pueden ser reutilizados.
- Fácil uso: la creación y uso de componentes es fácil.
- Funcionamiento: utiliza una técnica de caché para asegurar el funcionamiento de aplicaciones basadas en el.
- Integración: permite la separación del contenido y la presentación.
Podemos descargar y descomprimir Prado en un directorio, luego acceder al siguiente demo.
CodeIgniter
CodeIgniter es un buen framework, utilizado por una gran comunidad de usuarios. Construido para codificadores PHP que necesitan una herramienta de desarrollo fácil para crear aplicaciones web simples y elegantes.
Entre sus características podemos encontrar su compatibilidad con PHP 4 y PHP 5, incorpora el modelo MVC, soporte para múltiples bases de datos, plantillas, validaciones, no requiere instalación, podemos encontrar una librería con un gran número de clases.
Podemos descargarlo y descomprimir este paquete dentro un directorio en nuestro servidor web.
Cómo instalar CodeIgniter:
Debemos acceder al archivo “application/config/config.php” e introducir la URL de nuestro sitio. Si realizaremos conexiones con nuestro servidor de base de datos necesitaremos configurar el archivo “application/config/database.php” e introducir los datos necesarios para realizar la conexión como son: host del servidor, usuario, contraseña, nombre de la base de datos, driver a utilizar (mysql, postgre, oracle, etc).
Crea tu primera aplicación con CodeIgniter:
CodeIgniter framework contiene un directorio donde se crearán las vistas “view” y los controles “controllers”. Crearemos nuestra primera vista en “application/views/” y la llamaremos “aplicacionview.php” con el contenido:
<html> <head> <title><?=$title;?></title> </head> <body> <h1><?=$heading;?></h1> <h3>Mi aplicación</h3> <ul> <?php foreach($todo_list as $item):?> <li><?=$item;?></li> <?php endforeach;?> </ul> </body> </html>
Luego crearemos el control para esta vista en “application/controller/” llamado “aplicacion.php” con el siguiente código:
<?php
//Aplicación es el nombre del control
class Aplicación extends Controller {
function index()
{
//utilizamos un array
$data['todo_list'] = array('Chat', 'Encuesta', 'Correo');
// títulos y bienvenida de la aplicación
$data['title'] = "Mi aplicación";
$data['heading'] = "Bienvenidos a mi aplicación";
//nombre de la vista que deseamos cargar
$this->load->view('aplicacionview', $data);
}
}
?>
Para ver nuestra aplicación solo basta con introducir en la URL: http://localhost/CodeIgniter/index.php/aplicacion/
CakePHP
CakePHP es un Framework similar a CodeIgniter de desarrollo rápido. Es una estructura de librerías y clases para programar aplicaciones web. Su base es el Framework de Ruby on Rails.
Nos brinda la posibilidad de interactuar con las base de datos, usando ActiveRecord. Incorpora el patrón MVC, compatible con PHP4 y PHP5, URLs amigables, Soporta AJAX, incluye caching, validación.
Debemos descargarlo, descomprimirlo y hacer un directorio. La estructura de directorios es la siguiente:
.../(Directorio donde se encuentra instalado)
/app
/config
/controllers
/models
/plugins
/tmp
/vendors
/views
/webroot (se incluirán imagines, javascript, css)
.htaccess
index.php
/cake
/vendors
.htaccess
index.php
El directorio “app/tmp/” debe tener permiso de escritura. Podemos observar el sitio en http://localhost/cake/. Para editar la página es necesario crear un documento dentro del directorio “/app/views/pages/” con el nombre “home.html“:
<h1>PRUEBA</h1>
Para modificar el diseño se debe crear un documento en “/app/views/layouts/” con el nombre “default.html”:
<html> <head> <title><?php echo $title_for_layout?></title> </head> <body> <!-- Aquí se mostrarán las vistas --> <?php echo $content_for_layout ?> </body> </html>
También podemos hacer uso de controles, modelos, entre otros.
PHP on TRAX
El PHP on TRAX es compatible con PHP5, incluye el patrón MVC, incluye validación y AJAX, múltiples bases de datos. Podemos descargarlo y descomprimirlo hacia un directorio en nuestro servidor web.
Zoop Framework
Zoop es un Framework PHP Orientado a Objeto basado en el modelo MVC, sus desarrolladores lo caracterizan por ser rápido, eficiente y fácil destinado para programadores.
Requiere PHP 4.3.10 o superior, además podemos contar con librerías para “PEAR”. Cuenta con soporte e integración con AJAX, caching, validación, sistemas de plantillas Smarty, creación de PDF, plantillas para el envío de correo electrónico usando SMTP, cuenta con compatibilidad con múltiples base de datos.
Debemos descargar los archivos que encontramos en el repositorio y descomprimirlos hacia un directorio de nuestro servidor web. Los usuarios pueden encontrar en su comunidad: blog, foros de discusión, listas de correo, documentación, video demostraciones, ejemplos sobre el uso de las librerías “Prototype”.
Luego nos permite acceder al directorio de “skeleton” y configurar el archivo “config.php”, donde debemos definir la ruta del framework: define(’zoop_dir’, app_dir . “c:/apache/htdocs/zoop”);
WACT
Por sus siglas en ingles “Web Application Component Toolkit” es un frameworks para el desarrollo de aplicaciones web.
Facilita un aprovechamiento modular, sus componentes permiten la integración con otras aplicaciones web. Implementa el patrón MVC. La versión actual de WACT requiere PHP 5, por ahora solo está disponible desde Subversión.
AKELOS PHP FRAMEWORK
Es una plataforma de desarrollo de aplicaciones web basado en el MVC (Modelo Vista Controlador), patrón de diseño. Sobre la base de las buenas prácticas, que lo permite:
1.- Escribir opiniones usando Ajax fácilmente
2.- Control de las solicitudes y las respuestas a través de un controlador
3.- Gestión de aplicaciones internacionalizadas
4.- Comunicar los modelos y la base de datos mediante simples convenciones
Su Akelos puede ejecutar aplicaciones basadas en la mayoría de los proveedores de servicios de alojamiento compartido, ya que sólo requiere Akelos PHP estará disponible en el servidor. Esto significa que el Akelos PHP Framework es el candidato ideal para la distribución independiente de las aplicaciones web, ya que no requiere ningun estándar para ejecutar la configuración de PHP. Descargar Akelos.
mktime y checkdate en javascript
Les mostrare como crear dos funciones que son muy conocidas en php (mktime y checkdate) pero en este caso esta hecho con javascript cuyo uso puede servir si se necesita usar al lado del cliente, ideal para validar fechas antes de entrar al servidor (que puede servir para cualquier lenguaje de programacion)
La funcion checkdate verifica la validez de la fecha formada por sus argumentos. Una fecha es considerada válida si cada parámetro es definido apropiadamente.Devuelve TRUE si la fecha dada es válida de lo contrario devuelve FALSE.
function checkDate(month, day, year) {
var monthLength = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
if (!day || !month || !year) {
return false;
}
// check for bisestile year
if (year/4 == parseInt(year/4)) {
monthLength[1] = 29;
}
if (month < 1 || month > 12) {
return false;
}
if (day > monthLength[month-1]) {
return false;
}
return true;
}
La función mktime devuelve la marca de tiempo Unix que corresponde a los argumentos dados. Esta marca de tiempo es un entero largo que contiene el número de segundos entre el Epoch Unix (Enero 1 1970 00:00:00 GMT) y la hora especificada.
function mktime() {
var no, ma = 0, mb = 0, i = 0, d = new Date(), argv = arguments, argc = argv.length;
d.setHours(0,0,0); d.setDate(1); d.setMonth(1); d.setYear(1972);
var dateManip = {
0: function(tt){ return d.setHours(tt); },
1: function(tt){ return d.setMinutes(tt); },
2: function(tt){ set = d.setSeconds(tt); mb = d.getDate() – 1; return set; },
3: function(tt){ set = d.setMonth(parseInt(tt)-1); ma = d.getFullYear() – 1972; return set; },
4: function(tt){ return d.setDate(tt+mb); },
5: function(tt){ return d.setYear(tt+ma); }
};
for( i = 0; i < argc; i++ ){
no = parseInt(argv[i]*1);
if (isNaN(no)) {
return false;
} else {
// arg is number, lets manipulate date object
if(!dateManip[i](no)){
// failed
return false;
}
}
}
return Math.floor(d.getTime()/1000);
}
La forma de usar estas funciones, es la siguiente:
mktime
————–
var start_date = mktime(start_hour,start_minute,0,start_month,start_day,start_year)
cuyos parametros pueden ser datos que provienen de un formulario
var start_day = document.form1.start_day.value;
var start_month = document.form1.start_month.value;
var start_year = document.form1.start_year.value;
var start_hour = document.form1.start_hour.value;
var start_minute = document.form1.start_minute.value;
Es ideal para comparar fecha, por ejemplo puede ser que la fecha de inicio (start_date) no sea mayor que la fecha final (end_date)
var end_date = mktime(end_hour,end_minute,0,end_month,end_day,end_year)
if(start_date > end_date)
{
alert(“Fecha de inicio no debe ser mayor que fecha de fin”)
} else {
alert(“Fecha Correcta”)
}
checkdate
————–
recuerden que el checkdate retorna true o false
if (checkDate(ends_month,ends_day,ends_year) == false)
{
alert(“fecha no valida”);
} else {
alert(“fecha correcta”);
}
