Alternative au portefolio

This is an « educational contribution » which shows, with concrete example, how to develop a new functionality for SPIP.

Pour placer une galerie d’images, un diaporama, il existe plusieurs contraintes et façons de faire :
L’une d’elle consiste à placer les images à mettre dans le diaporama ou la galerie en portefolio de façon à pouvoir les récupérer facilement dans une boucle. Toutes les images de l’article ont vocation à être insérées dans la galerie ou le diaporama.

Inconvénients :
Le traitement se fait dans le squelette, donc oblige à modifier ce dernier pour ajouter ou modifier les fonctionnalités.
Le portefolio est bloqué pour un usage donné.
Pas de possibilité de mixte (plusieurs galeries dans la même page, galerie et diaporama,…)

Une autre manière de faire est de déclarer et utiliser un modèle : c’est ce que cet article présente.

1. Utilisation d’un modèle.

Avantages : souplesse de mise en œuvre (pas besoin de toucher au squelettes), souplesse de l’insertion dans un article ou autre, personnalisation possible des tailles de vignettes ou des vitesses de diaporama par exemple, préservation du portefolio pour d’autres tâches.

Inconvénients : peut s’avérer complexe pour certains rédacteurs.

Voici comment faire et utiliser ce modèle...

2. Passer en paramètre les images à afficher.

Il semble naturel d’avoir une transmission par un paramètre du type images= ce qui donne pour l’appel du modèle <ma_galerie|images=45,89,23,56> comme code minimal.

Il arrive fréquemment que les id des documents images soient consécutives (c’est le cas si on a inclus les images par la procédure de ftp dans /tmp/upload/, ou bien par l’intermédiaire d’un zip). On a alors <ma_galerie|images=45,46,47,48,49>, ce qui peut s’avérer fastidieux. D’où l’idée d’introduire une notation du type <ma_galerie|images=45..49> pour désigner des images d’id successives, mais qui accepterait également <ma_galerie|images=45,89..93,52> une notation mixte.

Pour récupérer les documents il suffit de placer leurs id dans un tableau qui servira de critère avec l’opérateur IN à une boucle portant sur ceux-ci.

C’est ce qu’assurent les deux fonctions suivantes servant à traiter la chaîne de données par une expression régulière et à fabriquer une chaine de nombres successifs à partir de la notation xx..yy

function images_point_point($match) {
	$str = '';
	for ($i = $match[1]; $i <= $match[2]; $i++){
		$str .= $i.',';
	}
	$str = substr($str, 0, -1);
	return $str;
}

function images_vers_tableau ($texte) {
	$texte = str_replace(' ', '', $texte);
	$texte = preg_replace_callback(
            '`(\d+)\.\.(\d+?)`U',
            'images_point_point',
            $texte);
	$tableau = array();
	$tableau = explode (',', $texte);
	return $tableau;
}

Le modèle ma_galerie.html destiné à l’affichage de la galerie photos ou du diaporama commencera alors par traiter la variable “images” passée, pour la transformer en tableau assimilable par la bouche.

#SET{les_images,(#ENV**{images}|images_vers_tableau)}

<BOUCLE_galerie(DOCUMENTS) {id_document IN #GET{les_images}} {extension IN jpg,png,gif}{tous}>
	mon code d'affichage
</BOUCLE_galerie>

Les images sont donc simplement jointes à l’article, voire à un autre qui n’est pas forcément publié et en ligne, voire à aucun si on utilise le plugin médiathèque.

Exemple de mise en œuvre dans deux plugins, à venir. Mais le principe peut être transposé pour d’autres utilisation : affichage de plusieurs flux syndiqués, d’une liste de sites,…

updated on 2 October 2019

Discussion

2 discussions

  • 2

    Bonjour Domiw,

    Merci pour cette contribution intéressante à implémenter dans les futurs plugins :-)

    @+

    • Merci pour les commentaires (le tiens et celui de François-Daniel).

      Je pense que pour aller un peu plus loin, on pourrait envisager la notion d’album (au sens des catalogueurs de photos type iphoto ou autres). Une “liste de lecture” d’images associées à des articles différents ou pas, une image pouvant appartenir à plusieurs albums. Plutôt alors que de passer les identifiants des images à une galerie photo ou à un diaporama, on désignerai l’album (ou les albums) à afficher.
      Voilà une idée de plugin.

    • La médiathèque permet l’accrochage d’un document à plusieurs articles. Les mot clé partout peuvent cataloguer un groupe. Y a tout :)

    Reply to this message

  • Bonjour domiw,

    Merci pour cette contribution pédagogique importante qui tombe bien dans une réflexion qui m’interpelle depuis un certain temps sur ce thème : serait-il possible de créer un plugin “générique” standardisé permettant de créer “aisément” de nouveaux sliders d’images.

    Ta contribution met bien en évidence les divers aspects de la problématique et pose les bases d’une approche rationnelle.

    Je me réjouis de te lire dans “l’Exemple de mise en œuvre dans deux plugins, à venir” que tu prépares.

    Les sliders (+ menu) sont en effet en vogue dans les CMS à cause de leur valeur ajoutée en terme d’esthétique, d’information et de navigation.

    Parmi les réalisations récentes j’ai par exemple beaucoup apprécié les sliders de ngombe (d’autres sont aussi très impressionnantes) :

    et on ne peut qu’espérer que de nouveaux sliders vont être créés.

    Ton article devrait y contribuer !

    Cordialement

    FDG

    Reply to this message

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom