Alternative au portefolio

Ceci est une « contribution pédagogique », qui montre par l’exemple comment développer une nouvelle fonctionnalité pour 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(
            '<span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+KFxkKylcLlwuKFxkKz8pPC9jb2RlPg=="></span>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,…

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 :)

    Répondre à ce 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

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom