NetAssoBlog

200gr de Web, un zeste de marketing un soupçon de droit…
maxime

Tutoriel – Template FLEXIcontent – Part1 : la structure

janvier20

flexicontentFLEXIcontent en est maintenant à sa beta 5. Cette version est très proche de sa version finale. Depuis la la béta 4, le système de template a bien évolué, même si ce dernier reste assez simple, j’ai décidé de réaliser un tutoriel afin de vous aider dans vos premiers pas de ce composant CCK indispensable à Joomla.

Afin de rendre concret cet exemple je vais partir du principe que l’on veut créer plusieurs contenus afin de référencer des stades de foot – et oui fan de foot oblige ;) – j’ai pour objectif d’afficher les différents types de champs suivants :
– Text & Textarea :  les coordonnées du stade
– Date : la date de construction
– Image : une photo du stade
– File : Le plan des tribunes
– Select : l’hymne officiel lors de l’entrée des joueurs dans le stade
– Select multiple : liste des partenaires
– Text + plugin : une google map pour le localiser
– Checkbox images : un champ pour afficher les prestations du stade
– Weblink : un lien vers le site officiel du club
– Email : une adresse email vers le contact officiel …

Vous pourrez bien sûr adapter cet exemple à votre besoin.

Ce tutoriel est décomposé en 5 parties :

Ce tutoriel a été réalisé sous Joomla 1.5.15 et FLEXIcontent beta 5.

La nouvelle structure des templates

Paramétrages initiaux

Avant de rentrer dans les détails de la création du template, il faut d’abord s’assurer de paramétrer correctement FLEXIcontent. J’ajoute une catégorie  racine avec les paramètres par défaut que je nomme « Stades ». J’ajoute ensuite mon type avec les paramètres par défaut que je nomme « Stade »

Création du template

arborescence Depuis la beta 4 de FLEXIcontent, le chemin pour accéder aux templates est le suivant : /components/com_flexicontent/templates/ Je vais donc créer à cet endroit un nouveau répertoire que j’appelle « stade ». Puis je vais créer des fichiers vierges de manière à créer la même arborescence ci contre, que l’on renseignera au fur et à mesure.

item.xml

C’est ce fichier qui va déterminer les zones et les paramètres du template d’un contenu. J’ajoute dans un premier temps les informations afin de décrire mon template :

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<metadata>
  <author>Maxime DANJOU</author>
  <website>www.netassopro.com</website>
  <email>maxime.danjou@netassopro.com</email>
  <license>GPLv2</license>
  <version>1.0</version>
  <release>18 janvier 2009</release>
  <description>Template pour afficher les informations sur un stade</description>

Puis il est possible de déterminer différents paramètres que l’on pourra changer facilement par la suite grâce aux paramètres des templates accessibles dans le back office de FLEXIcontent. Dans mon cas je vais laisser la possibilité à l’utilisateur d’afficher ou non la GoogleMap associée au stade. (pour bien faire j’aurais dû utiliser le fichier langue fr-FR.com_flexicontent.ini, mais bon j’ai pas prévu de faire du multilangue dans ce tutoriel, une prochaine fois…)

10
11
12
13
14
15
  <params addpath="/administrator/components/com_flexicontent/elements">
    <param name="aff_gmap" type="list" default="2" label="Afficher la GoogleMap " description="Affiche ou non la GoogleMap sur la fiche du stade">
      <option value="0">No</option>
      <option value="1">Yes</option>
    </param>
  </params>

Je détermine ensuite mes zones dans lesquelles je pourrais rajouter mes différents champs.

16
17
18
19
20
21
22
23
24
25
  <fieldgroups>
    <group>entete</group>
    <group>adresse</group>
    <group>contact</group>
    <group>image</group>
    <group>gmap</group>
    <group>description</group>
    <group>informations</group>
    <group>bas</group>
  </fieldgroups>

Dans la dernière partie de mon fichier, j’indique le chemin du fichier css qui sera utilisé dans mon template. Si j’en avais besoin, j’aurai également pu charger des fichiers Javascript…

26
27
28
29
30
31
  <cssitem>
    <file>css/item.css</file>
  </cssitem>
  <jsitem>
  </jsitem>
</metadata>

category.xml

C’est ce fichier qui va déterminer les zones et les paramètres du template d’affichage d’une liste de contenu.  Je choisis d’afficher les stades en liste dans un tableau  (je ferais un autre tuto pour montrer l’affichage en blog). Le début du fichier est identique à item.xml et pour le reste ce n’est pas bien compliqué car l’ensemble des champs seront dans un tableau, il n’y a donc qu’une seule zone. De plus je n’ai pas de paramètres à ajouter :

10
11
12
13
14
15
16
17
18
19
20
 <params addpath="/administrator/components/com_flexicontent/elements">
 </params>
 <fieldgroups>
 <group>tableau</group>
 </fieldgroups>
 <csscategory>
 <file>css/category.css</file>
 </csscategory>
 <jscategory>
 </jscategory>
</metadata>

category.png et item.png

Ces deux fichiers ont juste pour but de montrer à l’utilisateur comment sont positionnés les zones dans le template. Je me fais donc deux images de 250×280 afin de bien présenter mon template.

item category

item.php

Ce fichier correspond au template qui va afficher le contenu, dans une première partie nous n’allons renseigner uniquement que le code html afin de déterminer nos zones.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
// on définit ici le nom du template
$tmpl = $this->tmpl;
?>
<div id="stade_contenu">
 <div id="stade_entete">
 </div>
 <div id="stade_adresse">
 </div>
 <div id="stade_contact">
 </div>
 <div id="stade_image">
 </div>
 <div id="stade_description">
 </div>
 <div id="stade_informations">
 </div>
 <div id="stade_gmap">
 </div>
 <div id="stade_bas">
 </div>
</div>

category.php, category_alpha.php, category_category.php, category_items.php, category_subcategory.php

Je vais utiliser l’ensemble de ses fichiers pour afficher mes stades sous forme de liste, voici l’utilité de chacun d’entre eux.

catetegory.php : fichier principal du template qui est appelé par flexicontent, il n’affiche que le titre principal, la barre d’icone (imprimer, pdf, mail)  et charge les autres fichiers du template
category_alpha.php : il permet d’afficher un index alphanumérique qui permet de retrouver facilement un contenu dans une liste en fonction de son premier caractère
category_category.php : ce fichier affiche les informations concernant la catégorie qui est affichée (image et description)
category_items.php : affiche la liste des contenus sous forme de tableau ou blog (dans mon cas ca sera tableau)
category_subcategory.php : affiche la liste des sous catégories de la catégorie en cours d’affichage avec possibilité de montrer le nombre de contenu

Je vais me contenter de faire une simple copie des fichiers originaux contenus dans le template « default », je les détaillerai dans la partie 4 de mon tutoriel.

css/category.css , css/item.css

Lors du chargement d’un template son fichier css personnalisé est également automatiquement chargé, category.css pour l’affichage en mode category et item.css pour l’affichage d’un seul contenu. Je laisse le fichier category.css vide et je remplis le fichier item.css très simplement de la manière suivante :


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
div.stade_contenu{
 width:740px;
 overflow:hidden;
}
div.stade_entete{
 width:100%;
 height:30px;
 overflow:hidden;
}
div.stade_adresse{
 width:50%;
 height:100px;
 overflow:hidden;
}
div.stade_contact{
 width:50%;
 height:100px;
 overflow:hidden;
}
div.stade_image{
 float:left;
 width:50%;
 height:200px;
 overflow:hidden;
}
div.stade_description{
 width:50%;
 height:100px;
 overflow:hidden;
}
div.stade_informations{
 width:50%;
 height:100px;
 overflow:hidden;
}
div.stade_gmap{
 float:left;
 width:50%;
 height:200px;
 overflow:hidden;
}
div.stade_bas{
 clear:both;
 width:100%;
 height:30px;
 overflow:hidden;
}

Mise en place du template

Afin d’installer mon nouveau template, il me suffit de copier le répertoire « stade » et l’ensemble de son contenu, que j’ai créé précedement, sur mon site à dans le répertoire suivant : components/com_flexicontent/templates
Une fois les fichiers copiés, je peux aller dans le back office de FLEXIcontent dans la section templates afin de vérifier que mon template est bien installé.
liste_templates

Configuration supplémentaire

Afin de finaliser l’installation et la configuration de nouveau template, je vais maintenant l’affecter à ma catégorie et à mon type.

Je vais donc dans le back office de FLEXIcontent, je clique sur « type », puis sur « stade ». On va maintenant affecter un template par défaut pour chaque contenu qui sera créé avec le type « stade », je modifie ensuite la valeur de template de contenu en choisissant dans la liste « stade ». Je constate au passage que j’ai l’option « Paramètres de templates, Paramètres : stade » qui s’active et j’y retrouve l’option d’affichage de la GoogleMap qui s’affiche, sa valeur est à non, je la bascule en oui.

Maintenant il faut que j’affecte mon template pour l’affichage en vue category, toujours dans le back office, je me dirige dans « catégories » puis je rentre en édition de ma catégorie stade. Dans les « Paramètres standards », je sélectionne « stade » dans l’option « template de catégorie », puis je sauvegarde. Dans ma configuration, il n’y a pas d’options affecter à ce template.

Afin d’enrichir un peu ce tutoriel, je vais également ajouter des sous catégories que je nomme « Est », »Nord et Centre », »Ouest », »Sud ». Lors de la création de chacune de ses catégories, je sélectionne l’option « Copier tous les paramètres : stades » et dans « Catégorie parente : stages  » également.

liste_categorie

Voilà c’est tout pour la première partie… le reste à suivre très prochainement.

Catégorie: Web

Commentaires

Le 20/01/2010 à 11:49 , Tweets that mention NetAssoBlog | Tutoriel – Template FLEXIcontent – Part1 : la structure -- Topsy.com a dit:

Tweets that mention NetAssoBlog | Tutoriel – Template FLEXIcontent – Part1 : la structure -- Topsy.com

[...] This post was mentioned on Twitter by Emmanuel Danan and Thibaud Ryckwaert, Maxime DANJOU. Maxime DANJOU said: Tutoriel – Template FLEXIcontent – Part1 : la structure des fichiers http://tinyurl.com/yb58cz7 [...]

Le 20/01/2010 à 12:02 , Pixdep a dit:

Pixdep

Excellent tutoriel j’utilise actuellement K2. J’aimerais en connaitre les différence avec flexicontent.
Merci. :war:

Le 20/01/2010 à 12:04 , Maxime a dit:

maxime

Il faudrait en effet qu’un de ces jours quand j’aurai un peu de temps faire un parallèle entre les différents CCK, mais j’avoue que pour le moment FLEXIcontent répond à toutes nos attentes et donc je me concentre essentiellement au développement de ce composant.

Le 20/01/2010 à 17:20 , Olivier Nolbert a dit:

Olivier Nolbert

Les structures des templates FLEXIContent et K2 sont très proches.

Le fonctionnement de ces 2 CCK diffère pour moi sur 1 point important : FLEXIContent gère le multi-catégories mais K2 non.

Je n’ai pas encore essayé de développer des plugins sur FLEXIContent mais sur K2, c’est un régal.

en tout cas, merci pour le tuto…

Le 20/01/2010 à 17:25 , Helio a dit:

Helio

Salut Maxime,

Ce tutoriel est tout simplement magnifique :) ça faisait long temps que je cherchait un bon tutoriel sur comment créer des templates avec la nouvelle version de Felicontent.

D’après le titre de l’article il y aura une suite… à quand la Part2? :P

Merci encore pour ce tutoriel

Le 20/01/2010 à 22:28 , Maxime a dit:

maxime

Merci aussi pour vos retours, la deuxième partie est annoncée pour le début de la semaine prochaine.

Le 21/01/2010 à 08:51 , Emmanuel Danan a dit:

Emmanuel Danan

Ca c ‘est le top!!! Merci encore pour cette nouvelle contribution de qualité. Dès que je rentre de Bangkok, je vais faire le tour des différentes ressources pour les rassembler sur une page dédiée.
L’équipe Thai, travaille aussi sur quelques nouveautés très sympa (pas sur les templates) mais je n’en dis pas plus…
A très bientôt,
Manu.

Le 21/01/2010 à 08:58 , Emmanuel Danan a dit:

Emmanuel Danan

J’oubliais une précision importante: « Il ne faut pas utiliser de paramètres de type RADIO » (pour éviter des conflits d’id)

Le 21/01/2010 à 10:18 , Maxime a dit:

maxime

Je le préciserais donc dans la 2ème partie de mon tutoriel qui va présenter justement les différents types de champs.

Le 03/03/2010 à 11:53 , olivier a dit:

olivier

Bonjour,

Je trouve également que ce tutoriel est bien présenté, cependant je l’ai suivi à la lettre et lorsque j’utilise le template créé, mon contenu ne s’affiche pas…

Est ce normal?

Merci

Olivier

Le 03/03/2010 à 13:16 , Maxime a dit:

maxime

Si tu n’as suivi que la première partie de ce tutoriel, oui en effet c’est normal. J’ai rédigé 5 parties que tu peux retrouver sur ce blog.

Le 03/03/2010 à 14:52 , olivier a dit:

olivier

j’ai suivi l’ensemble des parties de 1 à 4 (la 5 n’est pas disponible).
Je n’ai pas d’erreur annoncée, le template est bien visible dans la liste, les champs sont bien renseignés et affectés, le contenu est bien rédigé et rattaché à un type.

j’ai cependant adapté votre méthode à mon besoin et lorsque je clique vers mon article test j’ai une page blanche…

Merci pour votre aide

Olivier

Le 03/03/2010 à 19:11 , Maxime a dit:

maxime

S’il y a une page blanche c’est certainement qu’il y a une petite erreur quelque part. As tu regardé le code HTML qui est généré, est il totalement vierge, ou est ce que tu retrouves les balises HTML que tu as mises dans ton template ?
Peux tu déjà me donner le link de ta page afin que je regarde ?

Le 05/03/2010 à 15:39 , olivier a dit:

olivier

Le site n’est pas encore en ligne…
ci dessous deux extraits du code source:

1/

2/

merci
Olivier

Le 05/03/2010 à 16:26 , olivier a dit:

olivier

oups je me suis trompé pour le 1/

…link rel= »stylesheet » href= »/monsite/components/com_flexicontent/assets/css/flexicontent.css » type= »text/css » /…
…link rel= »stylesheet » href= »/monsite/components/com_flexicontent/librairies/multibox/multibox.css » type= »text/css » /…
…link rel= »stylesheet » href= »/monsite/components/com_flexicontent/templates/artiste/css/item.css » type= »text/css » /…

2/

…div id= »contenu_droite »…
…div id= »artiste_contenu »…
…div id= »artiste_header »…
…/div…
…div id= »artiste_nom »…
…/div…
…div id= »artiste_biographie »…
…/div…
…div id= »artiste_photo »…
…/div…
…div id= »artiste_photosoeuvres »…
…/div…
…div id= »artiste_commentaires »…
…/div…
…div id= »artiste_footer »…
…/div…
…/div…
…/div…

Le 05/03/2010 à 17:53 , Maxime a dit:

maxime

Donc apparemment ton template est bien affiché, as tu bien mis le code PHP dans ton template qui permet d’afficher les positions ?
As tu bien associé dans le back office tes champs à tes positions ?

Le 06/03/2010 à 01:42 , olivier a dit:

olivier

Bon finalement j’ai trouvé l’erreur… mais cependant l’affichage ne respecte pas le css: tout est aligné à gauche.
si vous avez une piste je suis preneur.
merci
olivier

Le 06/03/2010 à 11:21 , Maxime a dit:

maxime

Quel était l’erreur alors ?
Si le css n’est pas respecté, c’est également qu’il y a une erreur dans le contenu de ton fichier css :drink:

Le 06/03/2010 à 12:12 , olivier a dit:

olivier

je n’avais pas mis le code php adapté correctement à mes div :(

sinon côté css je suis certain qu’il ne contient pas d’erreur: j’ai en fait un doute sur l’interprétation et adaptation de votre ligne 4 et 16

je n’ai pas touché la 4 et j’ai adapté la 16 avec « artiste_contenu » au lieu de « stade_contenu »

c’est ça?

Olivier

Le 10/03/2010 à 13:44 , olivier a dit:

olivier

Bon finalement j’ai trouvé!
je n’avais pas bien déclaré le template…
Merci pour vos conseils
Bonne continuation
Olivier

Le 06/05/2010 à 15:18 , ceuline a dit:

ceuline

Merci pour cet ensemble de tutoriels :girl:

Le 14/05/2010 à 12:52 , Benjamin a dit:

Benjamin

Bonjour,
Déjà un grand merci pour le travail qui a été fait… C’est vrai que même un débutant (moi) peut comprendre les étapes qui mènent à la réalisation du template…

Petit problème que j’ai en fin d’étape 1: Message d’erreur
XML Parsing Error at 3:1. Error 5: Invalid document end

Je ne sais pas d’où ça vient, mais je voudrais le régler avant de passer à la suite…

Si vous avez une aide quelconque, je suis preneur.

Le 01/08/2010 à 17:20 , Julien a dit:

Julien

Pareil pour moi, il m’affiche :

XML Parsing Error at 8:21. Error 9: Invalid character

et il m’affiche la petite image de « Gabarit non éditable (pas de groupes) » dans le « vue item et vue category »

Que doit-on faire ?

Merci a++

Le 02/08/2010 à 08:16 , Maxime a dit:

maxime

Bonjour,
Votre problème ressemble à une erreur de format XML, avez vous saisi des accents ou autres caractères dans votre fichier ?

Le 02/08/2010 à 12:35 , Julien a dit:

Julien

J’avais mis un accent circonflexe sur le u de août dans la dates :ghost:

Merci beaucoup =)

(il faudrait peut-être le spécifier dans le tutoriel pour les novices comme moi :crazy: )

Merci pour ces merveilleux tutoriel
A++ ;)

Le 12/08/2010 à 05:28 , Alexander a dit:

Alexander

Maxime, je suis désolé, je ne parle pas français (je suis de la Russie) Ainsi, à travers un traducteur. J’ai créé ce topic (http://flexicontent.org/forum/index.php?f=28&t=2064&rb_v=viewtopic), m’ont donné la référence à votre blog. Aidez-moi s’il vous plaît. Je souffre depuis 2 jours. J’ai besoin dans les catégories au lieu d’un texte d’introduction pour obtenir (montrer) quelques champs. J’ai été en mesure de supprimer le texte d’introduction, mais je ne peux pas montrer le champ.
—————-
En English:
I want to delete description from template of category and to add several fields instead of description. Here I created topic (http://flexicontent.org/forum/index.php?f=28&t=2064&rb_v=viewtopic). Please help me..
—————————————————————————–
Encore une fois, j’ai beaucoup à m’excuser pour mon mauvais français. S’il vous plaît aidez-moi ..

Le 13/08/2010 à 15:00 , Maxime a dit:

maxime

Hi,
I didn’t understand all tha you want. You want to show some fields of an item ? Tell me the label and the kind of each fields.

Le 20/08/2010 à 05:35 , Modele a dit:

Modele

juste un petit mot pourte dire que tu gagnerais à être reconu par tous.

Le 07/09/2010 à 03:24 , Stephanie a dit:

Stephanie

Thanks for the great tutorials.

Is there a working example of this template?

Le 08/09/2010 à 08:26 , Maxime a dit:

maxime

Juste right now ? no :( … I will put it online when i will have one day free…

L'email ne sera pas affiché

Exemple de site internet

Votre commentaire:

|-) ]o) ;) :| :war: :star: :s :pizza: :pig: :phone: :p :monk: :listen: :jail: :idea: :happy: :halloween: :haha: :girl: :ghost: :drink: :d :crazy: :cold: :cloudy: :@ :) :( :$ 8) (l) (a) (L) (6)