SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

288 Plugins, 197 contribs sur SPIP-Zone, 237 visiteurs en ce moment

Accueil > Affichage multimédia > Images > Archives Image, Galerie > Portrait ou Paysage ?

Portrait ou Paysage ?

1er avril 2005 – par mortimer – 12 commentaires

Toutes les versions de cet article : [عربي] [Español] [français]

5 votes

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Comment sélectionner les images d’une boucle DOCUMENTS en fonction de leur orientation.

Un exemple de nouvelles fonctionnalités de SPIP 1.8

Dans une boucle DOCUMENTS qui sert à afficher des images (par exemple pour une galerie), on peut vouloir sélectionner les images par leur orientation.

En fonction de la mise en page que l’on recherche, cela peut être important de savoir si l’image qu’on va afficher sera en portrait [1] ou en paysage [2].

Voici quelques solutions utilisant les nouvelles fonctionnalités de SPIP 1.8.

Version 0.2.0
Pour les utilisateurs de la version 1.9, vous pouvez telecharger le plugin directement.

Ce qui vient à l’esprit

On sait que dans une boucle document, on peut accéder aux balises #HAUTEUR et #LARGEUR. Cela signifie que l’on peut aussi mettre un critère limitant la hauteur ou la largeur des DOCUMENTS sélectionnés :

<BOUCLE_doc(DOCUMENTS) {id_article} {largeur < 800}>
#LOGO_DOCUMENT
</BOUCLE_doc>

On pourrait donc être tenté de comparer la largeur et la hauteur de la même façon :

<BOUCLE_doc(DOCUMENTS) {id_article} {largeur < hauteur}>
#LOGO_DOCUMENT
</BOUCLE_doc>

SPIP autorise la première boucle. En effet, on peut comparer n’importe quelle colonne de la base de donnée avec une valeur constante. Cependant dans la 2e boucle proposée, la valeur à droite n’est pas une constante, mais un nom de colonne. Ce critère va donc échouer.

La solution intuitive n’était pas la bonne.

Une solution limitée : imbriquer les boucles

Quand on dit que la valeur à droite doit être une constante, cela veut dire qu’elle peut être :

  • une constante numérique (un id, une taille, etc...),
  • une chaîne de caractères (un titre d’article, de rubrique, etc...)
  • une expression régulière
  • la valeur d’une balise d’une boucle englobante.

Effectivement, quand on est dans une itération spécifique d’une boucle, les valeurs de ses balises sont constantes quand elles sont observées par les boucles imbriquées.

On va donc pouvoir utiliser une boucle englobante pour passer la taille du document à droite de l’opérateur :

On boucle donc avec _doc pour trouver tous les documents d’un article (mais on pourrait utiliser d’autres critères). Ensuite, la boucle _portrait grâce au critère id_document ne sélectionne qu’un document (celui choisi par la boucle _doc).

Elle vérifie aussi que la hauteur de ce document soit plus grande ou égale à la largeur du document sélectionné par la boucle englobante (donc exactement le même).

Voici donc une première solution fonctionnelle pour sélectionner des documents en fonction de leur orientation.

Malheureusement, un critère souvent utilisé ne marchera pas correctement avec cette boucle : {a,b}. En effet, la limitation du nombre de résultats doit être appliquée à la première boucle. Mais celle ci sélectionne tous les documents et donc le compte de documents sera faussé.

Une solution plus souple : utiliser les doublons

Une solutions pour pouvoir utiliser le critère {a,b} est d’utiliser les doublons :

Une première boucle parcours les documents que l’on ne veut pas et n’affiche rien, mais remplie la pile de doublons.
La deuxième boucle parcoure tous les documents sauf ceux qui sont dans doublons, c’est à dire ceux qui n’ont pas été éliminés par la boucle précédente.

Une solution intégrée : fournir de nouveaux critères

Bon, tout cela devient compliqué mais reste du code SPIP pur. Malheureusement, même la deuxième solution — dans des cas spéciaux — a certaines limitations.

Voici une solution utilisant l’extensibilité de la version 1.8 de SPIP, pour ajouter trois nouveaux critères de boucle. C’est du code php mais vous n’êtes pas obligé de le comprendre pour l’utiliser. Les critères {portrait} et {paysage} seront alors disponibles. Par exemple :

Il faut placer ce code dans mes_fonctions.php3, ou dans un fichier qu’on incluera depuis mes_fonctions.php3.

Attention, les deux critères utilisent des inégalités strictes pour sélectionner les images. Ainsi, les images carrées : Hauteur = Largeur ne seront pas sélectionnées par ces deux critères. C’est pourquoi on ajoute aussi le critère {carre} qui retourne les images carrées.

Voici quelques explications pour ceux qui s’intéressent au code. Les trois fonctions font essentiellement la même chose :

  1. Les deux premières lignes récupèrent la boucle dans laquelle on se trouve et le nom de la table de la base concernée.
  2. On vérifie ensuite que le critère n’est pas inversé (par le signe « ! ») ; si c’est le cas, on utilise le critère de comparaison inverse.
  3. On ajoute enfin une nouvelle contrainte à la requête qui sera faite à la base. Cette contrainte compare les colonnes hauteur et largeur de la table concernée.

Voir en ligne : http://plugins.spip.net/orientation

Notes

[1Verticale

[2Horizontale

Dernière modification de cette page le 3 août 2012

Retour en haut de la page

Vos commentaires

  • Le 6 octobre 2006 à 10:37, par Remy_Metz En réponse à : Portrait ou Paysage ?

    Bonjour,
    J’aimerais utiliser cette contribution sous forme de plugin pour la 1.9.1. Celui-ci est installé (en local) et activé.
    Ce nouveau critère est-il compatible avec une boucle ARTICLES ? J’affiche aléatoirement un logo d’article, dans un site de type galerie. J’aimerais que seuls les modes portrait soient à l’écran. J’ai testé, mais j’obtiens une erreur de type « critère non reconnu ».
    Cette erreur répond sans doute à la question...

    Merci pour votre contribution :)

    • Le 6 octobre 2006 à 12:14, par mortimer En réponse à : Portrait ou Paysage ?

      Tu as bien compris ;)

      ce n’est pas possible d’appliquer ce critère à la boucle ARTICLES puisqu’il se base sur l’information de HAUTEUR et LARGEUR fournis pas la boucle, et il n’y a que la boucle DOCUMENTS qui a ces balises.

    • Le 20 novembre 2014 à 11:34, par Abel En réponse à : Portrait ou Paysage ?

      Bonjour,
      Quelqu’un aurait-il une solution pour effectuer ce tri (Paysage ou vertical) sur les logos ?

      En effet, j’aurai besoin d’y type d’affichage différent selon l’orientation du logo de l’articole.

      Merci ^^

    • Le 26 novembre 2014 à 08:57, par Abel En réponse à : Portrait ou Paysage ?

      On peut utiliser ça :

      1. [(#SET{largeur,#LOGO_SITE_SPIP|extraire_attribut{width}})]
      2. [(#SET{hauteur,#LOGO_SITE_SPIP|extraire_attribut{height}})]
      3.  
      4. [(#GET{largeur}|>{#GET{hauteur}}|?{horizontal,vertical})]

      Télécharger

    Répondre à ce message

  • Le 27 septembre 2006 à 18:17, par DoriaN En réponse à : Pas compatible spip 1.9, utilisez le plugin équivalent

    Sur une version Spip 1.9 ce filtre ne marche plus, est-ce normal ou est-ce moi qui ai pu faire une erreur ?

    La version sous forme de plugin (pas facile à récupérer d’ailleurs via spip-zone, y aurait pas un zip à coller sur cette page par exemple ?) fonctionne correctement sans que je change mes squelettes.

    Répondre à ce message

  • Le 15 juin 2005 à 15:12, par DoriaN En réponse à : > Portrait ou Paysage ?

    salut, est-il possible que la contrib marche en affichant un message d’erreur avec la version cvs du jour ?
    Warning : Missing argument 4 for critere_paysage() in...

    mais l’affichage est correct

    • Le 15 juin 2005 à 16:40, par mortimer En réponse à : > Portrait ou Paysage ?

      Aïe,

      effectivement, l’API pour cela a aussi changée dans la 1.8.2. Donc ça ne marchera pas si tu essais de faire un {!portrait} par exemple.

      Il faut ajouter dans les 3 fonctions, tout au début :
      $not = $param->not;

      et enlever $not de la liste des params de la fonction. Ainsi,
      critere_portrait($idb, &$boucles, $param, $not) devient : critere_portrait($idb, &$boucles, $param)

    • Le 18 juin 2005 à 10:55, par Mathieu Drouet (IZO) En réponse à : > Portrait ou Paysage ?

      faut aussi l’ajouter à paysage ?

    • Le 20 juin 2005 à 11:29, par mortimer En réponse à : > Portrait ou Paysage ?

      Salut,

      je suis désolé si c’etait pas clair :

      Il faut ajouter dans les 3 fonctions

      ça veut dire qu’il faut le faire partout : portrait, paysage et carre ;)

    • Le 27 juin 2005 à 23:12, par Mathieu Drouet (IZO) En réponse à : > Portrait ou Paysage ?

      faut le faire aussi sur les deux autres types (carré et portrait)

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

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 Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Refonte de l’identité graphique

    10 juillet – 31 commentaires

    Lors de la SPIP Party 2017 à Toulouse, un nouveau contributeur est venu nous présenter son travail sur une refonte du logo. Au delà de la refonte du logo, c’est une toute nouvelle identité graphique pour SPIP que Jordan nous propose. Voici une (...)

  • Enluminures typographiques V3

    25 juillet 2009 – 185 commentaires

    Les Enluminures typographiques V3 permettent d’ajouter au Porte plume les raccourcis typographiques présents dans le Plugin Barre Typographique Enluminée. C’est une extension du PortePlume. Pour la documentation d’usage, se reporter à celle du (...)

  • LinkCheck : vérificateur de liens

    13 février 2015 – 94 commentaires

    Ce plugin permet de chercher et tester l’ensemble des liens présents dans les objets. Vous pourrez donc en quelques clics connaître les liens brisés ou défectueux qui se sont immiscés dans le contenu de votre site SPIP. La vérification s’effectue en (...)

  • Serveur HTTP abstrait

    25 novembre 2013 – commentaires

    Un plugin-outil pour aider les développeurs à implémenter des API orientées REST, basées sur les méthodes HTTP (get, post, put, delete). Ce plugin a pour but premier de normaliser des URL que l’on pourra appeler pour manipuler les données du site. À (...)

  • Agenda Fullcalendar facile

    29 octobre 2016 – 33 commentaires

    Dans un précédent article, nous expliquions comment afficher un agenda Fullcalendar sur son site avec le plugin agenda. Cependant, ceci nécessite des manipulation de squelettes, ce qui n’est pas toujours évident lorsqu’on débute. La présente (...)

Ça spipe par là