SPIP-Contrib

SPIP-Contrib

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

286 Plugins, 197 contribs sur SPIP-Zone, 254 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.

Zip - 1.6 ko
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

  • Mailsubscribers

    16 janvier 2013 – 274 commentaires

    Ce plugin permet de gérer les inscriptions (ou abonnements) à la diffusion de contenu par email. Mailsubscribers permet de gérer les inscriptions par Opt-in simple ou double et la désinscription par URL. Ce plugin gère également plusieurs listes (...)

  • noiZetier v2

    9 novembre 2012 – 36 commentaires

    Le noiZetier offre une interface d’administration permettant d’insérer au choix des éléments modulaires de squelettes (noisettes) et de les ajouter ainsi à ses squelettes. Compatibilité La version 2 du noizetier fonctionne sous SPIP 3. Elle est (...)

  • cirr : plugin « rédacteur restreint »

    29 octobre 2010 – 60 commentaires

    Ce plugin « cirr : rédacteur restreint » permet d’affecter des rubriques aux rédacteurs et modifie les droits afin qu’un rédacteur restreint (ou un administrateur restreint) voit dans l’espace privé uniquement les rubriques qui lui sont affectées (et leur (...)

  • Un retour d’expérience d’utilisation de Formidable

    26 octobre – commentaires

    Il s’agissait de créer un formulaire d’inscription à un évènement modérer les inscriptions dans le privé publier les inscriptions dans le public Nous avons discuté de cette présentation lors de l’apéro SPIP du 15 février 2016 à la Cantine (...)

  • Métas +

    3 décembre – 14 commentaires

    Améliorez l’indexation de vos articles dans les moteurs et leur affichage sur les réseaux sociaux grâce aux métadonnées Dublin Core, Open Graph et Twitter Card. Installation Activer le plugin dans le menu dédié. Dans le panel de configuration, (...)

Ça spipe par là