Owl Carousel 2

Owl Carousel est un diaporama jQuery adaptable aux différentes tailles d’écran, qu’on peut actionner par glisser, il utilise CSS3 mais il est compatible avec les vieux navigateurs, et il est aussi paramétrable.
Le présent plugin permet d’utiliser facilement Owl Carousel dans SPIP.

Lien de référence : https://owlcarousel2.github.io/OwlCarousel2/

Installation

Comme tous les plugins.

Configuration

Vous pouvez activer l’insertion des styles et javascript du plugin dans l’espace public et dans l’espace privé de spip sur la page de configuration du plugin.

Exemples

Des exemples utilisables dans vos squelettes se trouvent dans le dossier « noisettes » du plugin. Ce répertoire est plus un outil pour squelette, et destiné plus particulièrement à l’intégration.
Les noisettes fournies peuvent servir de point de départ et ne conviendront certainement pas à tous les cas d’utilisation en l’état.
Il faut plus les considérer comme des extraits de code facilitant l’intégration à votre projet.

Modèle

Un modèle est tout prêt pour afficher les documents d’un article de type jpg, gif ou png dans un diaporama insérable de cette manière :
<articleX|owl>
où « X » est l’id de l’article, pour afficher toutes les images de cet article.
Quelques paramètres permettent de modifier quelques réglages, et se définissent de cette manière lors de l’inclusion du modèle :
<articleX|owl|parametre=valeur>


Paramètres

  • id-carousel=unikid : id unique du carousel, doit être renseigné si plusieurs carousels dans la même page.
  • caption=oui : afficher la description de l’image
  • tri=titre : (rang_lien par defaut) spécifier l’ordre de tri des documents
  • dots=false (true par defaut) : affiche les points pour changer d’image
  • navigation=true (false par defaut) : afficher les boutons précédents/suivants
  • items=2 (1 par défaut) : pour afficher plusieurs images en même temps
  • margin=10 : pour ajouter une marge entre chaque image, en pixels
  • docs=1,2,3 : affiche uniquement les documents 1, 2 et 3. Dans ce cas, le numéro identifiant de l’article est optionnel, vous pouvez donc écrire <article|owl|docs=1,2,3> pour afficher ce diaporama n’importe où dans le site, tant que les documents existent dans la médiathèque
  • caption_css=monstyle : ajouter des css sur la description (par exemple : invisible)
  • autoHeight=true : pour que la hauteur soit adaptée à chaque diapositive
  • autoplay=true (false par défaut) : le carousel démarre automatiquement
  • autoplayHoverPause=true (false par défaut) : pause au survol en mode autoplay
  • autoplayTimeout=6500 (5000 par défaut, en milliseconde) : durée d’affichage d’une diapositive
  • lazyLoad=true (false par défaut) : ne charge que les images visibles pour optimiser le chargement.
  • animateIn= une classe css animation CSS3. par défaut seul fadeOut est proposé par le plugin.
  • animateOut= une classe css animation CSS3. par défaut seul fadeOut est proposé par le plugin.
  • URLhashListener=true : pour suivre le diaporama dans l’historique de navigation.
  • largeur=200 : redimenssionne les images à 200px de large.
  • left|center|right : alignement du diaporama à gauche, au centre ou à droite.

Particularité

Avec le paramètre docs=1,2,3,4 et dans le cas où on n’utilise pas un numéro d’article, exemple : <article|owl|docs=1,2,3,4>
alors il faut ajouter le paramètre |tri=titre :
<article|owl|docs=1,2,3,4|tri=titre>
(le tri sur rang_lien ne peut exister s’il n’y a pas de numéro d’article)

Discussion

29 discussions

  • 4

    juste un petit soucis : si une image est moins haute que la précédente ... il y a un très fin trait sur la gauche du slider visible sur la différence de hauteur

    Répondre à ce message

  • 2

    Bonjour,
    Dans l’espace privé, si je suis au niveau de « modifier cet article », je vois bien le slider
    si je clique sur modifier puis sur un des onglet de visualisation ( voir ou modif/voir) , j’ai le code javascript propre au modèle qui s’affiche et pas le slider.
    Est-ce normal ou est-ce un soucis sur mon site ?

    • Bonjour,
      c’est bien normal, le javascript n’est pas exécuté à cet endroit, c’est fait pour y vérifier les styles sur le texte. Pour voir la page telle que si elle était publiée, il faut passer par « prévisualiser ».

    • Bonjour,

      C’est due a une sécurité de spip qui désactive le javascript des modèles car ils sont considérés comme malveillants insérés depuis une saisie textarea.

      Ceci est principalement due au fait que l’édition des articles/objets spip peut aussi être publique et donc possiblement utilisable pour insérer des scripts malveillants.

      Si votre site n’utilise pas l’édition coté publique, il est possible d’assouplir cette rêgle, qui rend un peut inutile la prévisualisation en mode édition.

      Pour mieux comprendre https://www.spip.net/fr_article4642.html

      Je vais essayer de trouver le temps (demain ^^) de rédiger une petite note sur les options possibles, mais on ne peut pas l’intégrer au plugin en standard, pour les raisons précédentes.

    Répondre à ce message

  • 1

    Bonjour.

    Petite « surprise » avec le modèle de base (super pratique, merci) : si on utilise la syntaxe docs=1,2,3 ... , pas de problème tant qu’on conserve le numéro de l’article (<articleX|owl|docs=...>, mais lorsqu’on supprime, ça déclenche une erreur de la bdd sur le tri par « rang_lien », qui n’existe pas.

    Si je rajoute explicitement « tri=titre » , tout fonctionne. Pas grave donc, mais il serait peut-être judicieux de l’indiquer dans le mode d’emploi ?

    Merci pour ce super gadget.
    Alain

    • Ah oui bien vu ! S’il n’y a pas d’article on ne peut pas se baser sur rang_lien, forcément...
      J’ajoute ça dans la doc, merci !

    Répondre à ce message

  • 8

    Re-bonjour, encore moi… je vais finir par être confuse !
    Donc tout fonctionne à merveille et comme je le souhaite maintenant… enfin presque :

    Lorsque j’ajoute une image et que je l’insère dans le texte d’un article, elle s’affiche en plus dans le carrousel dont j’appelle le modèle article_owl à la place du modèle document dans le porte-folio.

    Je pensais qu’avec la classe « mediabox » du modèle article_owl.html ça irait tout seul et qu’une image intégrée dans le texte ne s’afficherait pas dans le porte-folio, ou qu’il fallait absolument que l’image soit mise dans le porte-folio pour apparaître dans le carrousel appelé de cette façon (je l’écris en français maintenant ;p !)…

    J’ai bien essayé le critère doublons dans la boucle du modèle, mais je crois que je ne sais pas l’utiliser. Ou n’est-ce pas la bonne piste ?

    • Bonsoir,
      si on veut pas toutes les images de l’article dans le carrousel, alors il faut les passer explicitement au modèle avec le paramètre |docs=1,2,3,4

      Mais sinon pour la faute d’orthographe, c’est celle qui est dans le code que j’avais remarqué ... ;o)

    • Bonsoir,

      Je crois que je me suis mal expliquée. Je parle d’un article normal, dans lequel on insère des images dans le texte, un article qui n’est pas censé avoir de carrousel puisqu’aucune de ces images n’est placée dans le porte-folio et je n’appelle pas de carrousel d’un autre article ici.

      En fait, je m’attendais à un comportement comme avec la Mediabox (qui fait que seules les images placées dans le porte-folio seront en galerie, via le modèle « documents », et que si une image est déjà placée dans le texte, elle n’apparaît pas dans la galerie…)

      Or j’ai remplacé l’appel de ce modèle par celui de article_owl.html pour avoir les images en miniature sous forme de carrousel (5 images par 5 images) lorsqu’elles sont placées dans le porte-folio, et les agrandir via la Mediabox lorsqu’on clique sur une miniature.

      [(#REM) Gestion du portfolio et des documents ]
      				[(#MODELE{article_owl})]

      Mais je réalise qu’en fait il prend toutes les images ! Et donc mon problème à présent est que si j’insère une image dans le texte d’un article, via le raccourci <imgxx>, elle est insérée dans le texte, mais également placée dans un carrousel tout en bas, ce qui me pose évidemment problème. Je ne sais pas comment faire pour empêcher ça… En fait, si je pouvais le forcer à ne prendre que celles qui sont placées dans le porte-folio, je crois que ça résoudrait mon histoire, sauf que je ne sais pas faire ça :-(

    • Je précise, aussi pour ceux que ça intéresserait, que pour obtenir le carrousel comme appel des miniatures, j’ai modifié le modèle article_owl.html de la façon suivante :

      <div id="#ENV{id-carousel,demo}" class="owl-carousel owl-theme">
                  <BOUCLE_listDocs(DOCUMENTS){id_article?}{id_document==^((#ENV{docs}|replace{',',|}|sinon{.*}))$}{extension==jpg|png|gif}{par #ENV{tri, rang_lien}}>
                  <div class="owl-slide"[ (#ENV{URLhashListener}|=={true}|oui)data-hash="#ENV{id-carousel,demo}#ID_DOCUMENT"]>
                          <a href="#FICHIER" class="mediabox"[ rel="diaporama(#ENV{id-carousel,demo})"][ title="(#TITRE|attribut_html|couper{80})"]>
                              <img [(#ENV{lazyLoad}|=={true}|oui)class="owl-lazy" data-]src="[(#FICHIER|image_passe_partout{200,200}|image_recadre{200,200}|extraire_attribut{src})]" alt="[(#TITRE|textebrut)]">
                          </a>
                  </div>
                  </BOUCLE_listDocs>
      </div>
      
      <script type="text/javascript">
      jQuery(function($){
          $("[#(#ENV{id-carousel,demo})]").owlCarousel({
              loop:false,[
              items: (#ENV{items, 5}),][
              slideBy:(#ENV{slideBy}),][
              margin:(#ENV{margin, 10}),][
              dots:(#ENV{dots, true}),][
              nav:(#ENV{navigation, false}),][
              autoplay: (#ENV{autoplay}),][
              autoplayHoverPause: (#ENV{autoplayHoverPause}),][
              lazyLoad: (#ENV{lazyLoad}),][
              animateIn:'(#ENV{animateIn})',][
              animateOut:'(#ENV{animateOut})',][
              autoplayTimeout: (#ENV{autoplayTimeout}),][
              autoHeight: (#ENV{autoHeight}),][
              URLhashListener:(#ENV{URLhashListener}),
              startPosition: 'URLHash',]
              navText : ["<:owlcarousel:prec:>","<:owlcarousel:suiv:>"],
              responsive:{
                  0:{
                   items:3
                  }[,
                    640:{
                     items:(#ENV{items, 5})
                  }]
              }
          });
      });
      </script>
    • Ah oui mais si c’est dans un squelette ça change tout, parce qu’on connaît pas à l’avance les numéros des docs... donc là il faut retoucher le modèle ou alors en faire un autre pour qu’il exclue les images insérées dans le texte... c’est peut-être le critère {doublons} qu’il faut regarder de près : https://www.spip.net/fr_article4139.html

    • C’est bien à ce critère que j’ai pensé, j’ai essayé de le placer un peu partout dans la boucle du modèle que j’ai posté précédemment (qui est le même que l’original, à la seule différence que j’appelle 5 images au lieu d’1 seule, et que j’ai supprimé les légendes sur les miniatures).

      Mais je n’ai pas réussi…

      J’ai essayé comme suit, et aussi à d’autres endroits de cette boucle, sans succès.

      <div id="#ENV{id-carousel,demo}" class="owl-carousel owl-theme">
                  <BOUCLE_listDocs(DOCUMENTS){id_article?}{doublons}{id_document==^((#ENV{docs}|replace{',',|}|sinon{.*}))$}{extension==jpg|png|gif}{par #ENV{tri, rang_lien}}>
                  <div class="owl-slide"[ (#ENV{URLhashListener}|=={true}|oui)data-hash="#ENV{id-carousel,demo}#ID_DOCUMENT"]>
                          <a href="#FICHIER" class="mediabox"[ rel="diaporama(#ENV{id-carousel,demo})"][ title="(#TITRE|attribut_html|couper{80})"]>
                              <img [(#ENV{lazyLoad}|=={true}|oui)class="owl-lazy" data-]src="[(#FICHIER|image_passe_partout{200,200}|image_recadre{200,200}|extraire_attribut{src})]" alt="[(#TITRE|textebrut)]">
                          </a>
                  </div>
                  </BOUCLE_listDocs>
    • Je pense que dans un modèle le critère doublons ne passe pas, il ne prend pas l’environnement, il faudrait coller le code directement dans la page, à la place d’inclure le modèle avec #MODELES ...

    • Ah mince ! Ça veut dire coller l’intégralité du modèle dans article.html, javascript compris ?
      Bon, si c’est la seule solution et que ça fonctionne… je vais essayer :-)

    • Ça fonctionne :-) !! Merci, mille merci Chankalan, je suis vraiment super contente !!!
      Vraiment, merci à vous tous, c’est tellement génial de ne pas être toute seule avec ça, et de tout votre travail et disponibilité !
      Bon, je vais tout de même externaliser le js pour faire plus propre… mais ça, je devais y arriver toute seule !

    Répondre à ce message

  • 3

    Et me revoilà pour une dernière question, que je poste à part car le sujet est autre : l’ordre des images n’est pas pris en compte par le carousel (SPIP 3.2.3 donc on peut ordonner sans Mosaïque maintenant…)

    J’ai bien regardé tout le tuto avant de poster cette question (enfin je crois) et n’ai rien lu à ce sujet… Quelqu’un aurait une piste, ou est confronté au même souci ? J’ai le même problème sur 2 sites en développement avec ce plugin, et je ne l’utilisais pas du temps de Mosaïque.

    Et comme à chaque fois, j’aime bien dire un grand merci à la communauté SPIP et aux contributeurs pour ces plugins géniaux !

    • Bonjour Karen

      C’est corrigé dans la prochaine version , il ’y avait pas de critère d’ordre {par …} dans la boucle document.

      https://zone.spip.net/trac/spip-zone/changeset/114891/spip-zone

      On peut donc maintenant passer un critère tri au modèle en ajoutant |tri=titre par exemple.

      Par défaut j’ai opté pour rang_lien car c’est ce que j’utilise le plus souvent , a voir …

      Bonne journée

    • Merci Mist. GraphX !
      Pour la faute d’orthographe, mon dictionnaire français me dit « carrousel » mais en anglais « carousel » = ok, va pour l’anglicisme ;o)

    • Merci beaucoup à vous deux, ça fonctionne nickel, c’est juste génial :-) !
      Ah, et oui, la faute… mais comme toutes les fonctions js des « carousels » le sont en anglais… et que le plugin se nomme ainsi, alors oui, ici j’ai adopté l’anglicisme, même si… ;p
      Belle journée, et encore un grand merci.

    Répondre à ce message

  • 4

    Bonsoir,

    Je rencontre un petit blocage et je ne sais pas s’il est soluble… J’étais déjà venue il y a quelques temps ici pour tenter d’adapter la médiabox avec ce carousel car je l’utilise pour afficher les miniatures sur une seule ligne, 5 images par 5 images. Mist GraphX m’avait bien aidé pour ça.

    Mon souci aujourd’hui est que j’aimerais pouvoir appeler plusieurs galeries contenues dans plusieurs articles, dans certains articles, de la façon suivante :

    <articlexx1|owl>
    <articlexx2|owl>
    <articlexx3|owl>

    Or seul le premier appel est pris en compte…
    Je précise si besoin que j’appelle la mediabox pour toutes les images contenues dans le portfolio d’un article, pour chaque article qui contient réellement les images. Ensuite, dans d’autres articles, je comptais regrouper plusieurs galeries par l’appel comme indiqué ci-dessus.

    Y a-t-il une solution pour que tous soient pris en compte ? J’avais beaucoup d’espoir de structurer un site de la sorte, et là je ne m’attendais pas à ça… Je ne sais pas comment faire ça, ni même seulement si c’est possible !

    Cordialement,
    Karen

    • Bonsoir,
      il y a un critère qu’on peut ajouter pour identifier chaque carrousel différemment, de cette manière :

      <article1|owl|id-carousel=un>
      <article2|owl|id-carousel=deux>
      <article3|owl|id-carousel=trois>

      voir plus haut ↑

    • C’est vrai qu’il y a une faute d’orthographe qu’on pourrait corriger...

    • Merci pour cette réponse rapide !

      Oups, j’étais passée à côté de cette syntaxe…

      Alors ça fonctionne, sauf qu’il se passe une chose étrange : j’appelle 4 carousels, sur 6 qui sont contenus dans 6 articles différents. Mais il m’en affiche un cinquième, complètement sorti de nulle part !
      Ce cinquième affiche des miniatures légèrement plus grandes que les autres, et contient 5 images du premier carousel, et une image du second carousel ??? Je n’y comprends rien, comment est-ce possible ?

      PS : je n’ai pas compris pour la faute d’orthographe ?

    • J’ai trouvé !
      Alors j’aurai pu commencer par là ;p… Je viens de regarder le code, et les 4 premiers carousels sont contenus dans la div texte, puisqu’ils sont appelés dans le champs texte de l’article, et le carousel en prime est lui, inséré dans une div « demo » (comme les articles d’origine lorsque le carousel est affiché automatiquement parce qu’elles sont dans le portfolio).

      Et en fait c’est incompréhensible : ces 6 images étaient déposées dans le portfolio de l’article en question où j’appelle les 4 carousels… sauf que je ne les y ai jamais mises !! Mais bon, il est tard et c’est résolu :-)

      Merci beaucoup Chankalan ! (Et je ne pige pas cette histoire de faute, argh, je cherche et ça n’est pas l’heure !)

    Répondre à ce message

  • 6

    Bonjour,

    j’ai essayé de bidouiller un carrousel en page sommaire (adapté de Owl Rubrique Article), avec une image (il s’agit d’articles de galeries de photos) désignée comme « couverture » par un mot de passe technique (je n’ai pas trouvé comment utiliser un logo en — grand — format original d’image), et le titre de l’article, avec lien pointant sur ledit article. Mon problème : le lien ne fonctionne pas (aucune activation au survol, comme si la balise « a » n’existait pas), ce que je trouve relativement ennuyeux.
    J’ai désactivé le css au cas où et le problème persiste, je reste donc à me demander si c’est un problème dans mes paramétrages du carrousel, ou un problème de syntaxe des boucles ?

    Votre aide me serait d’un grand secours, et désolée si jamais le code vous tire des larmes, je débute ^^

    #SET{container,#ENV{container,}}
    <BOUCLE_kelRub(RUBRIQUES){id_rubrique=#ENV{id_rubrique}}>
    #SET{id_owl,#ENV{id-carousel,owl-rub-art-#ID_RUBRIQUE}}
    <div class="#GET{container}" id="mon_monde">
      <div class="fond_gris">
        <h2>Bienvenue dans mon monde...</h2>
      </div>
          <B_listArticles>
            <a href="#URL_RUBRIQUE">#TITRE</a>
      <div[ id="(#GET{id_owl})" ]class="rubrique owl-carousel owl-theme[ (#ENV{css}|attribut_html)]">
          <BOUCLE_listArticles(ARTICLES){id_rubrique}{!par id_article}{par #ENV{tri}}>
              <article class="contenu">
                <div class="couv-photo" style="background-image:url(<BOUCLE_couv_photo(DOCUMENTS spip_documents_liens){mots_liens.id_mot=8} {id_article}{mode=document}{extension==jpg|png|gif}>#URL_DOCUMENT</BOUCLE_couv_photo>);">
                    <div class="contenu-content">
                      <a href="#URL_ARTICLE" class="btn">#TITRE</a>
                  </div>
                </div>
              </article>
    
          </BOUCLE_listArticles>
      </div>
      </B_listArticles>
    </div>
    <script>
    jQuery(function($){
        $("[#(#ENV{id-carousel,owl-rub-art-#ID_RUBRIQUE})]").owlCarousel({
          loop:true,[
          items: (#ENV{items, 1}),][
          margin:(#ENV{margin}),][
          dots:(#ENV{dots, false}),][
          nav:(#ENV{navigation, true}),][
          autoplay: (#ENV{autoplay, true}),][
          autoplayHoverPause: (#ENV{autoplayHoverPause, true}),][
          lazyLoad: (#ENV{lazyLoad}),][
          animateIn:'(#ENV{animateIn})',][
          animateOut:'(#ENV{animateOut})',][
          autoplayTimeout: (#ENV{autoplayTimeout}),][
          autoHeight: (#ENV{autoHeight}),][
          URLhashListener:(#ENV{URLhashListener}),
          startPosition: 'URLHash',]
          navText : ['<span class="icon icon-chevron-thin-left" aria-hidden="true"></span><span class="icon visuallyhidden"><:owlcarousel:prec:></span>','<span class="icon icon-chevron-thin-right" aria-hidden="true"></span><span class="icon visuallyhidden"><:owlcarousel:suiv:></span>'],
          responsive:{
            0:{
             items:1
            }[,
              640:{
               items:(#ENV{items})
            }]
          }
        });
    });
    </script>
    </BOUCLE_kelRub>
    • Bonjour,

      Je viens de tester, en tous cas la boucle et le js fonctionne sur le squelette livré avec spip (dist) et avec insertion des css.
      J’ai bien un lien sur la rubrique et un autre sur chacun des articles.

      Passez vous bien l’identifiant de la rubrique en paramètre de l’inclusion ainsi :

      <INCLURE{fond=modeles/owl_modele_perso,id_rubrique=7,env,ajax} />

      Pour ce qui est de l’affichage du document plutot que de faire une boucle dans la balise style, je vous conseille plutot d’utiliser les balise #SET et #GET comme dans l’exemple ci-dessous. Plus d’info sur SET et GET ici

      Vous pouvez rajouter des filtres a la suite de #FICHIER comme image_recadre, image_reduire

      <style media="screen">
      #mon_monde .owl-carousel .couv-photo{
        background-size: cover;
        height: 15rem;
      }
      </style>
      #SET{container,#ENV{container}}
      <BOUCLE_kelRub(RUBRIQUES){id_rubrique=#ENV{id_rubrique}}>
      #SET{id_owl,#ENV{id-carousel,owl-rub-art-#ID_RUBRIQUE}}
      <div class="#GET{container}" id="mon_monde">
        <div class="fond_gris">
          <h2>Bienvenue dans mon monde...</h2>
        </div>
            <B_listArticles>
              <a href="#URL_RUBRIQUE">#TITRE</a>
              <div[ id="(#GET{id_owl})" ]class="rubrique owl-carousel owl-theme[ (#ENV{css}|attribut_html)]">
            <BOUCLE_listArticles(ARTICLES){id_rubrique}{!par id_article}{par #ENV{tri}}>
                <article class="contenu">
                  <BOUCLE_couv_photo(DOCUMENTS spip_documents_liens){id_article}{mode=document}{extension==jpg|png|gif}>
                      #SET{media, #FICHIER }
                  </BOUCLE_couv_photo>
                  <div class="couv-photo" style="background-image:url(#GET{media});">
                      <div class="contenu-content">
                        <a href="#URL_ARTICLE" class="btn">#TITRE</a>
                      </div>
                  </div>
                </article>
            </BOUCLE_listArticles>
        </div>
        </B_listArticles>
      </div>
      <script>
      jQuery(function($){
          $("[#(#ENV{id-carousel,owl-rub-art-#ID_RUBRIQUE})]").owlCarousel({
            loop:true,[
            items: (#ENV{items, 1}),][
            margin:(#ENV{margin}),][
            dots:(#ENV{dots, false}),][
            nav:(#ENV{navigation, true}),][
            autoplay: (#ENV{autoplay, true}),][
            autoplayHoverPause: (#ENV{autoplayHoverPause, true}),][
            lazyLoad: (#ENV{lazyLoad}),][
            animateIn:'(#ENV{animateIn})',][
            animateOut:'(#ENV{animateOut})',][
            autoplayTimeout: (#ENV{autoplayTimeout}),][
            autoHeight: (#ENV{autoHeight}),][
            URLhashListener:(#ENV{URLhashListener}),
            startPosition: 'URLHash',]
            navText : ['<span class="icon icon-chevron-thin-left" aria-hidden="true"></span><span class="icon visuallyhidden"><:owlcarousel:prec:></span>','<span class="icon icon-chevron-thin-right" aria-hidden="true"></span><span class="icon visuallyhidden"><:owlcarousel:suiv:></span>'],
            responsive:{
              0:{
               items:1
              }[,
                640:{
                 items:(#ENV{items})
              }]
            }
          });
      });
      </script>
      </BOUCLE_kelRub>

      Voila © chez moi ce modèle marche ^^, j’ai juste supprimé le paramètre mot_clef de la boucle pour le test.

      Après tout dépend de ce que vous souhaitez faire, mais généralement dans le cas de squelette ou dans une page sommaire j’utilise plutôt selection éditoriales pour gérer les contenus, que les mots-clefs.

    • Merci pour cette réponse et sa rapidité !!

      J’ai essayé le code que vous m’avez transmis, mais apparemment aucun changement, j’y perds le peu de repères. Merci en tous cas pour les améliorations. Je vais me pencher dessus, histoire de retrouver en couverture l’image en particulier que j’avais désignée pour cet usage dans chaque article.
      J’avais essayé avec les sélections éditoriales (owl), mais étais passée à côté du plugin dédié, sur lequel je suis tombée aujourd’hui en faisant mes recherches :p, et pensais que je n’avais pas le niveau pour cette option (évidemment avec le plugin c’est plus parlant !).

      En désespoir de cause, peut-être est-ce alors mon css ? Comme je souhaite que mon h2 soit fixe au-dessus d’un fond gris, mais que le titre (et le lien ! grrr) de l’article passe aussi en carrousel sur ce même fond gris, j’ai tenté de jouer avec les z-index, peut-être fort maladroitement. Bon après, je crains qu’on sorte du sujet du carrousel...

      Bon, au cas où...

      #mon_monde {position: relative; top: 0;}
        #mon_monde .fond_gris {position: absolute; top: 30vh; left: 0; z-index: 750; min-width: 300px; width: 43%; min-height: 100px; height: 35vh; padding: 1em 2em;  margin: 0 auto; margin-left: 45%; text-align: center;  color: white;}
        #mon_monde .fond_gris h2 {font-variant: small-caps; font-size: 2em;}
        #mon_monde .rubrique {position: relative; top: 0 !important; left: 0; padding:0;  margin: 0;}
        #mon_monde .couv-photo {width: 100%; height: 100vh; background: no-repeat 50% 50%; background-size: cover; background-clip: border-box; overflow: hidden; z-index: 1000;}
        #mon_monde .contenu-content {position: absolute; top: 30vh; left: 0; min-width: 300px; width: 43%; min-height: 100px; height: 35vh; padding: 1em 2em;  margin: 0 auto; margin-left: 45%; text-align: center; background-color: rgba(0,0,0,0.5); color: white;}
        #mon_monde  a {position: absolute; top: 5vh; left: 0; min-width: 300px; width: 100%; font-variant: none; font-size: 3.5em; z-index: 1500 !important; padding: 1.5em 2em;  margin: 0 auto; color: white; line-height: 1em; text-align: center; font-family: @font2; }
      
      
        #mon_monde .owl-nav {clear: both; width: 100%; height: 100vh; position: absolute; top: 0;margin-top: 0;}
        #mon_monde .owl-nav button.owl-prev , .owl-nav button.owl-next {max-width: 150px; height: 200px; padding: 2px 2px !important; text-align: center; background-color: rgba(0,0,0,0); color: rgba(255,255,255,.8) !important; font-size: 29px !important; position: absolute; top: 45%;}
        #mon_monde .owl-nav button.owl-prev {position: absolute; left: 5px;}
        #mon_monde .owl-nav button.owl-next {position: absolute; right: 5px;}
    • Bonjour ,

      Effectivement c’est bien un problème de css, en fait votre bloc owl_nav
      passe au dessus de votre lien, et comme vous lui donnez la hauteur de la page (100vh) il viens couvrir le bloc de contenu.

      Aussi quand vous positionnez en absolue, vérifiez bien que le conteneur est en relatif, plus on a de calques imbriqués. plus il est complexe de gérer les niveaux et les flottants.

      J’extrapole en lisant les css que vous souhaitez réaliser un carousel en fullscreen, car vous utilisez l’unitée vH ou wW qui est relative a la taille de l’écran (si ce n’est pas le cas et que le carousel est imbriqué dans un bloc ça n’est pas le bon choix, utilisez les % ou rem).

      Un exemple ici de carousel fullscreen avec owl que j’avais noté de coté pour l’intégrer en exemple de squelette, mais pas eut encore le temps.

      https://codepen.io/ingvi/pen/gaOzYe

    • Grand merci pour ces éclaircissements !

      Oui, vous avez bien extrapolé, je souhaite faire un carrousel fullscreen, avec en fond l’image de couverture de l’article, un cadre semi-transparent avec dessus le titre « mon monde » fixe, et le titre avec lien de l’article qui bouge en même temps que l’image... J’aime bien les choses simples et faciles ^_^
      Je vais me re-pencher sur la copie.

      Merci encore et bonne journée.

    • J’apporte mon grain de sel ... peut être après la bataille ...
      N’oublions pas qu’il y a une façon assez simple d’utiliser le modèle article|owl dans une squelette, c’est de publier un article (avec date=0000 pour ne pas le voir dans le fil) dans lequel on appelle le modèle avec tous les paramètres qu’on veut. Et puis dans le squelette, où on veut (ex. sommaire.html), insérer une boucle ARTICLES (avec {id_article=le id de l'article ci-dessus} et dans la boucle juste la balise [(#TEXTE)] avec les crochets et parenthèses pour que spip recalcule l’appel au modèle.
      ENORME avantage, on peut changer les paramètres dans l’article sans modifier le code html du squelette :-))
      Enjoy !

    • Bonjour,

      Après quelques nouveaux essais ça fonctionne comme je voulais ! =)

      je vous transmets donc le css, certainement à élaguer et nettoyer (je laisse ça aux plus aguerris que moi). La solution que j’ai trouvée consiste en effet à passer le z-index de owl-carousel à 1000, et la hauteur de owl-nav à 0 pour éviter que cette div ne passe sur le lien.

      J’ai donc un carrousel en pleine page avec une image de l’article en fullwidth, un cadre dans lequel le titre de l’article suit le carrousel, et un titre fixe nommant la catégorie.
      En revanche, le responsive relève encore du bidouillage fin avec les positionnements absolute...

      #mon_monde {position: relative; top: 0;}
        #mon_monde .cadre_titre {position: absolute; top: 30vh; left: 0; z-index: 1500; min-width: 300px; width: 43%; min-height: 100px; height: 100px; padding: 1em 2em;  margin: 0 auto; margin-left: 45%; text-align: center;  color: white;}
        #mon_monde .cadre_titre h2 {font-variant: small-caps; font-size: 2em; z-index: 1700;}
        #mon_monde .rubrique {position: relative; top: 0 !important; left: 0; padding:0;  margin: 0;}
        #mon_monde .owl-carousel {z-index: 1000;}
        #mon_monde .couv-photo {width: 100%; height: 100vh; background: no-repeat 50% 50%; background-size: cover; background-clip: border-box; overflow: hidden; z-index: 1000;}
        #mon_monde .contenu-content {position: absolute; top: 30vh; left: 0; min-width: 300px; width: 43%; min-height: 100px; height: 36vh; padding: 1em 2em;  margin: 0 auto; margin-left: 45%; text-align: center; background-color: rgba(0,0,0,0.5); color: white;}
        #mon_monde  a {position: absolute; top: 6vh; left: 0; min-width: 300px; width: 100%; font-variant: none; font-size: 3.5em; z-index: 2000 !important; padding: 1.5em 2em;  margin: 1px auto; color: white; line-height: 1em; text-align: center; font-family: @font2; }
        #mon_monde  a#series {position: absolute; top: 49vh; left: 0; margin-left: 58%; min-width: 300px; width: 35vw;z-index: 1500 !important; padding: 1em;}
      
      
        #mon_monde .owl-nav {clear: both; width: 100%; height: 0; position: absolute; top: 48vh;margin-top: 0; }
        #mon_monde .owl-nav button.owl-prev , .owl-nav button.owl-next {max-width: 150px; height: 50px; padding: 2px 2px !important; text-align: center; background-color: rgba(0,0,0,0); color: rgba(255,255,255,.8) !important; font-size: 45px !important; position: absolute; top: 45%;}
        #mon_monde .owl-nav button.owl-prev {position: absolute; left: 5px; font-size: 45px !important;}
        #mon_monde .owl-nav button.owl-next {position: absolute; right: 0px; font-size: 45px !important;}
        #mon_monde .owl-nav button.owl-prev:hover, .owl-nav button.owl-next:hover {background-color: rgba(0,0,0,0) !important;color: rgba(0,0,0,1) !important;}

      Merci pour votre aide précieuse et à bientôt !

    Répondre à ce message

  • 3

    Bonsoir,
    Encore moi :-)
    Je ne sais pas si c’est un petit bug, certainement plutôt une mauvaise compréhension de ma part, concernant le fichier modeles/article_owl.html. Pour ma part, je l’utilise comme miniatures et j’appelle la mediabox pour l’aperçu en grand. Je paramètre donc la ligne 40 à 5 items et ça fonctionne très bien :-) !
    Ligne 55, je vois « responsive », je me dis « chouette ! » et je demande donc 3 items, par exemple, à la ligne 57. Mais je me retrouve avec seulement 3 items partout, à toutes les résolutions, y compris supérieures à 640 px.
    Qu’est-ce qui m’a échappé ici ?
    Bonne soirée

    Répondre à ce message

  • 4

    Bonjour,

    De retour sur ce carousel, avec cette fois l’idée d’appeler les articles contenus dans une rubrique, j’en appelle donc à la noisette owlcarousel-selections_editoriales mais je n’arrive pas à l’adapter comme il faut, j’ai un retour d’erreur qui me dit :
    critère inconnu =
    sur la boucle _listSelection (de la ligne 29… 1re ligne du code adapté comme ci-dessous).

    Aucun résultat ne s’affiche d’ailleurs… J’appelle la noisette de la façon suivante sur le sommaire :

    <INCLURE{fond=noisettes/owlcarousel-selections_editoriales,
              objet=rubrique,
              id_objet=13,
              animateOut=fadeOut, env, ajax }/>

    Quelqu’un peut-il m’aider à trouver ce qui ne va pas ?

    <BOUCLE_listSelections(RUBRIQUES){identifiant=#GET{identifiant}}>
        <B_listContenus>
        <div class="rubrique js-cover-carousel owl-carousel owl-theme[ (#CHAMP_SQL{css}|attribut_html)]">
            <BOUCLE_listContenus(ARTICLES){id_rubrique}{par #GET{tri}}>
                <article  class="contenu[ (#CHAMP_SQL{css}|attribut_html)]">
                        [<div class="contenu-thumbnail">(#LOGO_ARTICLES)</div>]
                        <div class="contenu-content entry article hentry">
                            <div class="title entry-title">
                                [(#GET{link_title}|=={true}|oui)<a href="#URL"]
                                <h2[ class="(#EDIT{titre})"]>[(#TITRE)]</h2>
                                [(#GET{link_title}|=={true}|oui)</a>]
                            </div>
                            [<div class="descriptif [(#EDIT{descriptif}) ]entry-content">
                                (#DESCRIPTIF)
                            </div>][(#GET{link_title}|!={true}|oui)
                            <a href="#URL" class="#GET{link_class, cover-link}">
                                <span>#GET{link_txt, voir : #TITRE }</span>
                            </a>]
                        </div>
                </article>
            </BOUCLE_listContenus>
        </div>
    </B_listContenus>
    </BOUCLE_listSelections> 
    • Bonjour,

      Ceci devrait mieux fonctionner,
      si on souhaite afficher les articles d’une rubrique sous forme de carousel

      par exemple pour une noisette/modele a inclure, nommé
      owlcarousel-rubrique_articles

      <BOUCLE_kelRub(RUBRIQUES){id_rubrique=#ENV{id_rubrique}}>
          [<h2>(#TITRE)</h2>]
          <B_listArticles>
          <div[ id="(#ENV{id-carousel,owl-rub-art-#ID_RUBRIQUE})" ]class="rubrique owl-carousel owl-theme[ (#ENV{css}|attribut_html)]">
              <BOUCLE_listArticles(ARTICLES){id_rubrique}{par #ENV{tri}}>
                  <article class="contenu">
                      [<div class="contenu-thumbnail">(#LOGO_ARTICLE)</div>]
                      <div class="contenu-content">
                          <h2 class="title[ (#EDIT{titre})]">[(#TITRE)]</h2>
                          [<div class="descriptif[ (#EDIT{descriptif})]">
                              (#DESCRIPTIF)
                          </div>]
                          <a href="#URL_ARTICLE" class="btn">#TITRE</a>
                      </div>
                  </article>
              </BOUCLE_listArticles>
          </div>
      </B_listArticles>
      <script>
      jQuery(function($){
          $("[#(#ENV{id-carousel,owl-rub-art-#ID_RUBRIQUE})]").owlCarousel({
              [navigation : (#ENV{navigation,true}),]
              slideSpeed : 300,
              paginationSpeed : 400,
              items : 1[,
              autoplay :(#ENV{autoplay,false}),][
              autoplayHoverPause : (#ENV{autoplayHoverPause,false}),][
              lazyLoad : (#ENV{lazyLoad,false}),]
              navText : ["<:owlcarousel:prec:>","<:owlcarousel:suiv:>"]
          });
      });
      </script>
      </BOUCLE_kelRub>

      a appeler dans un squelette ainsi

      <INCLURE{fond=noisettes/owlcarousel-rubrique_articles,id_rubrique=7,env,ajax} />

      je corrige aussi la noisette à laquelle il manquait le js (a force de surcharger on passe à coté ^^)
      et j’ajouterais certainement celle ci …

    • Bonsoir Arnaud,

      Merci, ça fonctionne à merveille ainsi ! Et merci à nouveau pour votre réactivité :-)

      Le JS était bien dans la noisette, mais en dehors de la boucle… ça fait une différence ?

      De toute façon mon adaptation du code n’était pas la bonne semble-t-il, et même, le choix de la noisette… À quoi est réellement destinée la noisette owlcarousel-selections_editoriales ? Je ne suis pas sûre d’avoir compris son usage du coup !

      Encore un grand merci :-)

    • Bonjour,

      Pour la noisette selection_editoriales elle fonctionne avec le plugin homonyme :

      https://contrib.spip.net/Selections-editoriales

      assez pratique pour gérer un sommaire

      (oui le js était dedans je devais pas être bien réveillé )

      Bonne semaine

    • Bonjour,

      C’est noté, je creuserai ce plugin du coup pour d’autres usages…
      Merci encore pour le coup de main.

      Bonne semaine également

    Répondre à ce message

  • 10

    Bonjour,

    D’abord un grand merci pour ce plugin que je découvre et qui a l’air génial !

    Je rencontre cependant 2 problèmes que je ne parviens pas à régler :

    1/ c’est incompréhensible, il m’affiche un total d’image bien supérieur à la réalité. Par exemple, si j’ai 5 images dans un portfolio d’un article, il me met un total de 11 (voire 14 ou 15 si dans le modèle, je modifie le nombre d’items affichés pour en demander 5 au lieu d’1 seul…). Pour un article où j’en ai 23, il m’en affiche 69, ou 71, ou 72… Il me présente donc mes images plusieurs fois ! Personne ne semble avoir rencontré ce problème ?

    2/ La légende disparaît dans l’image agrandie dansla Mediabox… ???

    D’avance merci pour votre aide.

    • PS : Je précise que le nombre de miniature est correct… c’est lorsqu’on agrandie les images dans la mediabox que le nombre est largement augmenté par rapport à la réalité… et ce, sans aucune modification du modèle…

    • J’ai fini par trouver : c’est loop:true qui pose problème dans le modèle, mais je ne comprends pas pourquoi ? En le passant à false, le total est bon… donc ça va, à condition de ne pas vouloir de boucle :-)

      Je ne trouve toujours pas comment conserver la légende dans la colorbox…

      …ni comment conserver les réglages de max-height / max-width de la config de ladite colorbor, ni de mon css… Mes images s’affichent bien en grand mais elles débordent et n’ont pas leur légende.

      En fait, c’est comme s’il y avait une surcouche quelque part et je n’arrive pas à trouver quoi / où malgré des heures de recherche (j’avais priorisé le problème de total et gardé ça pour plus tard, et voilà ;p !)

      J’avais oublié de préciser : SPIP 3.2.0 !!

    • Bonjour,

      Effectivement l’option loop de owl carousel permet de simuler un défilement infini et recopiant les slides avant et après.

      Pour la colorbox c’est celle livrée avec spip qui est utilisée, il y’a une discussion ouverte sur le GitHub de l’auteur a ce sujet , et des pistes : https://github.com/jackmoore/colorbox/issues/158

    • Bonjour, et merci pour cette réponse rapide !

      Ok pour la boucle, même si ça paraît bizarre ces totaux qui ne correspondent pas à la réalité :-)

      En revanche, pour la Colorbox, je sais bien qu’elle est livrée dans SPIP depuis un moment, je l’utilise sur tous les sites que je produis, depuis des années et sans aucun souci, que je la customize ou non.

      Ce que je ne comprends pas, c’est que dès lors que Owl est actif, un clic sur une des images appelle bien l’agrandissement via la Mediabox, mais la légende disparaît et l’image est affichée à sa taille réelle sans prendre en compte les réglages de la config mediabox ni mon css. Donc elle déborde rapidement de l’écran si elle est un peu plus grande.

      Je précise que j’ai essayé sur un SPIP 3.2.0 vierge après avoir rencontré le problème sur mon propre site. Je me sers des images affichées dans le carousel comme miniatures pour les agrandir via la Mediabox… Ça ressemble plus à un bug, non ?

      D’avance merci pour votre aide.

    • Dans les modèles du plugin on appel colorbox par la class js-colorbox (voir le js du modèle).

      pour rétablir le comportement de spip il faut remplacer par la class mediabox et d’ajouter l’attribut title sur le lien, ce qui affiche bien le titre du document ensuite quand on ouvre la popup.

      Ceci résout le problème des images aussi et utilisant les paramètres définis dans la configuration de spip.

      Je reporte ça sur les modèles du plugin, merci du signalement.

    • Mille mercis Mist. GraphX ! Je n’ai pas eu le temps de tester, mais dès que possible, et je ferai un meilleur retour… :-)

    • J’ai enfin eu le temps de tester ce soir… Merci ! C’est magique :-) !

      … Ou presque : je constate un autre problème (pas pour moi car je ne vais pas me servir de la boucle), mais lorsque on est en loop:true, mettons avec 3 images, il fait un total de 7 (ce que j’avais rapporté plus haut), et donc il ouvre sur la 3, en taille parfaite et avec la légende, puis enchaîne sur la 4 (la seconde) et la 5 (la troisième) de la même façon – parfaite – puis il continue sur la boucle comme avant pour les 6, 7, 1 et 2, avec l’image qui déborde et sans la légende, donc j’imagine qu’il retourne sur la classe js-colorbox et non mediabox pour continuer la boucle ? Ensuite il revient sur la 4, 5 et 6 comme il faut.

      D’ailleurs, sur cette boucle, la 7 et la 1 sont les mêmes ??
      Ça n’est pas un problème pour moi car je ne vais pas utiliser la boucle, mais c’est juste pour vous rapporter ce comportement :-)

      Enfin dernière chose et après j’arrête de vous embêter : dans la liste des articles, sur une rubrique, s’il n’y a que la galerie et pas de texte, ce qui est rapporté comme extrait de l’article donne :
      #demo .owl-slide > .caption z-index : 100 ; position : absolute ; left:55% ; width : 40% ; bottom:5% ; #demo .owl-slide > .caption > .title background : #000 ; color : #FFF ; padding : 5px ; width : auto ; #demo .owl-slide > .caption > p background-color : rgba(88, 88, 88, 0.75) ; /*float : right ;*/ color : #FFF ; padding : 5px ; (...)

      … Enfin seulement quand on appelle la galerie avec le raccourci SPIP <articlexx|owl>, ce qui n’est pas mon cas, car j’appelle le modèle directement dans le squelette et là, pas de souci :-)

      Malgré ces remontées, je trouve ce plugin fantastique, ça fait très longtemps que j’attends quelque chose comme ça, n’ayant pas moi-même les connaissances php/js pour le faire car je ne « maîtrise » que le html/css. Donc un grand merci et un grand bravo !

    • ça ne m’embête pas, c’est toujours intéressant de voir des cas différents d’intégration.

      Oui effectivement quand on affiche une liste d’article et que l’on utilise la balise INTRODUCTION les styles css sont retournée, seuls les balises <styles> sont supprimées et les css retournée en texte brut, c’est du au filtre supprimer_tag.

      N’utilisant pas non plus le modèle je n’avais pas remarqué, et je n’ai pas trouvé d’autres filtres dispo pour ce cas. Il faudrait certainement déplacer les css dans une feuille de style, pour le cas des modèles, ce serais plus propre.

      Pour le loop, et l’option boucle par contre en appelant le modèle directement dans un squelette, avec 3 items, j’ai bien le bon résultat le contenu html est bien cloné (img + caption).

      Si vous avez une url a fournir, pour voir ce que ça donne, dès fois que j’ai mal compris le soucis...

      Sinon un exemple de carousel infini ici sur le sommaire dans la section Écouter, commander les albums, les pochettes des produits défilent avec le texte en touch/drag.

      D’ailleurs au passage le player vidéo est fait avec owl aussi.

    • Bonjour Mist. GraphX, et désolée de revenir si tard !

      Alors pour le problème de taille / légende avec loop:true, c’était sans doute dû à un problème de cache mal vidé, car miracle, ça ne le fait plus sans que j’ai rien modifié !

      Je comprends, avec votre exemple en suivant le lien, que le total augmenté de la boucle ne pose pas de problème tel que c’est utilisé, mais c’est vrai que ça fait bizarre de voir 1/7 dans la mediabox quand on a que 3 images, ou 1/67 quand on en a 22…

      Pour finir, je crois que vous avez mal compris ce que j’ai essayé de rapporter : le css ne s’affiche pas lorsque qu’on appelle la galerie via le modèle dans le squelette, de la façon suivante :

      [(#MODELE{article_owl})]

      et c’est ce que je fais donc tout va bien ! Il s’affiche seulement quand on appelle la galerie via le raccourci <articlexx|owl> directement dans un article, comme c’est expliqué plus haut dans cette page… Ou alors c’est moi qui ai mal compris :-) ?

      Belle journée

    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