YACS Le livre de Yacs Guide de développement

PrécédentSuivantIndex

Créer un nouveau layout d'article

Pour personnaliser la manière dont les articles sont listés dans une section, il suffit de créer un nouveau layout d'article.

Démonstration en prenant l'exemple de la création d'un layout intitulé compact2 . Ce nouveau layout doit lister les articles de manière compacte, en affichant leur titre et leur introduction.

Dériver un layout existant

Le plus simple est de partir d'un layout existant et de le modifier pour obtenir le résultat recherché.

Le layout compact est très proche du résultat recherché. Voici comment il affiche la liste des articles d'une section :

Pour dériver ce layout, commencer par dupliquer le fichier layout_articles_as_compact.php situé dans /articles/ en le renommant en layout_articles_as_compact2 .php .

Editer ce nouveau fichier. Dans la boucle

while($item =&ampSQL::fetch($result)) { ...

, ajouter ou modifier le code pour obtenir l'effet désiré.

Dans notre exemple, on ajoute la récupération et le formatage de l'introduction de l'article :

// prepare introductory text to add
 
$intro '';
 if(
is_object($overlay))
   
$intro Codes::beautify_introduction($overlay->get_text('introduction'$item));
 if(
$item['introduction'])
   
$intro .= Codes::beautify_introduction($item['introduction']);
 if (
$intro)
   
//on met l'introduction entre parenthese, apres un premier espace
   
$intro ' ('.$intro.')';

Et pour afficher le titre suivi de son introduction, on remplace le $title par $title.$intro dans la ligne :

$items[$url] = array($prefixSkin::strip($title30), $suffix'basic'NULL$hover);

Pour obtenir :

$items[$url] = array($prefixSkin::strip($title.$intro30), $suffix'basic'NULL$hover);

Enregistrer le fichier.

Utiliser le nouveau layout

Se rendre sur la page de la section concernée. Modifier le type de mise en page des pages en indiquant d'utiliser la mise en page personnalisée compact2 :

Enregistrer et noter le changement de mise en page dans la section (apparition des introductions derrière les titres) :

Encore un détail...

Avez vous remarqué que la présentation du résultat était du type decorated et non compact ?

L'explication est à rechercher dans le fichier /section/view.php , lors du traitement de la liste d'articles envoyée par le layout.

// items in the middle
 
if(is_array($items) && isset($item['articles_layout']) && ($item['articles_layout'] == 'compact'))
   
$box['text'] .= Skin::build_list($items'compact');
 elseif(
is_array($items))
   
$box['text'] .= Skin::build_list($items'decorated');
 elseif(
is_string($items))
   
$box['text'] .= $items;

Si le layout renvoi un tableau, comme c'est le cas de compact justement : on affiche les articles avec une liste "compact" que si le layout s'appelle "compact" sinon c'est une liste "decorated" (alors que si le layout envoie une chaine, il n'y a pas de problème).

Pour contourner cela, il faut modifier la toute fin de notre layout. A la place de :

return $items;

Mettre :

$result Skin::build_list($items'compact');    
   return 
$result;

Cette fois-ci, on obtient bien le résultat attendu :

PrécédentSuivantIndex