Follow flexicontent.org
   
Text Size

Members login

Recommend Print

Content templates creation

  • Published by
    Emmanuel Danan
  • Last modified
    11 November 2009
  • Voting
    (112 votes)
  • Favourites
    Add to favourites (16 users)
  • Concerns
    Component
  • Version
    beta3
  • Up to date
    Yes
  • Profile concerned
    Webdesigner, Developer
NOTE: This tutorial is not up to date anymore for the beta4 version. It will be rewritten very soon

FLEXIcontent dispose d'un système de template très souple qui permet de concevoir des templates personnalisés en toute simplicité. Pour concevoir ses propres templates il est cependant nécessaire de connaître un minimum le XHTML et le CSS. Des connaissances sommaires en PHP (conditions et boucles) vous permettrons de donner une dimension supplémentaire à vos création, mais une simple observation du code des templates existants devrait vous donner les éléments suffisants pour débuter.

1.- La structure des templates :

a - Template d'items : contenu unique

On les trouve dans le répertoire items et la structure est la suivante:

components
|_ com_flexicontent
|_ views
|_ items
|_ tmpl
|_ montemplate.php
|_ montemplate.png (facultatif – image de description)
|_ montemplate.xml

Pour créer un nouveau template il suffit de dupliquer ces deux (ou trois) fichiers et de les renommer. Evitez les underscores (réservés aux sous-templates) et les espaces dans les noms !!!

NOTES (pour les développeurs/designers)Vous avez dans les templates d'items deux objets à votre disposition:
• $this->item (contient tous les champs de la table content)
• $this->fields (contient tous les fields de l'item en cours).
Ainsi pour obtenir les propriétés d'un champ particulier il suffit de faire $this->fields->nom_du_champ
Vous aurez sans doute noté aussi que cela signifie que les champs du noyau peuvent s'appeler de deux façons. Si on prend par exemple le titre du contenu on peut utiliser :
• $this->item->title ou
• $this->fields->title->display

b - Template de category : tous les contenus d'une catégorie

On les trouve dans le répertoire category et la structure est la suivante:

components
|_ com_flexicontent
|_ views
|_ category
|_ tmpl
|_ blog_alpha.php (facultatif - index alphabétique)
|_ blog_category.php (facultatif - présentation de la catégorie)
|_ blog_items.php (facultatif - liste des contenus)
|_ blog_subcategories.php (facultatif - liste des sous catégories)
|_ blog.php
|_ blog.png (facultatif – image de description)
|_ blog.xml

Pour créer un nouveau template il suffit de dupliquer les deux fichiers obligatoires (php et xml) et de les renommer.

Vous pouvez noter ici l'utilisation des sous templates. Ils sont facultatifs mais cela permet de mieux organiser ses informations.

NOTES (pour les développeurs/designers)Vous avez dans les templates de categories un objet à votre disposition:
• $this->items (contient tous les items de l'affichage en cours)
Ainsi pour obtenir les propriétés d'un champ particulier il suffit de faire $this->items[$n]->fields->nom_du_champ.

2.- Les templates génériques : utilisation des groupes/positions de champs

Dans ce type de templates, on détermine des positions (comme pour les templates Joomla). On affecte ensuite les champs à une ou plusieurs positions. C'est le cas par exemple du template « default » de la vue « items »

Voici la partie à ajouter au fichier montemplate.xml pour définir un groupe.

<?xml version="1.0" encoding="utf-8"?>
<metadata>
<!-- … ici recopiez le code que vous trouvez dans default.xml … -->
<fieldgroups>
<group>mon_groupe</group>
<!-- … etc … -->
</fieldgroups>
</metadata>

Voici un exemple de code de montemplate.php pour l'affichage d'un groupe.

 <?php
defined( '_JEXEC' ) or die( 'Restricted access' );

// on défini d'abord le nom du template pour pouvoir y faire appel plus simplement par la suite
// le nom est composé du nom de la vue (ici items) et du nom du template (ici montemplate)

$tmpl = '.items.montemplate';

// nous allons créer ici un groupe que nous appelons mon_groupe avec le marquage suivant :
// <div class="ma_classe_pour_mon_groupe">
// <span class="element nom_du_champ">
// <span class="etiquette nom_du_champ">L'étiquette du champ</span>
// <span class="champ nom_du_champ">La valeur du champ</span>
// </span>
// ...
// on répète le bloc élément autant de fois qu'il y a de champs
// dans la position "mon_groupe
// ...
// </div>

if ($this->fields) : // étape A : on vérifie tout d'adord qu'il y a des champs :-)
$i = 0;

// on vérifie ensuite qu'il y a des champs affectés au groupe "mon_groupe"

foreach ($this->fields as $field) :
if (in_array('mon_groupe'.$tmpl, $field->positions)) :
$i++;
endif;
endforeach;
if ($i > 0) : // étape B : si on a bien des champs

// on commence le marquage html du conteneur
?>
<div class="ma_classe_pour_mon_groupe">
<?php
foreach ($this->fields as $field) : // étape 1 : pour chaque champ
if (in_array('mon_groupe'.$tmpl, $field->positions)) : // étape 2 : si le champ est assigné à "mon_groupe"
if (!empty($field->value)) : // étape 3 : si le champ a une valeur

// on commence le marquage html du champ
?>
<span class="element nom_du_champ">
<?php
if ($field->parameters->get('display_label')) : // étape 4 : si on a choisi d'afficher l'étiquette

// on affiche l'étiquette
?>
<span class="etiquette "><?php echo $field->label; ?></span>
<?php
endif; // fin de l'étape 4

// on affiche le champ lui-même
?>
<span class="champ <?php echo $field->name; ?>"><?php echo $field->display; ?></span>
</span>
<?php
endif; // fin de l'étape 3
endif; // fin de l'étape 2
endforeach; // fin de l'étape 1
?>
</div>
<?php
endif; // fin de l'étape B
endif; // fin de l'étape A
?>

3.- Les templates "à la demande" : appel des champs individuellement

Ces templates sont très simple à réaliser à condition de connaitre le HTML et le CSS. On peut appeler n'importe quel champ individuellement en utilisant le code suivant :

<?php echo $this->fields->nom_du_champ->display; ?>

Voici un exemple de code pour un template de type item montemplate.php

<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
?>
<div class=flexicontent>
<h2>
<?php echo $this->item->title; ?>
</h2>
<div class=content>
<?php echo $this->fields->description->display; ?>
</div>
<div class=mon_champ>
<?php echo $this->fields->mon_champ->display; ?>
</div>
</div>

C'est ce qu'on appelle un exemple minimaliste, mais ça suffit pour expliquer la logique ;-)

4.- Template overriding et CSS overriding

Etant donné que FLEXIcontent utilise le pattern MVC tous les templates de vues sont overridable (c'est à dire remplaçables). Vous trouverez la procédure en effectuant une recherche sur les forums.

Avec FLEXIcontent le fichier CSS est lui aussi overridable. Pour étendre (ou remplacer) les propriétés CSS existantes il suffit de créer un fichier nommé flexicontent.css dans le répertoire css de votre template. Ses propriétés ont priorité sur le fichier CSS d'origine du composant!!!


Comments  

 
+19 #1 Manu 2009-10-02 07:11
N'hésitez à apporter vos critiques et/ou modifications. Elles seront prises en compte pour améliorer le contenu de ce tutoriel.
Quote
 
 
+7 #2 2009-10-02 14:32
Salut Manu,

Je dois dire que je suis assez impressionné avec ce que tu est en train d'accomplir, ça parait très promoteur.
Est-ce qu'il serait possible de disponibiliser quelques templates ou quelques démos pour voir de résultat de tout ça en action?
Quote
 
 
+10 #3 Emmanuel Danan 2009-10-03 12:44
Merci pour le compliment.
Le seul exemple que je puisse te proposer actuellement est ce site (qui utilise volontairement les tempates par défaut). Mes amis thaïlandais vont bientôt commencer à travailler sur un tout nouveau moteur de template ainsi qu'un système d'import/export de kit de contenus complets (type/champs/templates).
Dès que possible, je construirai un site de démo digne de ce nom.
Quote
 
 
+8 #4 Flavien Hamon 2009-10-03 15:31
Tuto très clair ! Mais je parlerais également des autres possibilités présente dans les templates de base du composant. Comme dans le template image avec les contentpanels.

J'ai fait mon premier template évolué d'article (le premier j'avais juste repris le default et modifier le css, je le posterai quand j'aurai finis le css.
Quote
 
 
+3 #5 2009-10-18 14:41
Super boulo !
Vraiement orienté utilisateur... en plus on commence a avoir de la doc ;0)

Suggestion : une petite vidéo ca serais super pour prendre en main l'outil en très peu de temps.

Bravo !
Poolg
Quote
 
 
+4 #6 2009-11-06 16:12
Super boulo !
Quote
 
 
+7 #7 denis pyr 2009-11-19 20:01
Is there a brave translator?
Quote
 
 
+4 #8 denis pyr 2009-11-19 20:04
Quoting denis pyr:
Is there a brave translator?

oops! I just saw in big red letters that it is obsolete. Sorry
Quote
 
 
+5 #9 2009-12-08 16:58
bonjours et superb boulo
attention de penser a ceux qui demarre et ni connaisse encore rien en creant les tutos le langage n'est pas le même
encore une fois chapeau et j'ai encore du boulot pour tout comprendre et utiliser ce produit en plaine capaciter
merci
Quote
 
 
+8 #10 Xavier Reiss 2009-12-12 15:26
Super boulot... on attend le nouveau tuto avec impatience.
Ne pourrais-tu pas Manu, faire une petite vidéo sur l'utilisation de flexicontent, ainsi que sur la création de template... ça serait chouette et en plus ça propulserait bien ton composant.
Quote
 

Add comment


Security code
Refresh

Community

poolp : Online 1309 mins fesghel : Online 2154 mins m4d3l : Online 2891 mins
Members Online: 3

Latest comments

Latest Posts

Posted by m4d3l - 10/09/2010 22:38
Posted by poolp - 10/09/2010 20:41
Posted by daled - 10/09/2010 20:16
Posted by orchid1 - 10/09/2010 20:09
Posted by fred - 10/09/2010 18:56
Posted by ThatComputerDude - 10/09/2010 17:32

Tag Cloud