Con un ejemplo se ve bien sencillo:
<?php // se importa la Plataforma Joomla. require_once 'libraries/import.php'; // directorio base que se usa para el autocargador de clases const JPATH_BASE = __DIR__; // registra un prefijo cualquiera JLoader::registerPrefix('Jnj', JPATH_BASE); // crea una instancia de la clase nueva $app = JApplicationWeb::getInstance("JnjUnDirectorioEjemploWeb"); // se supone que debemos guardar la applicación en el core JFactory::$application = $app; // y entonces podemos ejecutarla desde el core JFactory::getApplication()->execute(); // así queda todo ordenado en el núcleo del framework
<?php class JnjUnDirectorioEjemploWeb extends JApplicationWeb { protected function doExecute() { $this->setBody(""); $this->appendBody("<h1>Plataforma Joomla! Autocarga de clases con JLoader</h1>"); $this->appendBody("Si estas viendo ésto en el navegador es que está bien la autocarga..."); } }
Empezando
...
<?php
// se importa la Plataforma Joomla.
require_once 'libraries/import.php';
class laWeb extends JApplicationWeb {
protected function doExecute()
{
$this->setBody("<html><body>");
$this->appendBody("<h1>Plataforma Joomla! SQLite</h1>");
// vector de configuración de la base de datos
// para sqlite sólo hace falta ésto
$option = array();
$option['driver'] = 'sqlite'; // tipo de bd
//$option['host'] = 'direccionhost.com'; // host
//$option['user'] = 'usuario'; //
//$option['password'] = 'contraseña'; //
$option['database'] = 'bdpruebas.sqlite'; // nombre de la bd
//$option['prefix'] = 'pref_'; // prefijo
$dbo = JDatabaseDriver::getInstance($option);
// se puede abreviar usando:
//$dbo = JDatabaseDriver::getInstance(array('driver' => 'sqlite', 'database' => 'bdpruebas.sqlite'));
// crea una tabla para las pruebas, la borra si existe
$dbo->setQuery("DROP TABLE IF EXISTS aleatorios");
$dbo->execute();
$dbo->setQuery('CREATE TABLE IF NOT EXISTS aleatorios (id INTEGER PRIMARY KEY, numero INTEGER)');
$dbo->execute();
$this->appendBody("<p>Creada la base de datos...</p>");
// inserta unos datos en la BD
for ($i = 0; $i < 10; $i++) {
$dbo->setQuery('INSERT INTO aleatorios (id, numero) VALUES (' . $i . ', ' . rand(0,99) . ');');
$dbo->execute();
}
$this->appendBody("<p>Insertados datos...</p>");
// lee la tabla
$this->appendBody("Listando con loadRowList ");
$dbo->setQuery("SELECT * FROM aleatorios;");
$resultados = $dbo->loadRowList();
foreach ($resultados as $res){
$this->appendBody( "<p>" . $res[0] . ", " . $res[1] . "</p>");
}
// lee la tabla de otra forma
$this->appendBody("Listando con loadAssocList ");
$dbo->setQuery("SELECT * FROM aleatorios;");
$resultados = $dbo->loadAssocList();
foreach ($resultados as $res){
$this->appendBody( "<p>" . $res['id'] . ", " . $res['numero'] . "</p>");
}
// lee de nuevo la tabla de otra forma
$this->appendBody("Listando con loadObjectList ");
$dbo->setQuery("SELECT * FROM aleatorios;");
$resultados = $dbo->loadObjectList();
foreach ($resultados as $res){
$this->appendBody( "<p>" . $res->id . ", " . $res->numero . "</p>");
}
$this->appendBody("</body></html>");
}
}
JApplicationWeb::getInstance("laWeb")->execute();
...
El ejemplo en descarga está aquí.
El resultado de ejecutarlo desde el navegador debe ser algo tal que así:
Creada la base de datos…
Insertados datos…
Listando con loadRowList
0, 55
1, 4
2, 1
3, 76
4, 95
5, 62
6, 63
7, 16
8, 52
9, 73
Listando con loadAssocList
0, 55
1, 4
2, 1
3, 76
4, 95
5, 62
6, 63
7, 16
8, 52
9, 73
Listando con loadObjectList
0, 55
1, 4
2, 1
3, 76
4, 95
5, 62
6, 63
7, 16
8, 52
9, 73
Explicaciones
Independizando de la base de datos
...
<?php
// se importa la Plataforma Joomla.
require_once 'libraries/import.php';
class laWeb extends JApplicationWeb {
protected function doExecute()
{
$this->setBody("<html><body>");
$this->appendBody("<h1>Plataforma Joomla! Independizando de la base de datos</h1>");
//
$dbo = JDatabaseDriver::getInstance(array('driver' => 'sqlite', 'database' => 'bdpruebas.sqlite'));
// borrando los datos de la tabla aleatorios
// para tenerla limpia
$query = $dbo->getQuery(true);
$query->delete('aleatorios');
$dbo->setQuery($query);
$dbo->execute();
$this->appendBody("<p>Borrados los datos...</p>");
// inserta unos datos en la BD
for ($i = 0; $i < 10; $i++) {
// crear una nueva consulta
$query = $dbo->getQuery(true);
// se construye
$query->insert('aleatorios')
->columns('id, numero')
->values($i . ', ' . rand(0,99));
// se establece
$dbo->setQuery($query);
// se ejecuta
$dbo->execute();
}
$this->appendBody("<p>Insertados datos...</p>");
// consultado datos
$query->select('*')->from('aleatorios');
$dbo->setQuery($query);
$resultados = $dbo->loadObjectList();
foreach ($resultados as $res){
$this->appendBody( '<p>' . $res->id . ', ' . $res->numero . '</p>');
}
$this->appendBody("</body></html>");
}
}
JApplicationWeb::getInstance("laWeb")->execute();
...
Éste segundo ejemplo está en descarga aquí.
$dbo = JDatabaseDriver::getInstance(array('driver' => 'sqlite', 'database' => 'bdpruebas.sqlite'));
Terminando
Otra vez más, me remito para más información a la documentación oficial:
Éste post al final se ha hecho bien largo, ¡otro testamento! xDD Es que las bases de datos lo merecen ¿no cree?
Espero que sirva.
Saludos.
El ejemplo
Con ésto pequeño ejemplo se puede ver una forma muy simple de usar el framework:
...
<?php
// se importa la Plataforma Joomla.
require_once 'libraries/import.php';
// en éste ejemplo tan simple la clase la pongo aquí pero
// se debería poner en otro fichero
class laWeb extends JApplicationWeb {
protected function doExecute()
{
$this->setBody("<html><body>");
$this->appendBody("<h1>Plataforma Joomla! probando la fábrica</h1>");
// declara una variable que es un objeto para trabajar con emails
$emiliator = JFactory::getMailer();
$this->appendBody("<p>Versión de MAILER de la plataforma: " . $emiliator->Version);
$this->appendBody("</body></html>");
}
}
// instancio un objeto de la aplicación web
$app = JApplicationWeb::getInstance("laWeb");
// guardo la aplicación en el core
JFactory::$application = $app;
// uso la aplicación web que guardé directamente desde el core
JFactory::getApplication()->execute();
...
Descargar archivo con el ejemplo.
Explicaciones
Materiales
<?php
class JConfigExample
{
public $dbtype = 'mysql';
public $host = 'localhost';
public $user = '';
public $password = '';
public $db = '';
public $dbprefix = 'jos_';
public $ftp_host = '127.0.0.1';
public $ftp_port = '21';
public $ftp_user = '';
public $ftp_pass = '';
public $ftp_root = '';
public $ftp_enable = 0;
public $tmp_path = '/tmp';
public $log_path = '/var/logs';
public $mailer = 'mail';
public $mailfrom = 'admin@localhost.home';
public $fromname = '';
public $sendmail = '/usr/sbin/sendmail';
public $smtpauth = '0';
public $smtpsecure = 'none';
public $smtpport = '25';
public $smtpuser = '';
public $smtppass = '';
public $smtphost = 'localhost';
public $debug = 0;
public $caching = '0';
public $cachetime = '900';
public $language = 'en-GB';
public $secret = null;
public $editor = 'none';
public $offset = 0;
public $lifetime = 15;
}
<?php
// punto de entrada seguro
define('_JEXEC', 1);
require "libraries/import.php";
require "libraries/config.example.php";
class laWeb extends JApplicationWeb {
protected function doExecute()
{
$this->setBody("<html><body>");
$this->appendBody("<h1>Configuración de ejemplo</h1>");
// crea el objeto con las configuraciones
$conf = new JConfigExample();
// lista dicho objeto
foreach($conf as $nombre=>$valor)
$this->appendBody("<p><b>" . $nombre . "</b>: " . $valor . "</p>");
$this->appendBody("</body></html>");
}
}
JApplicationWeb::getInstance("laWeb")->execute();
<?php
define('_JEXEC', 1);
require "libraries/import.php";
class laWeb extends JApplicationWeb {
protected function doExecute()
{
$this->setBody("<html><body>");
$this->appendBody("<h1>Información sobre la Plataforma Joomla!</h1>" .
"<p>Compilación: " . JPlatform:: BUILD . "</p>" .
"<p>Nombre en código: " . JPlatform:: CODE_NAME . "</p>" .
"<p>Copyright: " . JPlatform:: COPYRIGHT . "</p>" .
"<p>Texto del link: " . JPlatform:: LINK_TEXT . "</p>" .
"<p>Mantenimiento: " . JPlatform:: MAINTENANCE . "</p>" .
"<p>Producto: " . JPlatform:: PRODUCT . "</p>" .
"<p>Liberación: " . JPlatform:: RELEASE . "</p>" .
"<p>Fecha de liberación: " . JPlatform:: RELEASE_DATE . "</p>" .
"<p>Tiempo de liberación: " . JPlatform:: RELEASE_TIME . "</p>" .
"<p>Zona de tiempo de liberación: " . JPlatform:: RELEASE_TIME_ZONE . "</p>" .
"<p>Estado: " . JPlatform:: STATUS . "</p>" );
$this->appendBody("<p>Versión larga: " . JPlatform::getLongVersion() . "</p>" );
$this->appendBody("</body></html>");
}
}
JApplicationWeb::getInstance("laWeb")->execute();
Con ésto me despido por hoy.
Saludos.
Hablando sobre la creación de páginas web con CMSs. Podemos llegar a ver que la cantidad de CMSs que hay para poner en marcha una web sin programar nada de código fuente es muy grande. He visto que los principales vienen siendo WordPress, Drupal y Joomla. Y en orden de gente que los usa, Joomla viene ganando, o por lo menos eso es lo que he leido en varias páginas de habla hispana y a fecha de hoy.
Me decidí a aprender Joomla en un principio, pero acabé probando WordPress y Drupal también. El Joomla para el que va éste post es la versión 2.5 y tal vez sirva también para los de la 1.5 y en futuro. Yo de momento la versión que tengo instalada es la 2.5 y es la que he usado para escribir éste tutorial.
Vamos a comenzar por ver la estructura en líneas generales de Joomla, si vamos al directorio, por los nombres podremos hacernos una idea de que la carpeta templates/ (plantillas en castellano) es la carpeta en cuestión que nos interesa.
administrator/
cache/
cli/
components/
images/
includes/
language/
libraries/
logs/
media/
modules/
plugins/
templates/
tmp/
uploads/
configuration.php
favicon.ico
htaccess.txt
index.php
LICENSE.txt
README.txt
robots.txt
web.config.txt
Dentro de la carpeta tenemos las carpetas correspondientes a todas las plantillas que tenga instaladas nuestro Joomla. Podemos editarlas directaremente de aquí, o a través del administrador de Joomla, actualizamos la página y los cambios se verán.
La plantilla ‘atomic’ es una plantilla básica, sin muchas florituras, para que hagamos a partir de ella, la nuestra propia. Pero mirando los archivos que la componen podemos ver que hay demasiado código fuente si es que estas haciendo tu primera plantilla, así que vamos a crear otra más simple todavía y luego le podrás añadir todo lo que quieras.
La plantilla básica ‘atomic’ que proporciona Joomla tiene la siguiente estructura:
css/ <- aquí van las hojas de estilo
html/ <- páginas html peladas
images/ <- imágenes de la plantilla
language/ <- archivos para las traducciones
component.php <- para mostrar el contenido de los componentes
error.php <- página de error
favicon.ico <- el icono de la web
index.html <- el index en html
index.php <- el index en php
template_preview.png <- vista previa de la plantilla
template_thumbnail.png <- imagen pequeña de la vista previa
templateDetails.xml <- descripción de la plantilla, para uso interno
Hay plantillas muy grandes, con muchos añadidos, pero ésta que suponemos básica vamos a reducirla de la manera siguiente. Sólo necesitamos lo siguiente para nuestra nueva plantilla:
css/
favicon.ico
index.php
template_preview.png
template_thumbnail.png
templateDetails.xml
Llegado éste punto, acabamos de crear la nueva carpeta dentro de templates/ y hemos puesto todos estos archivos. Ahora resulta que tal cual Joomla no ve la plantilla dentro del administrador de plantillas. Podemos ir al Gestor de Extensiones y darle a Encontrar, con lo que Joomla buscará todo lo que hayamos puesto manualmente sin usar el instalador de Joomla. Ahora ya veremos la nueva plantilla en el Gestor de Plantillas, la ponemos como plantilla del sitio y nuestro sitio tendrá la apariencia que acabamos de hacer.
Ahora podemos editar éstos archivos directamente, añadirles imágenes, cambiar la hoja de estilos CSS, las posiciones, etc.. y sólo con refrescar la página veremos los cambios.
Otra opción para usar ésta plantilla, es comprimir el directorio donde está, y después instalarlo con el gestor de extensiones. Es decir, en el ejemplo anterior, hemos creado el directorio mynew/ dentro de templates/, comprimimos el directorio mynew/ con todos los archivos que hemos puesto y nos quedará, en éste caso, el archivo mynew.zip con toda la plantilla. Éste archivo comprimido es el que usamos en el gestor de extensiones para instalar la plantilla.
Para terminar, si todo ha ido bien, entonces tenemos que ver algo parecido a lo siguiente en nuestro navegador:
Sólo queda poner en cada posición los módulos que queramos usando Joomla. En las posiciones ahora tendremos: arriba, izquierda, derecha, contenido y abajo; que son los valores que hemos usado en el index.php y hemos puesto también en el ‘templateDetails.xml’. Ahora todo es imaginación y con buena documentación sobre CSS podremos hacer que nuestra página con Joomla tenga una apariencia única, totalmente personalizada, con efectos 3D o cualquier otra cosa que se pueda hacer con HTML, Javascript, CSS, etcétera…
Ésto es todo un mundo, las plantillas, los editores de plantillas, maquetación, etcétera… hay mucha información por Internet. Espero que haya servido.
Un saludo.
Hasta la próxima