bonjour,
Afin d'apprendre à écrire un composant, j'ai décidé d'en faire un tutorial. Je vous le livre donc dans sa première version, élaborée à partir du helloWorld officiel, entièrement commenté, adapté et traduit dans la langue de molière!
Ses fonctionnalités sont pour l'instant rudimentaires(back-end uniquement!), mais l'exemple se veut avant tout formateur.
en voici la structure:
administrator
| |--
components
| | |--
com_moncomposant
| | | |--
admin.moncomposant.php
| | | | |--
admin.moncomposant.html.php
| | | | | |--
tmpl/
| | | | | | |--
bienvenue.html
| | | | | | |--
bienvenue2.html
| | | |--
toolbar.moncomposant.php
| | | | |--
toolbar.moncomposant.html.php
| | | | | |--
help/
| | | | | | |--
moncomposant.html
avec:
admin.moncomposant.php
Code PHP:
<?php
/**
* @version 1.0.x
* @package MonComposant
* @copyright (C) 2006 to
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
*/
/** interdiction d'accéder à ce script sans qu'il soit inclus par un script parent **/
defined( '_VALID_MOS' ) or
die( 'Direct Access to this location is not allowed.' );
// on inclut le fichier 'admin.hello.html.php':
require_once( $mainframe->getPath( 'admin_html' ) ); //par convention, il est représenté par 'admin_html'
// récupération de la tâche à effectuer:
$task = mosGetParam( $_REQUEST, 'task', '' );
//on switch sur la tâche:
switch ($task) {
default:
MonComposant::Bienvenue();
break;
case 'bienvenue2':
global $my;
MonComposant::Bienvenue2( $my->username );
break;
}
?>
admin.moncomposant.html.php
Code PHP:
<?php
/**
* @version 1.0.x
* @package MonComposant
* @copyright (C) 2006 to
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
*/
/** interdiction d'accéder à ce script sans qu'il soit inclus par un script parent **/
defined( '_VALID_MOS' ) or
die( 'Direct Access to this location is not allowed.' );
/**
* @package MonComposant
*/
class MonComposant {
/**
* Méthode statique définissant un objet template
* @return patTemplate
*/
function &createTemplate() {
global $option, $mosConfig_absolute_path;
// on inclut la librairie pour les templates:
require_once( $mosConfig_absolute_path . '/includes/patTemplate/patTemplate.php' );
$tmpl =& patFactory::createTemplate( $option, true, false );
$tmpl->setRoot( dirname( __FILE__ ) . '/tmpl' );
return $tmpl;
}
/**
* Message de bienvenue simple
*/
function Bienvenue() {
//création de l'objet template:
$tmpl =& MonComposant::createTemplate();
// Remplit le corps(<body>)de la page avec le fichier source 'tmpl/bienvenue.html':
$tmpl->setAttribute( 'body', 'src', 'bienvenue.html' );
// Affiche:
$tmpl->displayParsedTemplate( 'form' );
}
/**
* Message de bienvenue sophistiqué
* @param string L'identifiant de la personne
*/
function Bienvenue2( $name ) {
//création de l'objet template:
$tmpl =& MonComposant::createTemplate();
// Remplit le corps(<body>)de la page avec le fichier source 'tmpl/bienvenue2.html':
$tmpl->setAttribute( 'body', 'src', 'bienvenue2.html' );
// Assigne la balise {NAME} du template(cf. 'tmpl/bienvenue2.html') à la valeur $name, transmise en paramètre
$tmpl->addVar( 'body', 'name', $name );
// Affiche:
$tmpl->displayParsedTemplate( 'form' );
}
}
?>
tmpl/bienvenue.html
Code HTML:
<mos:comment>
@version 1.0.x
@package MonComposant
@copyright Copyright (C) 2006 to
@license http://www.gnu.org/copyleft/gpl.html GNU/GPL
</mos:comment>
<h1>Bienvenue sur MonComposant!</h1>
<input type="hidden" name="option" value="{OPTION}" />
<input type="hidden" name="task" value="" />
tmpl/bienvenue2.html
Code HTML:
<mos:comment>
@version 1.0.x
@package MonComposant
@copyright (C) 2006 to
@license http://www.gnu.org/copyleft/gpl.html GNU/GPL
</mos:comment>
<h1>Bienvenue2 sur MonComposant!</h1>
Bienvenue, <strong>{NAME}</strong>, sur MonComposant!
<input type="hidden" name="option" value="{OPTION}" />
<input type="hidden" name="task" value="" />
toolbar.moncomposant.php
Code PHP:
<?php
/**
* @version $Id: toolbar.languages.php,v 1.4 2005/01/06 01:13:18 eddieajau Exp $
* @package MonComposant
* @subpackage Languages
* @copyright Copyright (C) 2006 to
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
*/
/** interdiction d'accéder à ce script sans qu'il soit inclus par un script parent **/
defined( '_VALID_MOS' ) or
die( 'Direct Access to this location is not allowed.' );
// on inclut le fichier 'toolbar.moncomposant.html.php':
require_once( $mainframe->getPath( 'toolbar_html' ) ); //par convention, il est représenté par 'toolbar_html'
// récupération de la tâche à effectuer:
$task = mosGetParam( $_REQUEST, 'task', '' );
switch ($task) {
default:
MonComposantToolbar::BarreDeMenu();
break;
}
?>
toolbar.moncomposant.html.php
Code PHP:
<?php
/**
* @version 1.0.x
* @package MonComposant
* @copyright Copyright (C) 2006 to
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
*/
/** interdiction d'accéder à ce script sans qu'il soit inclus par un script parent **/
defined( '_VALID_MOS' ) or
die( 'Direct Access to this location is not allowed.' );
/**
* @package MonComposant
*/
class MonComposantToolbar {
/**
* Affiche la barre de menu
*/
function BarreDeMenu(){
mosMenuBar::startTable();
// bouton de la page d'accueil de MonComposant
mosMenuBar::apply( '', 'Accueil' );
mosMenuBar::spacer();
//bouton de bienvenue2
mosMenuBar::apply( 'bienvenue2', 'bienvenue2!' );
mosMenuBar::spacer();
//bouton d'aide de MonComposant
mosMenuBar::help( 'moncomposant.html', true );
mosMenuBar::endTable();
}
}
?>
help/moncomposant.html
Code HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr_FR" xml:lang="fr_FR">
<head>
<Title>Aide de MonComposant</title>
<link href="../../../../help/css/help.css" rel="stylesheet" type="text/css" />
<meta name="copyright" content="(C) 2006 to" />
<meta name="license" content="http://www.gnu.org/copyleft/gpl.html GNU/GPL" />
</head>
<body>
<h1>Bienvenue sur l'aide de MonComposant!</h1>
Voici l'aide de MonComposant!
</body>
</html>
et le petit script moncomposant.xml qui va avec
Code HTML:
<mosinstall type="component">
<name>MonComposant</name>
<creationDate>$Id: moncomposant.xml 15 2006-05-60 18:03:00Z $</creationDate>
<author>to</author>
<copyright>(C) 20006 to</copyright>
<authorEmail>antoine.bernier@gmail.com</authorEmail>
<authorUrl>http://forum.joomla.fr/member.php?u=2579</authorUrl>
<version>1.0.x</version>
<description>Ceci est un tutoriel minimal pour la création d'un composant</description>
<files>
</files>
<images>
</images>
<install>
</install>
<administration>
<menu act="">MonComposant</menu>
<files>
<filename>admin.moncomposant.php</filename>
<filename>admin.moncomposant.html.php</filename>
<filename>tmpl/bienvenue.html</filename>
<filename>tmpl/bienvenue2.html</filename>
<filename>toolbar.moncomposant.php</filename>
<filename>toolbar.moncomposant.html.php</filename>
<filename>help/moncomposant.html</filename>
</files>
<images>
</images>
</administration>
</mosinstall>