NetAssoBlog

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

Tutoriel – Template FLEXIcontent – Part4 : Le template d’un contenu

février23

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.

stadium toulouseJe 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

email

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.





















i. item->positions

















Catégorie: Web

Commentaires

Le 24/02/2010 à 09:18 , Emmanuel Danan a dit:

Emmanuel Danan

Whaou, quelle synthèse :) Un seul mot : BRAVO!!!
Merci à toi pour cette nouvelle contribution.
Manu.

Le 24/02/2010 à 09:31 , Maxime a dit:

maxime

Ce tutoriel n’existerait pas sans ton composant ;) Merci aussi

Le 24/02/2010 à 09:38 , Micker a dit:

Micker

…. je suis sans voix !!
bravo

Le 01/03/2010 à 15:43 , Helio a dit:

Helio

Un grand MERCI Maxime :)

Avec la superbe série de tutoriels que tu nous a livré et avec les nouvelles qu’on a eu de la part d’Emmanuel et de l’équipe derrière Flexicontent et Flexiaccess faisant état de la sortie éminente d’une version stable de ses deux composants, je pense qu’on a ce qu’il faut pour commencer à produire des résultats très prometteurs avec Flexicontent.

Il me semble qu’avec la flexibilité de Flexicontent la seule limite semble être notre imagination :)

Encore une fois un grand merci à toi Maxime pour ces beaux tutoriels et un autre grand merci à l’équipe de Flexicontent.

Le 01/03/2010 à 19:32 , Eric a dit:

Eric

Merci pour ce tuto, malheureusement, je n’arrive pas à appeler un champ directement, ça ne veut pas marcher !

Je suis la démarche expliquée, et en résultat, je n’ai rien qui s’affiche et deux notices :
Notice: Undefined index:
Notice: Trying to get property of non-object

Et rien :-(

Est-ce que vous avez une idée d’où peut venir le problème ?? Merci d’avance,

Eric

Le 03/03/2010 à 09:58 , Maxime a dit:

maxime

Eric, peux tu m’indiquer le code que tu as écrit exactement afin que je vois l’origine de ton problème ?

Le 04/03/2010 à 16:39 , Nathaniel a dit:

Nathaniel

Je suis plutôt débutant en webdesign, cependant j’ai réussi à peu près à faire tourner flexicontent qui à mon avis est le meilleur outil possible actuellement pour créer un catalogue lorsque le cahier des charges est flou.

Lorsque j’appelle les fonctions printbutton et pdfbutton j’ai un text en anglais tout moche et pas une image. Je ne comprend pas pourquoi.

Je suis surement peut-être pas doué mais en tout cas merci pour ces tuto et ce fantastique outil, il permet d’atteindre un niveau supplémentaire dans la gestion de contenu.

Le 04/03/2010 à 17:09 , Maxime a dit:

maxime

FLEXIcontent vérifie si les images sont présentes dans le répertoire ‘images/M_images/’, si elles ne sont pas présentes alors il affiche du texte.
Les images doivent être nommées respectivement :
printButton.png
emailButton.png
pdf_button.png

Tu as surement dû supprimer ces images de tes médias…

Le 05/03/2010 à 12:57 , Eric a dit:

Eric

> Maxime : merci de ta réponse. J’ai réinstallé le tout et remis le même code, et cette fois ça marche. J’ai du supprimer quelque chose la première fois qui empêchait le bon fonctionnement. Merci encore pour ce tutoriel !

Le 15/03/2010 à 15:31 , Nathaniel a dit:

Nathaniel

Merci pour la réponse. Quand j’utilise l’outil PDF j’ai un vieux message d’erreur dans le corps du pdf:

Warning: Invalid argument supplied for foreach() in /home/xxxxxxx/public_html/joomla/components/com_flexicontent/views/items/view.pdf.php
on line63:

foreach ($fields as $field) {

C’est un bug de flexicontent ça non?

Le 16/03/2010 à 15:48 , Maxime a dit:

maxime

Oui en effet j’ai déjà rencontré également ce problème. cela doit venir d’un type de champs mal géré pour la génération du pdf… bref je n’ai pas encore poussé mes recherches le mieux est à mon avis que tu poses la question (ou que tu recherches) dans le forum de FLEXIcontent. http://www.flexicontent.org/forum/

Le 19/03/2010 à 01:04 , Karim a dit:

Karim

bonjour;
j’ai suivis depuis le tutoriel 1 et merci pour tout ce que vous fait.
mais je bloque sur le 3
quand vous dite :

1- revoir l’entête de mon item.php (j’ai laisser les même nom de fichier et placer dans un nouveau répertoire) est ce que le nouveau répertoire et le nom du temlate que je doit mettre ?

2- quand je place <div id="stade_contenu" class="stade_contenu itemitem->id; ?> typeitem->type_id; ?> »> (rien ne s’affiche)

3- quand je met la boucle , il m’affiche une colonne et quand je copie coller la même boucle pour les autre champ, il reste uniquement le premier champ afficher.

4- quand j’enlève la ligne (<div id="stade_contenu" class="stade_contenu itemitem->id; ?> typeitem->type_id; ?> ») il affiche toujours un seul champ

je crois que je n’ai pas bien compris ce qu’il faut mettre.
puije vous envoyer ce que j’ai fait en MP ?

Salutations

Le 19/03/2010 à 17:13 , karim a dit:

karim

bonjour et merci pour le tutoriel
au début je n’avais pas capter précisément ce qu’il fallait faire, mais quand j’ai compris qu’il fallait crée un fichier de Class, chose que je ne peut savoir tout seul car je suis un débutant, tout a marché.
pour Item, j’ai pu personnaliser mon affichage presque comme je le voulez ! (il me faut des cours de CSS); mais quand je vouler attaquer le template pour les catégorie, la sa a fait des dégâts.

je voudrais savoir quel sont les fichier concerner et, et il possible d’avoir le même raisonnement pour les catégorie que pour les Item ?
ps: a quand le tuto des catégories?

Merci et salutations

Le 22/03/2010 à 20:13 , Maxime a dit:

maxime

Me revoilà dans la place, après notre petite excursion au JoomlaDay.
Pour tout te dire je n’ai pas réellement saisi ton problème Karim. Il faudrait que tu m’expliques exactement ce que tu veux faire et là où tu bloques.
Concernant la dernière partie (tutoriel du template de catégorie), elle est en cours de rédaction. J’avoue que mon emploi du temps est assez chargé en ce moment mais j’espère bien pouvoir la publier d’ici le week end prochain.

Le 22/03/2010 à 20:17 , Maxime a dit:

maxime

Je voulais revenir également à la question de Nathaniel car j’ai eu la réponse au JoomlaDay ce week end. Le PDF ça marche pas :p Au moins ca a le mérite d’être clair.
Des solutions professionnelles exsitent mais il faut être prêt à lâcher 2000$ pour une licence…

Le 14/04/2010 à 15:41 , erix a dit:

erix

Salut,

tout d’abord merci d’être venu au JoomlaDay, ton résumé sur ce blog fut un de ce qui m’ont le plus fait plaisir à lire, ensuite je voulais te remercier chaleureusement pour tes pages tuto qui sont vraiment une roue de secours pour tout ceux qui cherchent à personnaliser un peu (beaucoup ?) leur flexicontent.

C’est clair, détaillé, très pédagogique, et dans une qualité rédactionnelle irréprochable. Tu l’auras compris cela fait un moment que j’ai pris l’habitude de renvoyer vers tes pages depuis le forum joomla.fr (et que je viens piocher dedans moi aussi ).

Bonne continuation à toi !

Le 05/07/2010 à 12:40 , Gael a dit:

Gael

Merci pour cette doc que je n’avais pas réussi à trouver sur le site de flexicontent.

J’ai tout de même une question : j’ai besoin d’exploiter les valeurs « brutes », non mises en forme, d’un de mes champ.
Mais avec l’attribut value, je me retrouve avec plusieurs valeurs à la fois dans value[0], en forme de texte séparé par des virgules.
Est-ce qu’une fonction est déjà implémentée dans Flexicontent pour récupérer la valeur qui m’intéresse (en l’occurence, par exemple, l’url d’un weblink) ?

Le 05/07/2010 à 17:31 , Maxime a dit:

maxime

Je pense comprendre ton problème, il te faut utiliser la fonction php : unserialize($str);
Plus d’infos ici http://php.net/manual/fr/function.unserialize.php

Le 15/07/2010 à 09:28 , Jay a dit:

Jay

Hello. waiting for your template tutorials.!
thanks so far for the hard work.

Le 15/07/2010 à 09:33 , Maxime a dit:

maxime

Yes i know, i have to do it… i just miss the time for the moment… but one day i swear ;)

Le 28/07/2010 à 09:26 , Gaël Boyenval a dit:

Gaël  Boyenval

Super tutos… vraiment bravo, la meilleur source à se jour que j’ai peu trouver sur le web pour FC !
J’attend avec grande impatience la partie 5 !! À quand ?

Le 28/07/2010 à 11:18 , Maxime a dit:

maxime

Merci, la partie 5 est dans un coin qui faut que je dépoussière. Je suis actuellement sur d’autres projets. Mais un jour promis ça arrivera, je ne m’avance plus en terme de délai maintenant :war:

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)