Traduction libre de l'article de Hagen Graf sur le Joomla!® Community Magazine du mois de décembre 2011 : Write your own App using Joomla! Platform

Il y a quelques jours, la Joomla! platform version 11.3 a été mise à jour. De plus en plus de personnes se demandent ce qu'est la Joomla! platform. L'article qui suit est un chapitre du futur «Joomla! Development Beginner's Guide (Guide du développeur débutant pour Joomla!) qui sortira sous forme pdf le plus sous peu. Le terme Joomla! platform est récent, il est apparu avec la sortie de Joomla! 1.6 en janvier 2011.

Histoire:

Depuis le commencement de Mambo/Joomla!, le package du CMS contient des fichiers nommés mambo.php et joomla.php.

Dans la version 1.0 de Joomla!, ces fichiers contenaient 6153 lignes de code. Ces fichiers, qui incluaient également quelques autres fichiers, étaient tout simplement trop «lourds». Ils servaient à stocker du code utilisé par le noyau ainsi que par les extensions.

Ces fichiers ont grossi au fur et à mesure jusqu'à devenir Jplatform, une sorte de système d'exploitation pour Joomla, faisant du CMS une sorte d'application qui tournerait sur ce système d'exploitation.

Depuis Joomla!1.6, la Patform s'est dissociée du CMS.

La Joomla! Platform est le framework sur lequel fonctionne le CMS Joomla!.

L'idée de cette séparation est née après le lancement de Joomla! 1.0 au cours de l'année 2005, et il aura fallu près de 6 ans pour la mettre en place. Cette séparation va changer la façon dont les développeurs, les architectes et les fournisseurs de services travailleront avec Joomla! dans l'avenir.

De nombreuses entreprises et organisations ont des exigences qui vont bien au-delà de ce qu'offre le CMS de base de Joomla!, par exemple pour l’intégration de systèmes d'e-commerce, de systèmes de réservation ou encore de gestion de membres.

Regardons cela de plus près...

La numérotation

Ce qui m'a le plus surpris la première fois que j'ai entendu parler de la Joomla! Patform a été sa numérotation.

Puis j'ai rapidement compris: le schéma de numérotation se compose du numéro de l'année en cours et d'un numéro de séquence. De cette manière, 11.1 était la première version de l'année 2011. La version qui a suivi était 11.2. La première version qui sortira en 2012 sera donc 12.1.

Cycle des Release

Tous les trois mois, une nouvelle version de la Joomla! Platform vient mettre à jour la précédente.

Contenu du Pack

Le package Joomla! Platform contient les fichiers stockés dans les répertoires /libraries et /media et ne possède pas d'interface graphique.

Le code source de la Platform est stocké sur GitHub.

Avantages et bénéfices de la séparation

1. Cela permet aux développeurs d'utiliser la Joomla! Platform indépendamment du CMS. Ce qui signifie que dans l'avenir, vous aurez le choix entre différents CMSs basés sur la Joomla! Platform. C'est révolutionnaire! Joomla! est le seul système au monde à permettre cela. Il y aura toujours un CMS fourni par le Joomla! Projet, mais d'autres projets comme Molajo pourraient également utiliser Joomla! Platform comme base. 2. Cela permet aux développeurs de contribuer ou d'ajouter des fonctionnalités plus rapidement. Dans le passé il pouvait être frustrant de constater que du bon code ne puisse pas toujours être intégré au noyau de Joomla!. Le stockage de la Joomla! Platform sur GitHub permet de facilement manipuler le code et également d'y intégrer le votre.

3. Une mise à jour tous les 3 mois.

Avec ce cycle relativement court de mise à jour, il est possible d'ajouter des fonctionnalités à la Platform beaucoup plus rapidement que dans le CMS. Cela est pratique pour les développeurs d’extensions pour ajouter des fonctionnalités de base nécessaires à leurs propres extensions.

4. Cela encourage le recrutement de plus de développeurs, y compris des grandes sociétés, qui n'auraient autrement pas contribué. C'est un point crucial, et tout cela fonctionnera pleinement lorsque ces collaborations seront mises en place.

Utiliser la Platform Joomla!

Pour commencer, il faut télécharger la Platform.

Vous trouvez la dernière version sur GitHub (https://github.com/joomla/joomla-platform).

Ensuite, vous devez extraire le dossier dans votre répertoire serveur (htdocs) et créer un répertoire pour vos applications (cli).

Dans le répertoire /docs vous trouverez la documentation et la norme de codage de la plateforme. Les fichiers sont au format DocBook, et c'est un peu délicat pour les visualiser. Elkuku fournit un filtre public pour la documentation où vous pouvez télécharger les docs en pdf (http://elkuku.github.com/joomla-platform/).

Testez votre environnement

La Joomla! Platform n'offre pas d'interface graphique (GUI) dans un navigateur comme le CMS Joomla!, donc nous utilisons PHP en ligne de commande (CLI) pour nos tous premiers tests.

En fonction de notre système d'exploitation et du LAMP utilisé, il est possible que PHP ne soit pas correctement installé. Vous pouvez le vérifier en entrant la commande php -version dans un terminal (Terminal pour OXS, Command Prompt pour Windows, ou Shell pour Linux). J'utilise OSX et MAMP et le résultat ressemble à cela:

web hagengraf$ php -version
PHP 5.3.6 with Suhosin-Patch (cli) (built: Sep 8 2011 19:34:00)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies

Hello World

Nous commençons simplement avec l'exemple “Hello world”. Créez un fichier hello.php et placez le dans le répertoire /cli (que vous venez de créer).(listing 1)

<?php
// TODO Do we need this statement?
define( '_JEXEC', 1 );
// Import of necessary class file
require_once ( '../libraries/import.php' );
// Load JCli class
jimport( 'joomla.application.cli' );
// Extend JCli class
class HelloWorld extends JCli
{
// overwrite method
public function execute( )
{
// print something
$this->out( 'Hello World' );
}
}
// TODO ... how to describe the next statement easily :)
// First try: Call of the static method execute in the derived class HelloWorld?
JCli::getInstance( 'HelloWorld' )->execute( );
?>

Listing 1: hello.php

Exécutez votre nouvelle application avec la commande php hello.php, et le résultat devrait ressembler à ceci:

cli hagengraf$ php hello.php
Hello World
cli hagengraf$

Bien, pour être honnête, j'ai été content la première fois que j'ai vu ce résultat...mais essayons d'aller un peu plus loin avec un autre exemple ;).

Vos derniers Tweets

Avez-vous un compte Tweeter? Créons une application interactive utilisant la Joomla! Platform pour lire vos derniers Tweets:(listing 2)

<?php
define('_JEXEC', 1);
require_once '../libraries/import.php';
jimport('joomla.application.cli');
class TwitterFeed extends JCli
{
//Get Latest Tweet
function latest_tweet( $username, $count = 5 )
{
$url = "http://twitter.com/statuses/user_timeline/$username.xml?count=$count";
$xml = simplexml_load_file( $url ) or die( "could not connect" );
$text = '';
foreach( $xml->status as $status )
{
$text .= $status->text . '
';
}
return $text;
}
public function execute()
{
$this->out( 'What is your twitter handle?' );
$username = $this->in( );
$this->out( 'How many tweets to view?' );
$count = $this->in( );
$tweet = $this->latest_tweet( $username, $count );
$this->out( $tweet );
}
protected function fetchConfigurationData()
{
return array();
}
}
JCli::getInstance('TwitterFeed')->execute();
Listing 2: twitter.php

Lorsque vous lancez l'application avec la commande php twitter.php, cela vous demande votre nom d'utilisateur Twitter et combien de Tweets vous souhaitez voir. Cela affiche ensuite les Tweets!

cli hagengraf$ php twitter.php
What is your twitter handle?
hagengraf
How many tweets to view?
5
Did you know? Member for 8 years 7 weeks :) http://t.co/L8tzB2kz #drupal #wordpress
@brianronnow can you give me the wrong link, then I will update it
@brianronnow oh sorry :) the correct answer is 243 pages
@brianronnow the last update was 2 days before JDay Denmark

Nous avançons petit à petit!

Une application Web

La différence entre nos premiers exemples et une application pouvant être lancée dans un navigateur est l'utilisation du HTML. En effet l'utilisation du HTML permet l'affichage d'une page web dans un navigateur.

Pour notre première application web nous voulons juste afficher son chemin (path) ainsi que la date du jour. Le résultat dans le navigateur devrait ressembler à ceci:

My Web Application

The current URL is http://localhost/jplatform/

The date is 2011-11-21 15:03:11

Pour tester cela, nous avons besoin de 2 fichiers: index.php et application.php, dans le répertoire includes/. Si vous voulez créer une application web basée sur une Joomla! Platform, il faut placer le fichier index.php dans le répertoire racine de la Joomla! Platform, et le fichier application.php dans un nouveau dossier nommé includes/.

- build
 - docs
 - includes
 -- application.php
 - libraries
 - media
 - tests
 index.php

Le code index.php exécute les instructions suivantes (). Des morceaux de code sont collectés dans les différentes parties de la plateforme, et l'application est lancée à la fin avec la commande $app->render();.

<?php
if (file_exists(dirname(__FILE__) . '/defines.php'))
{
include_once dirname(__FILE__) . '/defines.php';
}
// Define some things. Doing it here instead of a file because this
// is a super simple application.
define('JPATH_BASE', dirname(__FILE__));
define('JPATH_PLATFORM', JPATH_BASE . '/libraries');
define('JPATH_MYWEBAPP',JPATH_BASE);
// Usually this will be in the framework.php file in the
// includes folder.
require_once JPATH_PLATFORM.'/import.php';
// Now that you have it, use jimport to get the specific packages your application needs.
jimport('joomla.environment.uri');
jimport('joomla.utilities.date');
//It's an application, so let's get the application helper.
jimport('joomla.application.helper');
$client = new stdClass;
$client->name = 'mywebapp';
$client->path = JPATH_MYWEBAPP;
JApplicationHelper::addClientInfo($client);
// Instantiate the application.
// We're setting session to false because we aren't using a database
// so there is no where to store it.
$config = Array ('session'=>false);
$app = JFactory::getApplication('mywebapp', $config);
// Render the application. This is just the name of a method you
// create in your application.php
$app->render();
?>

Listing 3 :index.php

Le code de l'application se trouve dans le listing 4.
<?php
// no direct access
defined('JPATH_PLATFORM') or die;
final class JMyWebApp extends JApplication
{
/**
* Display the application.
*/
public function render()
{
echo '<h1>My Web Application</h1>';
echo 'The current URL is '.JUri::current().'
';
echo 'The date is '. JFactory::getDate('now');
}
}
?>

Listing 4: /includes/application.php

Si vous avez l'habitude du CMS Joomla! Vous pouvez utiliser les morceaux de code que vous connaissez pour créer votre propre application.

J'ai pris les 3 exemples dans la page de documentation de Joomla! (http://docs.joomla.org/How_to_create_a_stand-alone_application_using_the_Joomla!_Platform) et à la fin j'ai été impressionné par les possibilités pour construire de nouvelles applications simplement à partir du code de Joomla!.

Applications Web multiples

Dans notre premier exemple nous avons installé exactement une application web sur une Joomla! Platform. Si c'est ce que vous souhaitiez, c'est parfait. Mais imaginez que vous ayez plusieurs applications à lancer sur une même installation de Joomla! Platform. Dans ce cas vous avez besoin d'un fichier supplémentaire bootstrap.php (listing 5) et de la structure de répertoires suivante:

- build
 - docs
 - libraries
 - media
 - tests
 - cli <- only if you have cli apps - web <- the folder for the web apps
-- myapp <- the folder of one app
--- includes
---- application.php
--- index.php
-- anotherapp <- the folder of another app
--- includes
---- application.php
--- index.php
 - bootstrap.php

Le fichier bootstrap.php contient une seule ligne de code indiquant à votre application le chemin vers le répertoire libraries/ de Joomla!

<?php
require dirname(dirname(__FILE__)).'/jplatform/libraries/import.php';

Listing 5: bootstrap.php

Plus de ressources

Il y a un endroit sur GitHub où tous les exemples sont rassemblés (https://github.com/joomla/joomla-platform-examples). .

Ils sont organisés de la même manière que celle présentée au dessus pour les applications multiples.

Vous pouvez télécharger, extraire, et exécuter ces exemples dans le répertoire de votre Joomla! Platform.

Traduction libre de l'article de Hagen Graf sur le Joomla!® Community Magazine du mois de décembre 2011 : Write your own App using Joomla! Platform