Hace tiempo que estoy queriendo hacer alguna interfaz de XOOPS con
algún framework conocido, como lo es Cakephp. Busqué bastante si
alguien habia hecho algo con XOOPS y Cakephp y la verdad no encontré nada.
Lo que si encontré fueron algunos artículos muy
interesantes como
http://www.gigapromoters.com/blog/2007/01/28/joining-powers-of-two-great-systems-joomla-and-cakephp/http://www.thinkingphp.org/2006/05/04/using-cakephp-in-external-php-systems-cmss-weblogs-etc/y
http://www.gigapromoters.com/blog/2007/02/13/finally-a-practical-solution-joomla-with-cakephp-together-jake/entonces empecé a intentar crear un puente propio para Xoops.
Aqui les cuento lo que hice. Claro que esto es solo una prueba por lo cual hay muchas cosas por hacer.
Les comento que lo que hice fue seguir la explicación de Jake en sus comienzos y descargando su ejemplo, pude armar este paquete para Xoops.
Por ello quizá los interesados puedan ayudar para que esto tome más forma.
Lo que intenté hacer fue una especie de modulo que contenga a cakephp dentro del directorio principal donde está Xoops.
A este pequeño proyecto lo llamé Koops.
Pueden bajarlo de
AQUI###############################################
IMPORTANTE:Ver que el mod_rewrite este habilitado en el apache y correctamente configurado.
###############################################
Los directorios están dispuestos de la siguiente manera:
wwwroot
xoops
cache
class
...
koops
...
y sigue...
1 )
Modificar el archivo header.php del directorio principal de Xoops
Le agregué al final una linea como la siguiente:
require_once( 'koops/cake.php');
Claro está que aqui podemos modificar el directorio en donde se incluirá koops.
Pero despues hay que tener en cuenta las variables de ROOT_PATH para Cakephp.
2 )
Dentro de koops copiamos todo el directorio que contiene a Cakephp.
Quedaría de la siguiente forma:
koops/
app
cake
index.php
...
3 )
Dentro de koops/app/webroot/index.php comentar las dos lineas que siguen:
...
if (isset($_GET['url']) && $_GET['url'] === 'favicon.ico') {
} else {
// $Dispatcher=new Dispatcher();
// $Dispatcher->dispatch($url);
}
....
Luego hay que hacer un trigger que una cake y Xoops. Creamos en el directorio /koops
los archivos cake.php y cake.inc.php:
cake.php
require_once("cake.inc.php");
$xoops_path = dirname( dirname( __FILE__ ) );
require_once( $xoops_path . '/mainfile.php' );
$controller= $_GET['option'];
$action=$_GET['task'];
$param = $_GET[ 'id' ];
HTML_cake::requestCakePHP('/'.$controller.'/'.$action.'/'.$param);
?>
y cake.inc.php
class HTML_cake {
function requestCakePHP($url)
{
$_GET['url']=$url;
require_once ('app/webroot/index.php');
$Dispatcher=new Dispatcher();
$Dispatcher->dispatch($url);
}
}
?>
esto manejará qué controlador/acción/vista le va a llegar a Cakephp.
En este punto el directorio quedaría:
koops/
app
cake
index.php
cake.php
cake.inc.php
...
4 )
Luego en koops/app/config/ modifico/creo los siguiente archivos
bootstrap.php
function reform_url($url)
{
$temp=explode('/',$url);
$controller=$temp[1];
$action=$temp[2];
$param=@$temp[3];
$url=XOOPS_URL.'/index.php?option='.$controller.'&task='.$action;
if($param)
$url=$url.'&id='.$param;
return $url;
}
?>
con el fin de que interprete y modifique las url que necesita Cakephp.
En el archivo /koops/app/config/core.php seteamos
define('AUTO_SESSION', false);
para que el control de la sesion lo siga haciendo Xoops.
En koops/app/config/database.php
class DATABASE_CONFIG
{
var $default = array('driver' => XOOPS_DB_TYPE,
'connect' => 'mysql_connect',
'host' => XOOPS_DB_HOST,
'login' => XOOPS_DB_USER,
'password' => XOOPS_DB_PASS,
'database' => XOOPS_DB_NAME,
'prefix' => 'yourprefix_' );
}
?>
5 )
Con esto bastaría por ahora. El el archivo para descargar incluyo un ejemplo.
Para usarlo solo necesitan crear una tabla 'names'
con los campos
id
names
Luego para usarlo
http://localhost/index.php?option=names&task=indexEso es todo. Esto es solo una primera aproximación. Los interesados serán
bienvenidos, y las sugerencias por supuesto también.
Si alguien pudiese traducirlo al ingles se lo agradecería porque mi ingles no es muy bueno.
Saludos,
Saganxis