Ralentissement internet sur MAC OS X 10.6.8

6

Bonsoir à tous,

je vais tout simplement partager la solution que j’ai trouvée sur le net pour mes problèmes de ralentissement de navigation.

Rappel des fait : 

Après la mise à jour de mon Macbook Air vers la dernière version de l’OS 10.6.8 je me suis retrouver avec une sorte de « brique » quand je naviguais. Que ce soit avec Safari, Firefox ou encore Chrome, il me fallait des dizaines de seconde pour afficher n’importe quelle page web. Après quelques recherches, une solution simple a été trouvée mais en anglais. Je vous la livre ce soir en Français.

Solution au problème :

Il s’agit d’un soucis dans la résolution des DNS. Il faut donc indiquer dans les préférences du MAC d’utiliser un autre serveur DNS.

Le cheminement est le suivant « Menu Pomme > Préférences Système > Réseau > Sélection de votre réseau > Avancé »

Dans les options avancées, choisir l’onglet DNS. Et entre un nouveau DNS en cliquant sur le bouton « + ». J’ai utiliser le serveur DNS 8.8.8.8 qui à priori correspond à un serveur Google qui fait très bien le boulot.

 

Et voila, une connexion navigateur qui retrouve son souffle d’origine !

Joe le taxi, c’est ma vie …

0

Oui, cela fait longtemps que je n’ai pas mis à jour ce truc qui me sert de blog, non, je ne vais pas poster le prochain article sur le développement de composant Joomla 1.5 en MVC (enfin pas tout de suite).

En effet, l’heure est grave, très grave. Samedi dernier, équipé de ma plus belle valise empreintée je prenait l’avion pour une destination asiatique : la Chine. Passons les détails du voyage, tous le monde à déjà connu un retard d’avion, rater la correspondance … A noter toutefois, pour le ratage de corrrespondance c’est un exploit que je n’ai pas encore connu avec la SNCF mais ca arrivera suffisament tôt. Revenons donc à notre premier sujet donc, la Chine et SES TAXIS.

Parce que une fois arrivé à destination, il vous faut prendre un moyen de locomotion (c’est pas une chanson ça déjà) pour vous rendre à votre hotel pour enfin vous écrouler sur le lit et dormir comme une grosse marmotte.

Et bien pour le coup, je n’ai pas été déçu, remettons nous en situation :

Dimanche matin, les portes vitrées de l’aérogare ont à peine le temps de se fermer qu’un rabatteur à taxi (je ne connais pas le terme technique) m’embrigade en me demandant si je cherche un taxi mais sans attendre la réponse. Et oui, je n’ai pas répondu parce qu’il se barrait déjà avec ma valoche le bougre. Enfin, on continue, je lui donne l’adresse où je doit me rendre et c’est le drame, un haussement d’épaule, une mine déconfite mais surtout des vociférations vers les collègues qui ne savent pas où c’est. Mais comme le chinois n’est pas un froussard, ni une, ni deux, il colle ma valise dans une bagnole, donne l’adresse au taxi et me voila parti pour une destination incertaine tout en sachant déjà le tarif de la course.

Le taxi, de couleur rouge, de marque volkswagen mais de modèle playmobil entame sa folle course poursuite et commence le roadtrip. Première, deuxième, troisième, quatrième, la vitesse est halucinante et dépasse les 45 km/h. Par contre ça circule beaucoup à l’aéroport, il y a des bagnoles de partout et il en sort de nouvelles dans tous les sens. C’est à ce moment que j’ai compris toute l’importance de notre code de la route Européen. Quand tu ne le suis pas, tes passagers ont peur, ils tremblent et on des sueurs froides. En effet, plutôt que de rouler tranquillement, la coutume locale est d econduire au bruit, un coup de klaxon par çi, deux coup par là et le miracle opère. Depuis 3 jours, je n’ai pas encore eu d’accident et je prie pour que cela continue ainsi. Mais il faut bien avouer que souvent, ca passe au millimètre près au milieu des obstacles.

Les obstacles, encore une particularité bien Chinoise. Il existe d’après ce que j’ai compris une certaine hiérarchie à respecter. On pourrait la résumé ainsi : Camion, Bus, 4×4, voiture, moto / deux roues , vélo, piétons. La liste est donnée par ordre d’importance de priorité. On laise donc passer les camions et bus mais quand on arrive aux vélos et piétons, c’est à eux de ce pousser. Il arrive donc régulièrement qu’une mamie sur le bord de la route ce fasse tailler un short alors qu’elle ne demande pas grand chose à part, un jour, traverser la deux fois 5 voies.

Et cet après midi, en sortant du boulot, j’ai eu le champion toutes catégories. On commence la route, un peu aventureusement (ça devient traditionnel) mais il décide d’improviser. Et là j’ai le droit de voir le mec se faufiler entre les bagnoles tout en ce servant du thé sorti du thermos de fortune. Loin d’en avoir fini il entame après ça une grande conversation au talkie walkie avec ces potes au beau milieu d’un espèce de rond-point. Quand je suis parti, je me suis dis que je verrai du pays et que ça allait être l’aventure. Et bien pour le coup je suis servi.

Par contre il y a un gros avantage avec les taxis chinois. Celui-ci ne vous embète pas à vous raconter des histoires qui ne font rire que lui et on est pas obligé d’écouter le dernier CD de Céline Dion.

Toujours est-il pour résumer que ce périple motorisé mais non controlé est l’expérience qui m’a fait le plus peur à ce jour !

Bon, vous avez eu le courage d elire l’article jusqu’au bout, vous avez donc gagné le droit de vous moquer de moi dans les commentaires.

Un peu de détente avec Joomla!

0

Après tout ce temps passé sans vacances à travailler comme un fou et surtout dans tous les sens je vais enfin avoir un peu de repos.

Depuis hier soir je suis officiellement en vacances et je peux donc me reposer ou mieux encore : « Faire rien ! ». Donc, pour commencer en beauté, ce soir je vais être rejoins par quelques camarades de la communauté Joomla! Et nous allons en profiter pour échanger sur nos projets mais surtout sur nos bières préférées, le tout en refaisant le monde.

Note personnelle : j’espère bien qu’ils me feront un gros topo rien que pour moi car je n’ai pas pu assister au joomladay cette année.

Développer un composant MVC pour Joomla – Partie 4 – Créer une interface administrateur

4

Introduction

Les trois premiers articles traitaient du MVC qui récupère les informations dans la base de données. Actuellement il n’y a pas de solution pour ajouter des infos dans la base à part de le faire manuellement. Dans la suite du tutoriel nous allons développer une section administrateur pour notre composant qui rendra possible la gestion des entrées dans la base de données.

Cet article n’utilisera pas de nouvelles sources de code pour notre composant Hello mais va décrire les bases en profondeur pour expliquer le schéma MVC. Ce chapitre intermédiaire n’est pas nécessaire pour finaliser le modèle Hello donc si vous pensez que vous possédez suffisament les bases vous pouvez continuer avec le prochain article.

Dans la solution « frontend » (parties 1, 2 et 3) nous avons développé la première partie de notre composant. La solution frontend est basée  sur les Contrôleur, vue et template par défaut et vous avez été tenu par la main pour la partie code. Cela va changer pour le « backend » et l’administration de notre nomposant Hello (parties 5 et 6). Nous allons devoir développer tout le code qui gère le flux de l’application.

Site / Administration

Joomla! est un gestionnaire de contenu. Le frontend est utilisé pour présenter aux utilisateurs l’information et permettre à certain utilisateur connectés de manipuler le contenu. Le Backend est responsable de l’administration du framework du site (structuration, gestion, contrôle, maintien). Cette séparation entre le frontend et le backend est un aspect fondamental de l’architecture de Joomla!.

Points d’entrée

Dans le fichier XML de notre exemple frontend il était déjà évident qu’il y aurai une partie administration :

<?xml version="1.0" encoding="utf-8"?>
  ...
  <administration>
  <!--  Administration Menu Section -->
  <menu>Hello World!</menu>
  <!--  Administration Main File Copy Section -->
  <files folder="admin">
  <filename>hello.php</filename>
  <filename>index.html</filename>
  <filename>install.sql</filename>
  <filename>uninstall.sql</filename>
  </files>
  </administration>
  ...

Seuls les fichiers .sql ont été utilisés pour l’installation de notre vue frontend. Les autres fichiers n’ont pas de contenu et génèrent des pages blanches. Accédez à vos fichiers system de votre hébergement (sur votre serveur) et naviguez dans les répertoires après l’installation de com_hello. Vous remarquerez que notre composant Hello est présent à deux endroits :

<root>/components/com_hello
<root>/administrator/components/com_hello

Ces deux sous répertoires sont respectivement la partie frontend et la partie backend du composant. Les intéractions d’administration vont directement dans le sous-répertoire « administrator » et les visiteurs et utilisateurs enregistrés dans la partie défaut du root :

<root>/index.php

Les utilisateurs « admin » devront se connecter et après la connexion ils entreront sur le site via :

<root>/administrator/index.php

Avec les points d’accès différents il est facile de saisir que la convention de nommage n’est pas dépendante à la section frontend. Tandis que le schéma MVC est aussi applicable à la partie administration ceci implique que des noms de controle, de vue et de model peuvent être utilisés dans la section frontend.

Intéraction du schéma MVC

Dans la partie 1 nous nous sommes focalisé sur les trois premières parties de ce tutoriel. Nous allons maintenant expliquer comment les décisions sont prises et qu’est ce qui sera affiché et comment manipuler cela.

Exemple roll-out

Pour les besoin de l’explication un exemple simple a comprendre sera utilisé. Une librairie a la fonction principale de prêter des livres aux utilisateurs enregitrés. Il existe trois tables :

  • users
  • books
  • relation

Les utilisateurs sont adressés par ID et par Nom. Les livres sont identifiés par Id et Titre et la relation contient les Ids et les dates de prêts.

Cet exemple a été choisi avec attention et aidera a comprendre l’architecture de Joomla en détails. La partie administration de notre composant Hello n’est pas trop compliquée avec seulement une table a gérer. Après les explications de cette partie il sera simple de suivre le tutoriel.

Mapper un composant MVC Joomla! à partir de cet exemple

Dans cet exemple nous considérons que les tâches d’administration (Ajout, Edition, Suppression) sont des tâches qui doivent être réalisées par l’administrateur. Pour le visiteur seule la vue de la table de relation est intéressante (« Quand est ce que je dois ramener le livre ? »). Cet exemple montre la liste entière et ignore pour confidentialité qui peut être prise en compte en ne laissant les utilisateurs enregistrer voir que leurs livres. (Voir JUser object pour faire la différenciation d’utilisateur dans le template)

Comme pour notre composant Hello seule la vue default est utilisée pour le Frontend. Elle liste la table de relation, effectue une jointure avec les deux autres tables pour obtenir une liste lisible par un être humain des livres avec leur date de retour demandée.

Alice | One flew over ... | 12-aug-2009
Alice | Celeb talk        | 12-aug-2009
Mark  | Joomla!           | 15-aug-2009

Pour le respect de la partie administration il est important de comprendre que nous avons une vue par défaut et trois vues dédiées qui contrôlent chacune une tâche :

  • <Vue par défault du composant>
  • Administration des utilisateurs
    • Ajouter
    • Modifier
    • Supprimer
  • Administration des livres
    • Ajouter
    • Modifier
    • Supprimer
  • Administration des relations
    • Ajouter
    • Modifier
    • Supprimer

Controleurs

Le contrôleur principal de la section admin doit faire la différence entre les actions Ajouter, Modifier, Supprimer. Ceci est réalisé en créant des sous-controleurs pour chaque vue pour gérer leurs tâches spécifiques.

<root>/administrator/controller.php
<root>/administrator/controllers/users.php
<root>/administrator/controllers/books.php
<root>/administrator/controllers/relation.php

Le contrôleur est une partie importante du schéma MVC. Il ne s’occupe pas uniquement des requêtes de tâches mais il permet aussi d’instancier le modèle avec le même nom et il est responsable de préparer les vues et la forme désirée pour cette vue. Le contrôleur justifie vraiment son nom.

Dans le contrôleur il est bon de faire la différence entre activer les tâches (par exemple l’édition à partir d’un menu) et la tâche résultante (par exemple le résultat de l’édition sont les données envoyées).

Les fonctions typiques du contrôleur ressemble à :

function <activating task>()  // <-- edit, add, delete
{
    JRequest::setVar( 'view', '[<componentname> | users | books | relation ]' );
    JRequest::setVar( 'layout', 'default'  );     // <-- The default form is named here, but in
                                                  // some complex views, multiple layouts might
                                                  // be needed.
    parent::display();
}

function <resulting task>()  // <-- save, remove
{
        $model = $this->getModel('[<componentname> | users | books | relation ]');
        if(!$model->action() ) {    // <-- action could be delete() or store()
                $msg = JText::_( 'Error: Could not perform action' );
        } else {
                $msg = JText::_( 'Action executed' );
        }

        $this->setRedirect( 'index.php?option=<componentname>', $msg );
}

Un contrôleur s’occupe de toutes les tâches dédiées à ce contrôleur. Après avoir terminé cette tâche le module retourne vers le point d’entrée principal du composant, le contrôleur principal avec la vue par défaut. Activer une tâche force une nouvelle vue avec un formulaire à afficher après avoir défini celle-ci.

La définition explicite du formulaire dans une vue risque de provoquer des yeux ronds chez certains mais nos exemples sont trop simples. Dans des vues complexes de multiples formulaires peuvent être utilisés dans la même vue.

Modèles

Les contrôleurs intéragissent avec les modèles qui portent le même nom. Dans la vue Frontend le Model était seulement utilisé pour récupérer les données. Le Backend a plus de contrôleurs et donc plus de modèles. Les fichiers modèles du Backend doivent délivrer les données à la vue mais aussi s’occuper des tâches initiées par le contrôleur. Un bon modèle contient toutes les actions requises à la gestion une table unique dans la base de données.

<root>/administrator/models/<componentname>.php
<root>/administrator/models/users.php
<root>/administrator/models/books.php
<root>/administrator/models/relation.php

Vues

Des vues séparées sont bien entendu requises. Pour les vues et les formulaires il n’y a pas de convention de nommage requise (la relation de la vue est prise en charge par le contrôleur). Dans le listing suivant les tâches administratives sont identifiées comme des sous catégories pour les différentes vues. Ce choix est totalement aléatoire et peut-être même illogique mais ne nécessite pas d’explications. Pour les besoins de l’exemple, une vue différente a aussi été ajoutée, une vue « suppression », qui peut être utilisée pour toutes les tâches de suppression demandant d’afficher « Etes vous sure ? »

<root>/administrator/views/<componentname>/view.html.php    + .../tmpl/default.php
<root>/administrator/views/users/view.html.php    + .../tmpl/default.php
<root>/administrator/views/books/view.html.php    + .../tmpl/default.php
<root>/administrator/views/relation/view.html.php    + .../tmpl/default.php

<root>/administrator/views/delete/view.html.php    + .../tmpl/default.php

Note : En général il est bon de maintenir un formulaire par vue parce que view.html.php doit encore fournir le contenu. Avec une logique de base, vous pouvez permettre afficher ou non certains contenus mais si cette logique commence a être complexe commencez à réfléchir au découpage de la vue.

Paramètres essentiels d’intéraction

Tout est en place :

  • Controleurs principal et dédié
  • Models principal et dédié
  • Vues différentes et leurs formulaires

Juste une grande question : Comment les utiliser ?

Trois paramètres sont prévus pour laisser Joomla! faire son travail :

  • option
  • controller
  • task

Ces trois paramètres sont assez explicites. Le paramètre « option » doit avoir comme valeur le nom du composant. Pour le dévelopement de composant il faut considérer ce paramètre comme une constante. Bien entendu, Joomla! a d’autres options que les composants.

Les paramètres controller et task peuvent être manipulés dans votre composant de la façon que vous souhaitez.

Comment tout cela fonctionne ensemble

En regardant l’image simplifiée du MVC de Joomla! le flux logique des intéractions suit les étapes suivantes :

  1. Quel est mon point d’entrée ?
    • Le moteur de Joomla! découvre un administrateur loggé et crée le point d’entrée à <root>/administrator/index.php Sinon il ira à <root>/index.php
  2. Quel option est requise ?
    • Le moteur Joomla! lis la variable option et découvre que le composant nommé <componentname> est requis. Le point d’entrée devient : <root>/administrator/components/com_<componentname>/<componentname>.php
  3. Y a t il besoin d’accéder à un controleur particulier ?
    • Le moteur de Joomla! lit la variable contrôleur et découvre qu’un contrôleur dédié est requis : <root>/administrator/components/com_<componentname>/controllers/<dedicatedcontroller>.php
  4. Y a t il besoin d’une tâche spécifique a réaliser ?
    • Le contrôleur identifié gère la valeur de la tâche comme paramètre.
  5. Le modèle est dérivé du contrôleur et instancié.
  6. La vue et le formulaire sont assignés dans le contrôleur et initiés pour être actifs.

Comment ajouter de l’intéraction ?

Avec le HTML il y a deux façon d’intéragir avec Joomla! :

  1. En référence à un lien
  2. Soumission d’un formulaire POST/GET

Référence de lien pour le moteur de Joomla!

Vous rappellez vous de l’activation de tâche et des tâches résultantes mentionnées plus tôt ? La plupart des tâches d’activation sont initiées par un lien. Dans le cas de la librairie exemple, la vue générale de la section du site peut être copiée dans la section administration. Cette vue par défault pourra maintenant être étendue et chaque cellule deviendra un lien pour l’édition de l’élément spécifique de la base de données.

En utilisant l’exemple de la librairie, le template PHP sans boucle de contrôle contiendra le code suivant :

$link = JRoute::_( 'index.php?option=com_library&controller=users&task=edit&cid='. $row->idu );
echo "<td><a href=\"".$link."\">$row->name</a></td>";
$link = JRoute::_( 'index.php?option=com_library&controller=books&task=edit&cid='. $row->idb );
echo "<td><a href=\"".$link."\">$row->title</a></td>";
$link = JRoute::_( 'index.php?option=com_library&controller=relation&task=edit&cid='. $row->idr );
echo "<td><a href=\"".$link."\">$row->date</a></td>";

Pour chaque champ cliquable les trois paramètres mandataires pour manipuler Joomla! peuvent être identifiés. De plus, il y a un paramètre utilisateur pour gérer l’index correctement dans la tâche controleur (cid). Ces paramètres sont séparés par ‘&’. N’utilisés pas d’espaces dans vos variables, cela poserai des problèmes pour gérer les variables dans certains navigateurs. Après avoir bouclé, toutes les entrées texte seront cliquables et suivront le contrôleur correspondant avec l’id de ligen correct dans la table associée.

[Alice} | [One flew over ...] | [12-aug-2009]
[Alice] | [Celeb talk]        | [12-aug-2009]
[Mark]  | [Joomla!]           | [15-aug-2009]

Envoyer des données de formulaire au moteur de Joomla!

Après avoir initié par un lien un formulaire d’envoi sera le résultat. Le bout de code ci-dessous pourrai être le résultat du clic sur la première cellule de la vue par défault du composant qui a été cliqué pour éditer([Alice]:cid=3).

<form action="index.php" method="post">
  <input type="text" name="username" id="username" size="32" maxlength="250" value="<?php echo $this->user->name;?>" />

  <input type="submit" name="SubmitButton" value="Save" />

  <input type="hidden" name="option" value="com_library" />                  // <-- mandatory
  <input type="hidden" name="controller" value="hello" />                    // <-- mandatory
  <input type="hidden" name="task" value="save" />                           // <-- mandatory
  <input type="hidden" name="id" value="<?php echo $this->user->id; ?>" />   // <-- user parameter, index in database for [Alice]
</form>

Les trois paramètres mandataires de Joomla! sont placés comme cachés dans le formulaire. Les paramètres cachés ne sont pas visibles mais peuvent être ajoutés aux données envoyées.

Tip : Lorsqu’on débugue ce formulaire, remplacer le tag method="post" du formulaire temporairment par method="get". Tous les paramètres envoyés seront affichés dans l’URL de votre navigateur. Si le module fonctionne, alors revenir à la méthode POST. En utilisant la méthode POST, vous rendez votre affichage plus propre et évitez de motiver les gens à manipuler les URL dans leur navigateur. Bien entendu, ils pourront toujours regarder dans le code mais utiliser POST au lieu de GET élimine 90% de la population. L’autre raison est plus technique et l’explication simple est que la méthode POST peut contenir plus de données (complexes).

Remarque : Dans certain modules vous remarquerez que les développeurs ont aussi ajouté un paramètre view. C’est une mauvaise façon de programmer étant donné que le contrôleur devrai prendre en charge la vue et le formulaire.

Conclusion

L’utilisation des trois paramètres mandataires et les différents points d’accès est clarifiée. Le prochain article permettra d’aller plus loin avec ces nouvelles notions.

Développer un composant MVC pour Joomla – Partie 3 – Utiliser la base de données

11

Introduction

Au cours des deux premiers tutoriaux nous avons étudié et montré comment construire un composant simple utilisant le schéma Modèle – Vue – Contrôleur (MVC). Nous avions une vue qui récupérait les données à partir du modèle (qui a été créé dans le deuxième tutoriel). Dans cet article nous allons travailler avec le modèle. Au lieu de coder les données en dur le modèle va utiliser les données stockées dans la base de données MYSQL.

Ce tutoriel a pour objectif de montrer comment on utilise la base de données avec la classe JDatabase pour récupérer les informations de la base.

Récupérer les informations

Notre modèle utilise actuellement la méthode getGreeting(). Cette méthode est très simple, tout ce qu’elle fait est juste de retourner le message de bienvenue codé en dur.

Pour rendre les choses intéressantes nous allons charger le message de bienvenue à partir de la base de données. Nous vous montrerons plus tard commet créer une requête SQL et ajouter le code nécessaire au fichier manifest XML pour que la table et des données exemples soient créées à l’installation du composant. Pour le moment nous remplaçons simplement notre déclaration de retour par un code qui recherche le message de bienvenue dans la base de données et le retourne.

La première étape est de faire référence à un objet base de données. Etant donné que Joomla! utilise la base pour ses opération courantes une connection existe déjà, ainsi il n’est pas nécessaire de créer notre propre connection. La référence à la base de données courante est obtenue en utilisant le code :

$db =& JFactory::getDBO();

JFactory est une classe statique qui est utilisée pour faire référence à plusieurs objets system. Plus d’information à propos de cette classe peut être trouvé dans la documentation de l’API JFactoryAPI.

La nom de la méthode (getDBO) est utilisé pour obtenir l’objet ‘Base de données’. Il est simple et important à mémoriser.

Maintenant que nous avons une référence à l’objet ‘base de données’ nous pouvons récupérer les informations dans cette dernière en deux étapes :

  • Stocker notre requête dans l’objet ‘base de données’
  • Charger le résultat

Notre nouvelle méthode getGreeting() ressemble donc maintenant à cela :

function getGreeting()
{
   $db =& JFactory::getDBO();

   $query = 'SELECT greeting FROM #__hello';
   $db->setQuery( $query );
   $greeting = $db->loadResult();

   return $greeting;
}

hello est le nom de la table que nous allons créer par la suite et greeting est le nom du champ dans lequel nous stockons le résultat. Si vous n’êtes pas à l’aise avec SQL il sera utile que vous suiviez un tutoriel à propos de celui-ci pour pouvoir avancer plus vite. De tels tutoriels peuvent être trouvés à l’adresse w3schools.

La méthode $db->loadResult() exécute la requête stockée et retourne le premier champ de la première ligne du résultat. Voir JDatabase API reference à propos des autres méthodes pour charger la classe JDatabase.

Création du fichier SQL d’installation

L’installer Joomla! permet d’exécuter des requêtes durant l’installation du composant. Ces requêtes sont stockées dans un fichier texte standard.

Nous aurons trois requêtes au total dans notre fichier d’installation : La première supprime la table si elle existe déjà, la seconde crée la table avec les champs nécessaires et la troisème insère les données dans la table.

Ainsi nous avons les requètes :

DROP TABLE IF EXISTS `#__hello`;

CREATE TABLE `#__hello` (
  `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `greeting` VARCHAR(25) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

INSERT INTO `#__hello` (`greeting`) VALUES ('Hello, World!'), ('Bonjour, Monde!'), ('Ciao, Mondo!');

Vous devez trouver les préfixes de tables plutôt étranges. Joomla! remplacera les préfixes par ceux utilisés par votre installation de Joomla!. Dans la plupart des cas la table sera ‘jos_hello’ vu que le préfixe par défaut de Joomla! pour les tables est ‘jos_’ . Ceci permet d’avoir plusieurs installations de Joomla! utilisant la même base de données (mais des tables différentes) et d’éviter les collisions entre les différentes applications utilisant les mêmes noms de tables (deux applications peuvent utilisées la même base de données mais avec des tables ‘utilisateur’ différentes. Cette convention permet d’éviter les problèmes).

Nous avons spécifié deux champs dans la base de données. Le premier champ est ‘id’ et est appelé la ‘clé primaire’. La clé primaire de la base de données est un champ pour identifier les enregistrements de façon unique dans la base. L’autre champs est ‘greeting’. Ce champ stocke le message de bienvenue qui est retourné par la requête que nous avons utilisée précédemment.

Nous stockons nos requêtes d’installation dans un fichier appelé admin/install.sql.

Créer le fichier SQL de désinstallation

Quoique nous espérons que les utilisateurs ne désinstllerons pas notre composant il est important qu’ils puissent le faire et que tout soit supprimé après avoir supprimé le composant. Joomla! recherchera les fichiers et répertoires qui ont été créés pendant l’installation mais nous devons inclure manuelle les requêtes qui suppriment les tables de la base de données qui ont été ajoutés lors de l’installation. Etant donné que nous avons une seule table nous avons uniquement une seule requête :

DROP TABLE IF EXISTS `#__hello`;

Nous sauvons la requête de désintallation dans un fichier appelé admin/uninstall.sql.

Mise à jour du fichier XML

Nous devons changer quelques informations du fichier XML. Tout d’abord nous ajoutons nos deux fichiers SQL dans la liste des fichiers à installer. Ensuite, les fichiers d’installation SQL doivent être placés dans le répertoire administrateur. Enfin, on doit spécifier à l’installeur d’éxécuter les requêtes d’installation et de désinstallation.

Notre fichier modifié doit être similaire à cela :

<?xml version="1.0" encoding="utf-8"?>
<install type="component" version="1.5.0">
 <name>Hello</name>
 <!-- The following elements are optional and free of formatting constraints -->
 <creationDate>2007-02-22</creationDate>
 <author>John Doe</author>
 <authorEmail>john.doe@example.org</authorEmail>
 <authorUrl>http://www.example.org</authorUrl>
 <copyright>Copyright Info</copyright>
 <license>License Info</license>
 <!--  The version string is recorded in the components table -->
 <version>3.01</version>
 <!-- The description is optional and defaults to the name -->
 <description>Description of the component ...</description>

 <!-- Site Main File Copy Section -->
 <!-- Note the folder attribute: This attribute describes the folder
      to copy FROM in the package to install therefore files copied
      in this section are copied from /site/ in the package -->
 <files folder="site">
  <filename>controller.php</filename>
  <filename>hello.php</filename>
  <filename>index.html</filename>
  <filename>models/hello.php</filename>
  <filename>models/index.html</filename>
  <filename>views/index.html</filename>
  <filename>views/hello/index.html</filename>
  <filename>views/hello/view.html.php</filename>
  <filename>views/hello/tmpl/default.php</filename>
  <filename>views/hello/tmpl/index.html</filename>
 </files>

 <install>
  <sql>
    <file charset="utf8" driver="mysql">install.sql</file>
  </sql>
 </install>
 <uninstall>
  <sql>
    <file charset="utf8" driver="mysql">uninstall.sql</file>
  </sql>
 </uninstall>

 <administration>
  <!-- Administration Menu Section -->
  <menu>Hello World!</menu>

  <!-- Administration Main File Copy Section -->
  <files folder="admin">
   <filename>hello.php</filename>
   <filename>index.html</filename>
   <filename>install.sql</filename>
   <filename>uninstall.sql</filename>
  </files>  

 </administration>
</install>

Vous noterez les deux attributs de la balise <file> dans les sections <install> et <uninstall> : ‘charset’ et ‘driver’. Le charset est le type de charset utilisé. Le seul validé est ‘utf8′. Si vous souhaitez installer un fichier non-utf8 (pour les anciennes version de MYSQL) vous devrez de pas renseigner cet attribut.

L’attribut driver spécifie comment sont écrites les requètes à la base de données. Actuellement, MYSQL est le seul utilisé. Dans les prochaines versions de Joomla! d’autres types devraient être disponibles.

Conclusion

Nous avons maintenant un composant qui profite des avantages du framework MVC de Joomla! et de la classe JDatabase. Vous êtes maintenant capable d’écrire un composant MVC qui intéragit avec la base de données et qui installe et peuple la table de données pendant l’installation du composant.

Développer un composant MVC pour Joomla – Partie 2 – Ajouter un modèle

1

Introduction

Dans le premier tutoriel de cette série nous avons fait la démonstration de la simplicité de créer un composant pour Joomla! 1.5 avec vue et contrôleur. Le message de bienvenue était codé en dur dans la vue. Cela ne suis pas le schéma MVC exactement parce que la vue doit afficher les données et non pas les contenir.
Dans ce second tutoriel nous ferons la démonstration de comment déplacer cela de la vue dans un modèle. Dans les tutoriels futurs nous démontrerons la puissance et la fléxibilité du schéma MVC utilisé.

Créer le modèle

Le concept de modèle tient son nom du fait que cette classe est destinée a représenter (ou modéliser) une entité. Dans notre cas notre premier  modèle représentera un ‘hello’ ou un message de bienvenue. Cela correspond a notre schéma car nous avons une vue (‘hello’), qui est la vue de notre message de bienvenue.
La convention de nommage des modèles dans le framework Joomla! est que le nom de la classe commence par le nom du composant (dans notre cas ‘hello’), suivi de ‘model’, suivi du nom du modèle. Ainsi, notre classe de modèle est appellée HelloModelHello.
A ce point nous allons modéliser un comportement de notre ‘hello’ et celui-ci récupère le message de bienvenue. Nous appellerons cette méthode getGreeting() et elle retournera simplement la chaine ‘Hello, World!’.
Le code de ce modèle est le suivant dans le fichier /models/hello.php :

<?php
/**
 * Hello Model for Hello World Component
 *
 * @package    Joomla.Tutorials
 * @subpackage Components
 * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_2
 * @license    GNU/GPL
 */

// No direct access

defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.application.component.model' );

/**
 * Hello Model
 *
 * @package    Joomla.Tutorials
 * @subpackage Components
 */
class HelloModelHello extends JModel
{
    /**
    * Gets the greeting
    * @return string The greeting to be displayed to the user
    */
    function getGreeting()
    {
        return 'Hello, World!';
    }
}

Vous noterez qu’une ligne commence par jimport. La fonction jimport est utilisée pour charger les fichiers du framework Joomla! qui sont requis par notre composant. Cette déclaration particulière va charger le fichier /libraries/joomla/application/component/model.php. les ‘.’ sont utilisés comme séparateur de répertoires et la dernière partie est le nom du fichier à charger. Tous les fichiers sont chargés en utilisant un chemin relatif vers le répertoire de la librairie. Ce fichier contient la classe de définition de la classe JModel qui est nécessaire parce que le modèle étend cette classe.

Maintenant que nous avons notre modèle nous devons modifier notre vue pour qu’elle utilise le modèle pour obtenir le message de bienvenue.

Utiliser le modèle

Le framework Joomla! est installé de façon à ce que le contrôleur charge automatiquement le modèle qui a le même nom que la vue et qu’il envoie les données à la vue. Etant donné que notre vue s’appelle ‘Hello’, notre modèle ‘Hello’ se chargera automatiquement et sera envoyé dans la vue. Pour ce faire, nous pouvons facilement récupérer une référence à notre modèle en utilisant la méthode View::getModel(). (Si le modèle n’utilisait pas la convention de nommage nous aurions pu passer le nom du modèle à JView::getModel()).

Notre code précédant contenait cette ligne :

$greeting = "Hello World!";

Pour profiter des avantage de notre modèle nous modifions cette ligne pour obtenir :

$model = &$this->getModel();
$greeting = $model->getGreeting();

La vue complète ressemblera à ceci maintenant :

<?php
/**
 * @package    Joomla.Tutorials
 * @subpackage Components
 * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_2
 * @license    GNU/GPL
*/

// No direct access

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.application.component.view');

/**
 * HTML View class for the HelloWorld Component
 *
 * @package    HelloWorld
 */

class HelloViewHello extends JView
{
    function display($tpl = null)
    {
        $model = &$this->getModel();
        $greeting = $model->getGreeting();
        $this->assignRef( 'greeting',        $greeting );

        parent::display($tpl);
    }
}

Ajouter le fichier au paquet

Tout ce qui reste à faire est d’ajouter une entrée au fichier XML pour que notre modèle soit copié. Le framework Joomla! cherchera notre modèle dans le répertoire models et l’entrée ressemblera à cela (Cette ligne sera ajoutée dans la section site) :

<filename>models/hello.php</filename>

Notre nouveau fichier hello.xml :

<?xml version="1.0" encoding="utf-8"?>
<install type="component" version="1.5.0">
 <name>Hello</name>
 <!-- The following elements are optional and free of formatting conttraints -->
 <creationDate>2007-02-22</creationDate>
 <author>John Doe</author>
 <authorEmail>john.doe@example.org</authorEmail>
 <authorUrl>http://www.example.org</authorUrl>
 <copyright>Copyright Info</copyright>
 <license>License Info</license>
 <!--  The version string is recorded in the components table -->
 <version>1.01</version>
 <!-- The description is optional and defaults to the name -->
 <description>Description of the component ...</description>

 <!-- Site Main File Copy Section -->
 <!-- Note the folder attribute: This attribute describes the folder
      to copy FROM in the package to install therefore files copied
      in this section are copied from /site/ in the package -->
 <files folder="site">
  <filename>controller.php</filename>
  <filename>hello.php</filename>
  <filename>index.html</filename>
  <filename>models/hello.php</filename>
  <filename>models/index.html</filename>
  <filename>views/index.html</filename>
  <filename>views/hello/index.html</filename>
  <filename>views/hello/view.html.php</filename>
  <filename>views/hello/tmpl/default.php</filename>
  <filename>views/hello/tmpl/index.html</filename>
 </files>

 <administration>
  <!-- Administration Menu Section -->
  <menu>Hello World!</menu>

  <!-- Administration Main File Copy Section -->
  <files folder="admin">
   <filename>hello.php</filename>
   <filename>index.html</filename>
  </files>  

 </administration>
</install>

Conclusion

Nous avons maintenant un composant simple en MVC. Chaque élément est très simple pour le moment mais fourni une belle démonstration de fléxibilité.

Développer un composant MVC pour Joomla – Partie 1

8

Cette série d’articles est une traduction de l’existant en anglais ici.

Introduction

Un Framework logiciel est la base d’une application qui peut être utilisée par un développeur. Dans Joomla 1.5 ce framework est d’une grande puissance pour le développement. Le code de Joomla! a été développé pour être extensible. Ce tutoriel vous guidera au travers du processus de développement d’un composant en utilisant ce framework.

L’objectif de ce projet est de développer un simple composant « Hello World ». Dans les tutoriels à venir ce framework simple sera utilisé pour montrer la pleine puissance du développement MVC avec Joomla!

Prérequis

Vous devez avoir un site Joomla 1.5 installé en local ou chez votre hébergeur.

Introduction au Modèle Vue Contrôleur

Bien que l’idée d’un composant puisse être très simple, le code peut, lui, rapidement devenir complexe quand des fonctionnalités additionnelles sont ajoutées ou que l’interface est modifiée.

Le principe Modèle-Vue-Controleur (appelé par la suite MVC) est un schéma de développement logiciel qui peut être utilisé pour organiser le code pour séparer la logique métier de la présentation des données. Il faudra donc organiser la logique métier dans une section et l’interface ainsi que l’interaction utilisateur seront quand à eux  pourront être modifiés et mis à jour sans avoir à reprogrammer complètement l’application ni modifier la logique métier. Le MVC a été développé à l’origine pour cartographier les tâches d’ajout de données, le traitement de celles-ci et le rendu final dans une interface logique utilisateur (GUI en Anglais).

Ces trois rôles principaux sont la base du MVC de Joomla!. Ils sont décris ici brièvement mais pour de plus amples explications vous pouvez vous référer aux liens à la fin du tutoriel.

Modèle

La partie modèle du composant encapsule les données de l’application. Il fourni souvent les routines utilisées pour gérer et manipuler ces données de façon sensée en plus de récupérer les données depuis le modèle. Dans notre cas, le modèle contiendra les méthodes pour ajouter, supprimer et mettre à jour les informations de bienvenue dans la base de données. Il contiendra aussi les méthodes pour récupérer les données dans la base. En général, l’accès aux données techniques est encapsulé dans le modèle. Ainsi, si l’on passe d’une application dont les données sont stockées dans un fichier vers un système qui utilise une base de données il ne faut modifier que le modèle de l’application pour que celle-ci continue de fonctionner.

Vue

La vue est la partie du composant utilisée pour mettre en forme les données du modèle de façon adéquate pour être présentées à l’utilisateur. Pour une application web, la vue sera généralement une page HTML qui est retournée. La vue prend les données du modèle (qui sont passées par le controleur) et rend les données dans un template qui est mis à jour avec les données puis présenté à l’utilisateur. La vue ne doit en aucun cas modifier les données. Elle affiche simplement les données du modèle mises en forme.

Controleur

Le controleur est responsable de répondre aux actions de l’utilisateur. Dans le cas d’une application web une action utilisateur est généralement une requète pour l’affichage d’une page. Le controleur détermine quelle requête est faite et la réponse appropriée en demandant au modèle de manipuler les données puis d’afficher la vue. Le controleur n’affiche pas de données. Il fait simplement la relation entre la requête et la méthode a utiliser dans le modèle qui lui modifie les données puis transmet à la vue pour faire le rendu final.

Connexions MVC

Schéma Modèle Vue ControleurL’image simplifiée de droite montre un composant basique utilisé avec Joomla.

La partie 1 du tutoriel fera un zoom sur le controleur et sur le vue (avec l’utilisation d’un template). Les parties 2 et 3 traiteront des fonctionnalités du modèle pour la manipulation de données.

Il faut conserver à l’esprit que le schéma s’applique uniquement pour la partie visible du site (le frontend des visiteurs). Un autre schéma identique est appliqué pour la partie gestion du site (backend). La partie administration sera traitée dans les parties 4 à 6 du tutoriel de développement. Les deux parties du site backend et frontend sont maintenues et configurées dans un fichier d’installation XML (appelé communément fichier manifeste).

Joomla! Implémentation MVC

Dans Joomla! le schéma MVC est implémenté en utilisant trois classes : JModelJView et JController. Pour plus de détails sur ces classes vous pouvez lire la documentation de l’API.

Pour les besoins de l’apprentissage et de débuggage ajouter un outil de débug à votre installation de Joomla est utile. Un bon exemple d’application est le projet J!Dump qui a l’avantage d’être un pop-up qui laisse la vue inchangée. Le system J!Dump vous permet de voir les propriétés de votre développement en cours mais aussi les méthodes.

Créé un composant

Pour notre composant de base nous avons besoin de seulement cinq fichiers :

  • site/hello.php – Le point d’entrée de notre composant
  • site/controller.php – Ce fichier contient notre controleur de base
  • site/views/hello/view.html.php – Ce fichier récupère les données nécessaires et les inclus dans le template
  • site/views/hello/tmpl/default.php – C’est le template pour notre sortie
  • hello.xml – Ce fichier XML (manifest) dit à Joomla! comment installer le composant

Il faut ce rappeler que le fichier « point d’entrée » du composant doit porter le même nom que celui-ci. Par exemple, si votre composant s’appelle « mon composant de démo »  Joomla créera lors de l’installation un répertoire com_moncomposantdedemo et le point d’entrée sera le fichier moncomposantdedemo.php, sinon il ne fonctionnera pas. Attention à l’utilisation des caractères spéciaux qui peuvent avoir une signification particulière pour Joomla! (notamment le _ ). Il faut donc éviter de les utiliser dans les noms de fichiers et composants.

The site directory here is for the parts of the component which are installed in the front end site.

Conventions de nommage

Il est important de savoir que certain mots sont réservés pour les composants et les classes. Les utiliser sans savoir ce que l’on fait peut produire des difficultés pour le débuggage. Un des mots réservé est « view » pour la classe vue (sous classe de JView) et pour la classe contrôleur (sous classe de JController) parce que la classe vue a besoin d’avoir la première partie de son nom identique à celle du contrôleur et du composant.

Tous les noms de fichiers et de répertoires des modèles, vues et contrôleurs doivent être ecrit en minuscule afin de fonctionner correctement sur les systèmes UNIX et Linux.

Créer le point d’entrée

Les accès à Joomla se font à partir d’un fichier unique : index.php pour la partie visiteur ou administrator/index.php pour la partie administration.L’application va ensuite charger le composant nécessaire en ce basant sur la valeur de la variable ‘option’ dans l’URL ou les données dans le POST. Pour notre composant l’adresse sera :

index.php?option=com_hello&view=hello

Ceci charge notre fichier principal qui peut être vu comme le seul point d’entrée de note composant : components/com_hello/hello.php

Le code pour ce fichier est presque toujours identique dans sa construction pour les composants.

site/hello.php

<?php
/**
 * @package    Joomla.Tutorials
 * @subpackage Components
 * components/com_hello/hello.php
 * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1
 * @license    GNU/GPL
*/

// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

// Require the base controller

require_once( JPATH_COMPONENT.DS.'controller.php' );

// Require specific controller if requested
if($controller = JRequest::getWord('controller')) {
    $path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';
    if (file_exists($path)) {
        require_once $path;
    } else {
        $controller = '';
    }
}

// Create the controller
$classname    = 'HelloController'.$controller;
$controller   = new $classname( );

// Perform the Request task
$controller->execute( JRequest::getWord( 'task' ) );

// Redirect if set by the controller
$controller->redirect();

La première ligne est une vérification de sécurité.

JPATH_COMPONENT est le chemin absolu vers le composant en cours. Dans notre cas components/com_hello. Si vous avez besoin plus spécifiquement du la partie Front-Office ou Administration de votre composant vous pouvez utiliser JPATH_COMPONENT_SITE ou JPATH_COMPONENT_ADMINISTRATOR.

DS est le séparateur de répertoires de votre système : soit / ou \ en fonction du système d’exploitation utilisé. Ceci est automatiquement pris en compte par le framework et donc le développeur n’a pas besoin de se soucier de développer différentes versions pour chaque système d’opération. A chaque fois qu’il sera fait référence à des fichiers sur le serveur local il sera nécessaire d’utiliser la constante DS pour éviter tout problème.

Après le chargement du contrôleur de base nous vérifions si un contrôleur spécifique est requis. Dans ce composant le contrôleur de base est le seul mais nous conservons la vérification pour une utilisation future.

JRequest:getWord() récupère la valeur d’une variable dans l’URL ou les données envoyées par POST. Donc si notre URL est index.php?option=com_hello&controller=controller_name, alors nous pouvons récupérer le nom de notre contrôleur dans note composant en utilisant la commande : echo JRequest::getWord(‘controller’);

Maintenant nous avons notre contrôleur de base ‘HelloController’ dans com_hello/controller.php, et, si nécessaire, des contrôleurs additionnels comme ‘HelloControllerController1′ dans le fichier com_hello/controllers/controller1.php. En utilisant ce schéma de nommage il sera plus simple de gérer les modifications du composant par la suite : ‘{Nomcomposant}{Contrôleur}{NomContrôleur}’.

Après la création du contrôleur nous lui ajoutons les conditions d’éxécution de tâches comme défini dans l’URL : index.php?option=com_hello&task=unetache. Si aucune tâche n’est définie alors la tâche ‘display’ sera utilisée par défaut. Quand ‘display’ est utilisé la variable ‘view’ décidera de quoi afficher. D’autres commandes communes sont ‘save’, ‘edit’, ‘new’ …

Le contrôleur devra décider de rediriger la page, par exemple après une tâche ‘save’.

Le point d’entrée principal (hello.php) passe essentiellement le contrôle au contrôleur qui, lui, exécute les tâches spécifiées dans la requête.

Notez que nous n’utilisons pas de balise fermante : ?> La raison à cela est que nous n’aurons pas d’espace blanc non désiré dans le code de sortie. C’est la pratique utilisée par défaut depuis Joomla 1.5 et cela utilisée pour tous les fichiers utilisant uniquement php.

Créer le contrôleur

Notre composant n’a qu’une seule tâche a exécuter : Saluer le monde. Ainsi le composant sera très simple. Aucune manipulation de données n’est nécessaire. Il faut juste charger la bonne vue. Nous aurons une seule méthode dans notre contrôleur : display(). La plupart des fonctionnalités est construite dans la classe JController donc tout ce que nous avons à faire est d’appeler la méthode JController::display().

Le code du contrôleur de base site/controller.php est :

<?php
/**
 * @package    Joomla.Tutorials
 * @subpackage Components
 * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1
 * @license    GNU/GPL
 */

// No direct access

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport('joomla.application.component.controller');

/**
 * Hello World Component Controller
 *
 * @package    Joomla.Tutorials
 * @subpackage Components
 */
class HelloController extends JController
{
    /**
     * Method to display the view
     *
     * @access    public
     */
    function display()
    {
        parent::display();
    }

}

Le constructeur JController aura toujours une tâche display() et à moins que ce soit spécifié (en utilisant la méthode registerDefaultTask() ), il l’utilisera en tâche par défaut.

La méthode minimaliste display() n’est pas vraiment nécessaire étant donné quelle appelle le constructeur parent. Toutefois, c’est une bonne méthode visuelle pour indiquer ce qui ce passe dans le contrôleur.

La méthode Jcontroller::display() déterminera le nom de la vue et sa disposition à partir de la requète et chargera cet vue et sa disposition. Lorsque vous créez un lien menu dans votre composant le gestionnaire de menu permet à l’administrateur de sélectionner la vue  qu’il souhaite afficher par le lien menu et de spécifier sa disposition. Une vue se réfère généralement à la vue d’une certain groupe d’informations (par exemple une liste de voiture, une liste d’évènements, une voiture, un évènement). Une disposition est une façon d’organiser une vue.

Dans notre composant nous aurons une seule vue appelée hello et une seule disposition (default).

Créer la vue

La tâche de la vue est très simple : Elle récupère les données à afficher et les envoie dans le template. Les données sont envoyées au template en utilisant la méthode  JView::assignRef.

(Note: La clé (le premier argument) passé à la méthode assignRef ne peut être précédée par un underscore : $this->assignRef(‘_greeting’,$greeting). En faisant cela la méthode retournera un résultat faux et votre variable ne sera pas envoyée dans le template).

Le code de la vue du site : /views/hello/view.html.php :

<?php
/**
 * @package    Joomla.Tutorials
 * @subpackage Components
 * @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1
 * @license    GNU/GPL
*/

// no direct access

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.application.component.view');

/**
 * HTML View class for the HelloWorld Component
 *
 * @package    HelloWorld
 */

class HelloViewHello extends JView
{
    function display($tpl = null)
    {
        $greeting = "Hello World!";
        $this->assignRef( 'greeting', $greeting );

        parent::display($tpl);
    }
}

Créer le template

Les templates Joomla sont des fichiers PHP qui sont utilisés pour disposer les données de la vue dans un ordre particulier (ainsi que son formatage). Les variables assignées par la méthode JView::assignRef peuvent être accédées à partir du template en utilisant $this->{nomdelapropriete} (voir le code ci-dessus pour un exemple).

Notre template est très simple : nous voulons afficher le message de bienvenue qui vient de la vue :
/views/hello/tmpl/default.php :

<?php

// No direct access

defined('_JEXEC') or die('Restricted access'); ?>
<h1><?php echo $this->greeting; ?></h1>

Emballer tout cela – Créer le fichier hello.xml

Il est possible d’installer un composant manuellement en copiant les fichiers par FTP et en modifiant les tables de la base de données. Mais il est plus efficace (et plus simple aussi) de créer un paquet d’installation qui permettra à l’installateur de Joomla! de faire ceci pour nous. Ce paquet contiendra plusieurs informations :

  • Une description basique à propos du composant (son nom), et des information facultatives comme une description détaillée, un copyright, et les informations de licence.
  • Une liste des fichiers qui doivent être copiés
  • Un fichier PHP facultatif qui effectue des opérations d’installation/désinstallation supplémentaires
  • Un fichier SQL facultatif qui contient des requètes de base de données à exécuter pendant l’installation ou la désinstallation

Le format du fichier XML hello.xml est le suivant :

<?xml version="1.0" encoding="utf-8"?>
<install type="component" version="1.5.0">
 <name>Hello</name>
 <!-- The following elements are optional and free of formatting constraints -->
 <creationDate>2007-02-22</creationDate>
 <author>John Doe</author>
 <authorEmail>john.doe@example.org</authorEmail>
 <authorUrl>http://www.example.org</authorUrl>
 <copyright>Copyright Info</copyright>
 <license>License Info</license>
 <!--  The version string is recorded in the components table -->
 <version>1.01</version>
 <!-- The description is optional and defaults to the name -->
 <description>Description of the component ...</description>

 <!-- Site Main File Copy Section -->
 <!-- Note the folder attribute: This attribute describes the folder
      to copy FROM in the package to install therefore files copied
      in this section are copied from /site/ in the package -->
 <files folder="site">
  <filename>controller.php</filename>
  <filename>hello.php</filename>
  <filename>index.html</filename>
  <filename>views/index.html</filename>
  <filename>views/hello/index.html</filename>
  <filename>views/hello/view.html.php</filename>
  <filename>views/hello/tmpl/default.php</filename>
  <filename>views/hello/tmpl/index.html</filename>
 </files>

 <administration>
  <!-- Administration Menu Section -->
  <menu>Hello World!</menu>

  <!-- Administration Main File Copy Section -->
  <files folder="admin">
   <filename>hello.php</filename>
   <filename>index.html</filename>
  </files>

 </administration>
</install>

Mettre ce fichier xml (aussi apellé manifest) à la racine de votre paquet (l’installeur cherche le fichier à cet endroit pour effectuer les opérations nécessaires).
Ne pas inclure le fichier .xml lui même dans la liste des fichiers sous la balise <files>…

Vous devez avoir remarqué que la source manifest mentionnée dans le fichier XML fait référence à des fichiers dont nous n’avons pas encore parlé. Ces fichiers sont le index.html et les fichiers admin. Un fichier index.html est placé dans chaque répertoire afin d’éviter des problèmes de sécurité comme lire la liste des fichiers à un endroit donné. Si il n’y a pas de fichier index.html alors certains serveurs affiche la liste des fichiers contenus dans le répertoire. Ceci est souvent non souhaitable. Les fichiers index.html contiennent une seule ligne :

<html><body bgcolor="#FFFFFF"></body></html>

Ceci affichera simplement une page blanche.

Le fichier hello.php dans le répertoire admin est le point d’entrée de notre composant pour la partie administration Comme notre composant n’a pas de besoin d’administration (pas encore), ce fichier contiendra le même contenu que le fichier index.html.

Si vous avez suivi correctement le tutoriel vous pouvez visiter votre site à l’adresse monsite.com/index.php?option=com_hello et voir le résultat de votre travail.

Wash me if you can

0

Ce billet rigolo est spnsorisé par Citroën.

Une nouvelle fois la marque Française aux chevrons nous fait part de sa volonté d’innovation avec humour. Cette fois-ci ils nous propose de découvrir la nouvelle citroën C3 avec toit panoramique.

Pour le coup il y a eu du recrutement chez les comédiens avec un catcheur, une femme qui a oublié sa montre dans les 70s et un poulet. J’adore ce clip qui fait fait penser en même temps à « Super Nacho » en passant par « Jackie Brown » en finissant avec la mascotte poulet qui pourrai être sortie tout droit de chez « Friends ».

Profitez donc maintenant de la vidéo rien que pour le fun ou encore jouez pour vivre l’expérience de l’intérieur …

Nouvelle version de FLEXIcontent

0

Pour les amoureux de Joomla je souahite vous présenter l’arrivée de la nouvelle version de FLEXIcontent.

Après des heures, des jours et même des semaines de travail une nouvelle version voit le jour avec de nouvelles fonctionnalités et encore plus de promesses. Au programme de cette mise à jour que je qualifie de majeure nous avons la création de contenu via le frontend pour les membres autorisés du site (autorisations et droits gérés par FLEXIaccess).

Pour moi cela représente en effet une évolution majeure pour deux raisons :

  • Elle permet au visiteur du site de pouvoir créer du contenu
  • Le contenu créé bénéficie de tous les apports de FLEXIcontent pour le fond ET la forme

Aujourd’hui il est donc aisé de remplir ou faire remplir des fiches de contenus ayant des caractéristiques aussi variées que possible.

La nouvelle version apporte aussi un plugin de champ mini-galerie pour créer directement au sein d’un article une galerie de photos, un portfolio ou tout ce qui nous passe par la tête.

En liaison avec le composant FLEXIacces ce composant devient d’une redoutable efficacité pour créer un intranet ou extranet mais encore plus si il s’agit d’une plateforme collaborative.

Retrouvez plus d’information sur le site officiel du composant : FLEXICONTENT

Pré-requis a l’installation d’un script web (blog, cms, …)

0

On trouve un peu partout des tutoriels et autres pas à pas pour l’installation de scripts de gestion de blog ou de site web. Par contre il existe peu de tutoriels expliquant les pré-requis pour installer ces scripts. Je vais donc vous proposer ce soir un peu de documentation sur l’utilisation d’un client ftp.

Commençons par le commencement. Afin de pouvoir installer votre site (on part sur le postulat que vous voulez créer un site) il va falloir envoyer le script sur votre serveur d’hébergement. Pour cela le meilleur logiciel (avis personnel) est Filezilla. Non seulement ce logiciel est gratuit, facile à utiliser mais en plus il existe sur toutes les plateformes (Windows, Linux, Mac).

Commençons donc par télécharger l’installateur du logiciel : Installateur filezilla

Ensuite vous allez bien entendu installer le logiciel sur votre ordinateur. Je ne détaille pas mais en gros il suffit de lancer l’installateur et ensuite de valider une par une les fenêtres qui s’affichent.

Maintenant que nous avons les outils pour pouvoir faire le transfert il va falloir récupérer les paramètres de connexion à votre hébergement. Il s’agit là d’une adresse serveur, d’un identifiant et d’un mot de passe. La plupart des hébergeur discount en France utilisent des paramètres simple pour vous faciliter la tâche. Par exemple chez OVH l’adresse serveur est celle de votre site sous la forme : http://adressedemonsite.com.

Présentation de l’interface graphique de Filezilla :

  1. Dans cette zone on entre les paramètres de connexion à notre serveur FTP
  2. Cette zone permet d’explorer les fichiers présent sur notre machine (mon PC ou mon Mac)
  3. Cette zone permet d’explorer les fichiers présents sur mon hébergement
  4. C’est la liste des opérations en attente de traitement (la file d’attente)
Descriptions des zones de travail dans Filezilla

Les zones utilisées dans Filezilla

Une fois connecté à votre espace d’hébergement il faudra alors transférer les fichiers d’installation vers celui-ci. La plupart du temps les fichiers sont inclus dans une archive .zip il faut donc décompresser les fichiers sur votre ordinateur dans un répertoire (par exemple sur le bureau). Ensuite un simple cliquer/glisser vers le répertoire d’hébergement placera tous les fichiers dans la file d’attente et l’envoi commencera. Une indication en bas à droite de la fenêtre Filezilla vous indiquera le poids total des fichiers à transférer ainsi qu’une estimation du temps restant pour finaliser ce travail.

Le temps indiqué est très variable. En effet, si vous devez transférer beaucoup de « petits » fichiers le transfert sera plus long qu’avec quelques gros fichiers. Cela vient en partie du fait que pour chaque transfert de fichier il faut initier une connexion et que la capacité maximum de transfert de votre connexion ne peut être utilisée.

Gérer plusieurs connexions FTP :

Comme dans tout bon programme vous pouvez gérer plusieurs profils de compte FTP avec Filezilla. Ainsi, si vous gérez 2 ou 3 sites (et même bien plus) vous pourrez enregistrer les paramètres de chacun d’eux et les réutiliser rapidement.

L’icône tout en haut à gauche permet de gérer les différents comptes :

La gestion des comptes FTP dans Filezilla

la fenêtre de gestion de comptes

Il suffit donc maintenant de renseigner les informations de votre hébergeur (hote, identifiant et mot de passe).

NOTE : La plupart du temps les hébergeurs vous proposent un service FTP classique. Mais parfois vous pouvez aussi utiliser le FTP sécurisé (SFTP). Avant tout, vérifiez bien les paramètres fournis par l’hébergeur.

Go to Top