Tutoriel – Template FLEXIcontent – Part4 : Le template d’un contenu
Dans cette 4ème partie je vais vous présenter et vous expliquer l’objet FlexicontentViewItems qui va nous permettre de réaliser dans notre template de vue Item. Je vais donc ainsi détailler toutes les variables qui pourront vous être utile dans la construction de vos propres templates.
Je vais également parler d’un lot de fonctions que l’on peut retrouver avec la class flexicontent_html.
Ce tutoriel est toujours construit autour de mon exemple de vouloir afficher les informations concernant un stade de foot.
Au sommaire :
- L’objet FlexicontentViewItems
- Afficher un ensemble de champ contenu dans une position
- Afficher un seul champ
- La gestion des commentaires
- Allez plus loin…
- item
- item->fields ou fields
- item->positions
- user
- params
- menu_params
- La class flexicontent_html
- Function striptadsandcut
- Function extractimagesrc
- Function printbutton
- Function mailbutton
- Function pdfbutton
L’objet FlexicontentViewItems
Cet objet exploitable dans l’ensemble des template en vue Item va vous permettre de faire apparaitre toutes les informations en relation avec un contenu.
Il est accessible à travers la variable $this.
Je vais maintenant reprendre mon fichier item.php (créé dans la part1 de ce tutoriel) et je vais commencer par revoir l’entête de mon fichier.
1 2 3 4 | // interdit l'accés direct au fichier defined( '_JEXEC' ) or die( 'Restricted access' ); // on définit ici le nom du template, dans notre cas :.items.stade $tmpl = $this->tmpl; |
On va placer ensuite initier notre template avec une balise div en ajoutant des class css personalisés en fonction du stade et du type de contenu. Pour cela j’utilise :
$this->item->id = retourne l’identifiant du contenu
$this->item->type_id = retourne l’identifiant du type de contenu
Ca donne :
16 | <div id="stade_contenu" class="stade_contenu item<?php echo $this->item->id; ?> type<?php echo $this->item->type_id; ?>"> |
Afficher un ensemble de champ contenu dans une position
Comme nous l’avons vu dans la part 1 du tutoriel, FLEXIcontent permet de gérer différentes position dans lesquels nous pouvons placer nos champs. Cela donne le droit à l’utilisateur de placer ces nouveaux champs sans modifier le code du template.
Il suffit de mettre alors dans notre template une boucle qui va parcourir l’ensemble des champs contenu dans une position donné. Voici le code que j’utiliserais pour chacune des positions que j’ai créé (entête,adresse,contact,image,description,informations,gmap,bas) :
17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <!-- BOF entete --> <div id="stade_entete"> <?php if (isset($this->item->positions['entete'])) : ?> <?php foreach ($this->item->positions['entete'] as $champ) : ?> <div class="champ_<?php echo $champ->name; ?>"> <?php if ($champ->label) : ?> <div class="etiquette"><?php echo $champ->label; ?></div> <?php endif; ?> <div class="valeur"><?php echo $champ->display; ?></div> </div> <?php endforeach; ?> <?php endif; ?> </div> <!-- EOF entete --> |
Explications :
isset($this->item->positions['entete']) // permet de savoir si des champs doivent être affichés ou non dans cette position
php foreach ($this->item->positions['entete'] as $champ) : // parcours tous les champs contenu de la position
$champ->name; //retourne le nom du champ, je l’utilise afin de déclarer une class css unique qui me permettra par la suite de formater mon champ comme je le souhaite
$champ->label; // retourne l’étiquette du champ dans le cas où j’ai choisi dans mes paramètres du champ j’ai choisi de la faire apparaitre.
$champ->display; // affiche la valeur du champ formaté selon les paramètres que j’ai mis en place (préfixe + valeur + suffixe)
Afficher un seul champ
Il est également possible d’afficher directement un champ sans passer la les positions. Cela peut être parfois utile afin de faire un template simple sans aucunes positions (qui sont plus lourdes en termes de code). Je vais utiliser cette partie de code pour afficher mon image « image_stade » .
62 63 64 65 66 67 68 | <!-- BOF image --> <div id="stade_image"> <div class="champ_image_stade"> <?php echo $this->fields['image_stade']->display; ?> </div> </div> <!-- EOF image --> |
Pour accéder directement aux valeurs et paramètre du champs, il faut utiliser le $this->fields[‘mon_champ’].
La gestion des commentaires
Je n’ai fait que récupérer le code source original de FLEXIcontent afin de faire apparaitre les commentaires :
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 | <?php if ($this->params->get('comments')) : ?> <!-- BOF comments --> <div class="comments"> <?php if ($this->params->get('comments') == 1) : if (file_exists(JPATH_SITE.DS.'components'.DS.'com_jcomments'.DS.'jcomments.php')) : require_once(JPATH_SITE.DS.'components'.DS.'com_jcomments'.DS.'jcomments.php'); echo JComments::showComments($this->item->id, 'com_flexicontent', $this->escape($this->item->title)); endif; endif; if ($this->params->get('comments') == 2) : if (file_exists(JPATH_SITE.DS.'plugins'.DS.'content'.DS.'jom_comment_bot.php')) : require_once(JPATH_SITE.DS.'plugins'.DS.'content'.DS.'jom_comment_bot.php'); echo jomcomment($this->item->id, 'com_flexicontent'); endif; endif; ?> </div> <!-- EOF comments --> <?php endif; ?> |
A travers $this->params->get(’comments’), cela me permet de récupérer les parameters de FLEXIcontent et ainsi savoir si je dois afficher ou non les commantaires. (0=aucun commentaire, 1= Jcomments et 2=Jom Comments)
FLEXIcontent permet d’intégrer la gestion des commentaires de deux composants JComments(recommandé) et Jom Comment.
Les paramètres donc concernant les commentaires sont directement gérés via le composant qui est intégré.
Allez plus loin …
A travers les chapitres suivant, je vous ai présenté comment afficher les champs de manière basique, il se peut que parfois vous ayez besoin d’allez un peu plus loin dans votre template. Voici donc les principales informations que vous pourrez exploiter dans votre template.
Item
Cet objet regroupe toutes les informations concernant directement votre contenu
A appeler de cette manière $this->item-> « propriété »
|
id |
Identifiant dans la base donnée |
|
title |
Titre |
|
alias |
Alias |
|
introtext |
Texte d’introduction (correspond au champ description qu’il est préférable d’utiliser) |
|
fulltext |
Texte complet (correspond au champ description qu’il est préférable d’utiliser) |
|
state |
Etat de publication (1 : publié, 0 : non publié,-1 : archivé,-2 : supprimé, -3 : en attente d’approbation,-4 : brouillon,-5 : en cours) |
|
sectionid |
Section |
|
catid |
Catégorie principale |
|
created |
Date de création |
|
created_by |
Identifiant de l’auteur |
|
created_by_alias |
Alias de l’auteur |
|
modified |
Dernière date de modification |
|
modified_by |
Identifiant du dernier auteur ayant modifié l’article |
|
publish_up |
Date de début de publication |
|
publish_down |
Date de fin de publication |
|
version |
Numéro de la version |
|
ordering |
Numéro indiquant l’ordre de classement |
|
metakey |
Mots clés des métas données |
|
metadesc |
Description des métas données |
|
metadata |
Meta données robots et auteur |
|
access |
Niveau d’accés (0 :public,1:privé, 2 :spécial) |
|
hits |
Nombre de visites |
|
idem_id |
Identifiant du contenu |
|
type_id |
Identifiant du type de contenu |
|
language |
Langage (fr-FR, en-US…) |
|
search_index |
Tout le texte qui est indéxé pour la recherche |
|
cataccess |
Niveau d’accès de la catégorie (0 :public,1:privé, 2 :spécial) |
|
catpublished |
Indique si la catégorie est publiée ou non |
|
author |
Nom de l’auteur |
|
usertype |
Nom du groupe de l’utilisateur |
|
typename |
Libellé du type de contenu |
|
creatoremail |
Email de du créateur originel |
|
creator |
Nom du créateur |
|
modifier |
Nom du dernier auteur ayant fait une modification |
|
text |
Texte (du champ description) qui doit être affiché dans le template (introduction ou texte complet) |
|
cats |
Tableau listant des catégories associés (cats[x]->id , cats[x]->title…) |
|
fields |
Voir le détail dans le chapitre suivant item->fields |
|
readmore_link |
Chemin du lien pour le « lire la suite » |
|
positions |
Voir le détail dans le chapitre suivant item->positions |
|
fieldvalues |
Liste la valeur des champs dans un tableau (fieldvalues[id_du_champs][x]) |
|
favs |
Nombre d’utilisateur qui ont ajouté le contenu dans leur favori |
|
fav |
Indique si oui ou non ce contenu peut être placé dans les favoris |
|
vote |
Objet avec les valeurs suivantes : rating_sum (valeur moyenne des votes), rating_count (nombre de votes), lastip (dernière adresse ip ayant voté). |
item->fields ou fields
Vous pouvez par ce biais obtenir toutes les informations sur les champs de votre template, que ce soit pour les champs du noyau ( title, texte, created,created_by,modified,modified_by,hits,document_type,version,state,voting,favourites,categories,tags) mais également tous vos champs personnalisés (tel que vous les avez nommé) qui sont associés au type en cours d’affichage.
A appeler de cette manière $this->item->fields[‘nom du champ’] -> « propriété » ou bien manière $this->fields[‘nom du champ’] -> « propriété »
|
id |
Identifiant du champ |
|
field_type |
Type de champ |
|
name |
Nom du champ |
|
label |
Etiquette du champ |
|
description |
Description du champ |
|
isfilter |
Ce champ est il un filtre ? |
|
iscore |
|
|
isearch |
La valeur du champ sont elles utilisées pour la recherche |
|
isadvsearch |
Le champ est il utilisé pour la recherche avancée ? |
|
published |
Publié ou non |
|
access |
Niveau d’accès (0 : public, 1:privé, 2 :spécial) |
|
ordering |
Numéro indiquant l’ordre de classement |
|
value |
Tableau des valeurs saisie du champ |
|
display |
Affichage de la valeur formaté du champ. |
Chaque champ possède également des paramètres que l’on peut récupérer cette manière (objet JParameter):
$this->item->fields[‘nom du champ’] ->parameters->get(‘valeur du paramètre’)
Voici les paramètres principaux que l’on peut retrouver, tous ne sont pas utilisés selon le type de champ.
|
display_label |
Affichage de l’étiquette |
|
remove_space |
Supprimer les espaces |
|
pretext |
Préfixe |
|
posttext |
Suffixe |
|
default_value |
Valeur par défaut |
|
allow_multiple |
Autoriser les valeurs multiples |
|
max_values |
Maximum de valeur |
|
size |
Taille du champ |
|
separatorf |
Séparateur des valeurs pour le frontend |
|
opentag |
Balise précédent une valeur |
|
closetag |
Balise succédant une valeur |
|
date_format |
Format d’affichage standard de la date |
|
custom_date |
Format d’affichage personnalisé de la date |
|
rows |
Nombre de lignes dans un textarea |
|
cols |
Nombre de colones dans un textarea |
|
use_html |
L’éditeur HTML est il activé ? |
item->positions
Comme nous l’avons vu précédement vous pouvez parcourir toutes les positions d’un template afin d’afficher vos champs. Voici le détail des informations que vous pourrez exploiter.
A appeler de cette manière $this->item->positions[‘nom de la position][‘nom du champ’] -> « propriété »
|
id |
Identifiant du champ |
|
name |
Nom du champ |
|
label |
Etiquette du champ |
|
display |
Valeur formatée du champ |
user
Cet objet de type JUser vous permet d’avoir les informations sur l’utilisateur actuellement connecté
A appeler de cette manière $this->user ->« propriété »
|
id |
Numéro d’identifiant de l’utilisateur |
|
name |
Nom de l’utilisateur |
|
username |
Login de l’utilisateur |
|
|
Adresse email de l’utilisateur |
|
usertype |
Type de l’utilisateur |
|
registerDate |
Date d’enregistrement |
|
lastvisitDate |
Date de la dernière connexion |
params
C’est un objet JParameter qui va nous permettre de retrouver les paramètres liés au contenu.
$this->params->get(‘valeur du paramètre’)
|
flexi_section |
Section associé à FLEXIcontent |
|
comments |
Activer les commentaires (0=aucun commentaire, 1= Jcomments et 2=Jom Comments) |
|
support_url |
Url du support |
|
flexi_fish |
Activer le support Joomfish |
|
filtercat |
Filtrer les vues catégories |
|
filtertag |
Filtrer les vues tags |
|
use_versioning |
Activer le versioning |
|
nr_versions |
Versions conservées |
|
show_title |
Titre des contenus |
|
link_title |
Titre cliquables |
|
show_readmore |
Lien Lire la suite… |
|
show_icons |
Icones |
|
show_pdf_icon |
Icone PDF |
|
show_print_icon |
Icone imprimer |
|
show_email_icon |
Icone email |
|
limit |
éléments par page |
|
catlimit |
Limite des listes (catégories) |
|
upload_extensions |
Extensions autorisées (Types de fichiers) |
|
upload_maxsize |
Taille maximale |
|
file_path |
Chemin vers le répertoire sécurisé |
|
media_path |
Chemin vers le répertoire médias |
|
restrict_uploads |
Restreindre les uploads |
|
check_mime |
Vérifier les types MIME |
|
image_extensions |
Extensions d’images autorisées (Types de fichiers) |
|
ignore_extensions |
Extensions ignorées |
|
upload_mime |
Types MIME autorisés |
|
enable_flash |
Activer l’upload Flash |
|
feed_summary |
Pour chaque flux RSS |
|
advcache |
Cache avancé |
|
advcache_time |
Durée du cache |
|
advcache_guest |
Visiteurs seulement |
|
disablecss |
Désactiver les CSS |
|
item_depth |
Niveau de l’élément |
|
add_item_pathway |
Ajouter au chemin |
|
show_page_title |
Titre de la page |
|
menu_image |
Image du menu |
|
secure |
SSL actif |
|
page_title |
Montrer le titre de la page |
|
page_description |
Meta description |
menu_params
C’est un objet JParameter qui va nous permettre de retrouver les paramètres associés au menu du contenu que l’on doit afficher.
$this->menu_params->get(‘valeur du paramètre’)
|
item_depth |
Niveau de l’élément |
|
add_item_pathway |
Ajouter au chemin |
|
page_title |
Titre de la page |
|
show_page_title |
Montrer le titre de la page |
|
pageclass_sfx |
Suffixe de la classe CSS |
|
menu_image |
Image du menu |
|
secure |
SSL actif |
La class flexicontent_html
Cette class de FLEXIcontent nous offre quelques fonctions utiles pour nos templates.
Function striptagsandcut
Cette fonction nous permet de supprimer les balises html d’un texte et de le couper proprement après un certain nombre de caractères.
// Cet exemple va formatter et tronquer $mon_texte après 100 caractères echo flexicontent_html:: striptagsandcut ( $mon_texte,100 );
Function extractimagesrc
Cette fonction nous permet de générer un tag image à partir d’un champ de type image.
// Cet exemple va formatter et tronquer $mon_texte après 100 caractères echo flexicontent_html:: extractimagesrc ( $this->fields[‘mon_champ_image’]);
Function printbutton
Cette fonction affiche le bouton et le lien pour imprimer le contenu actif
// Cet exemple va afficher l’icone Imprimer dans notre contenu echo flexicontent_html::printbutton( $this->print_link, $this->params );
Function mailbutton
Cette fonction affiche le bouton et le lien pour recommander le contenu actif par mail
// Cet exemple va afficher l’icone Recommander par mail dans notre contenu echo flexicontent_html::mailbutton( 'items', $this->params, null , $this->item->slug );
Function pdfbutton
Cette fonction affiche le bouton et le lien pour générer le contenu actif en pdf
// Cet exemple va afficher l’icone PDF dans notre contenu echo flexicontent_html::pdfbutton( $this->item, $this->params );
Voilà cette 4ème partie est terminée, la prochaine fois j’aborderais les templates de catégorie. Une fois de plus n’hésitez pas à faire vos remarques ou bien à poser vos questions si vous n’avez pas compris quelque chose.
Merci aussi
Au moins ca a le mérite d’être clair.






Donc enfaite, il faut quand même avoir des connaissance en php...
Le 24/02/2010 à 09:18 , Emmanuel Danan a dit:
Whaou, quelle synthèse
Un seul mot : BRAVO!!!
Merci à toi pour cette nouvelle contribution.
Manu.