Slick

Intégration à SPIP du carrousel Slick : https://kenwheeler.github.io/slick/

Fonctions de Slick

Son utilisation permet d’afficher une liste d’éléments défilants, en l’occurrence ici une série de photographies.
Par les configurations proposées, il est possible de mettre en place des effets de fondus enchaînes, de sélectionner le nombre d’images visibles et d’appliquer un défilement automatique ou manuel.

Installation et configuration

Une fois le plugin installé comme les autres, la page de configuration est accessible soit par ecrire/?exec=configurer_slick soit par le menu « Squelettes > Slick Slideshow », permettant d’ajuster les paramètres suivants :

  • activer automatiquement : oui ou non
  • Sélécteur jQuery pour Slick : choisir l’élément par une classe ou un id
  • Elément à utiliser comme Slide : cibler l’élément HTML qui sera une diapositive, il doit être directement dans l’élément sélectionné précédemment.
  • Nombre de slide à afficher : le nombre de diapositives visibles
  • Nombre de slide à déplacer : le nombre de diapositives qui se déplacent en même temps
  • AutoPlay : lecture automatique ou non
  • Vitesse de l’autoplay : le déclenchement après le chargement
  • Fade : effet de fondu entre les diapositives
  • Vitesse de l’animation : la rapidité de la transition
  • Vertical : si non ce sera horizontal
  • Lazyload : ne pas charger les images avant de les voir, puis les charger dès qu’on veut les voir (ondemand), ou bien charger déjà les prochaines (avant de les voir, progressive)
  • Centrer les éléments : ...
  • Animation CSS3 (easing) : effet d’accélération/ralentissement lors des transitions
  • Afficher les bulles de contrôle
  • Pause au survol
  • Pause au survol des bulles de contrôle
  • Support du RTL : si oui, on adapte le diaporama à l’environnement de langue, et dont le sens de lecture peut aller de la droite vers la gauche.
  • Hauteur automatique : si oui, la hauteur s’adaptera à la hauteur de chaque diapositive. Sinon la plus haute sera la hauteur du diaporama.
  • Flèches précédent/suivant : utiliser la navigation précédent/suivant (non par défaut)

Affichage dans les textes

Avec les paramètres par défaut, il suffit d’avoir des images dans son site et d’insérer le diaporama dans un texte avec le modèle suivant :
<slick|>
Dix images du site au hasard seront affichées avec les paramètres optionnels que vous pourrez ajouter :

  • largeur : <slick|largeur=550> - la largeur en pixels
  • hauteur : <slick|hauteur=200> - la hauteur en pixels
  • nombre : <slick|nombre=16> - le nombre d’images qu’on veut afficher

Exemple : <slick|largeur=650|hauteur=320|nombre=20>

Il ne faut inclure qu’une seule fois le modèle sur la même page, car il contient un identifiant qui doit rester unique (#slick).

Pour les autres paramètres, la configuration générale du plugin les règle. Voir la page « Squelettes > Slick Slideshow ».

Il est possible de personnaliser le modèle en le surchargeant : copiez le fichier du plugin modeles/slick.html et dans le dossier squelettes/modeles en le renommant comme vous voulez. Vous pourrez le personnaliser et l’appeler dans vos textes de la même manière que l’autre <monmodele|>

Affichage dans les textes avec le modèle <articleXX|slick>

Portfolio des documents d’un article.
Insertion du modèle <articleXX|slick> où XX est le numéro de l’article.
Ce modèle n’utilise pas la configuration générale du plugin, mais les paramètres suivants :

  • id-carousel=monid - id unique du carousel, seulement s’il y en a plusieurs sur la même page.
  • docs=1,2,3 : sélectionne individuellement les documents
  • infinite=true (false par défaut) - revient à la diapo 1 après la dernière
  • speed=300 - vitesse de transition
  • slidesToShow=1 - nb images à montrer à la fois
  • slidesToScroll=1 - nb images à faire défiler en même temps
  • centerMode=true (false par défaut) - centrer sur l’image (si slidesToShow > 1)
  • centerPadding=40px - espace latéraux (si centerMode = true)
  • dots=true (false par défaut) - afficher les points de navigation
  • variableWidth=true (false par défaut) - diapositives de largeurs différentes
  • adaptiveHeight=true (false par défaut) - adapter la hauteur du diaporama à la hauteur de la diapositive
  • autoplay=true (false par défaut) - démarage automatique
  • autoplaySpeed=300 - temps d’exposition d’une diapositive en mode démarrage automatique
  • fade=true (false par défaut) - effet de transition fondu
  • couleurNav=red, ou black, ou green... ou un code héxadécimal de couleur #6509a3 - couleur des navigation (flèches et points)
  • agrandir=oui - pour avoir un lien sur les images et les agrandir (Mediabox activé)

Exemple :

<article3|slick|agrandir=oui|slidesToShow=3|slidesToScroll=3|dots=true>

Discussion

12 discussions

  • 1

    Bonjour ;

    J’aimerais, pour un diaporama inséré dans un article, pouvoir choisir l’ordre d’affichage des diapos.

    Le mieux serais de pouvoir tenir compte de l’ordre des documents attachés, ordre défini par le plugin ordoc (qui est maintenant nativement intégré à Spip).

    possible syntaxe :

    au lieu de mettre :

    <articleXX|slick> 

    on mettrait :

    <article|slick> 

    donc, sans numéro d’article, signifierait diapo des documents attaché au présent article et dans l’ordre de ces documents.

    Merci d’avance,

    Cordialement,

    Hervé

    Répondre à ce message

  • 1

    Bonjour j’aimerais pouvoir faire afficher les vignettes des photos en dessous comme le Slider Syncing
    Je ne sais pas où mettre le code
    $(’.slider-for’).slick(
    slidesToShow : 1,
    slidesToScroll : 1,
    arrows : false,
    fade : true,
    asNavFor : ’.slider-nav’
    ) ;
    $(’.slider-nav’).slick(
    slidesToShow : 3,
    slidesToScroll : 1,
    asNavFor : ’.slider-for’,
    dots : true,
    centerMode : true,
    focusOnSelect : true
    ) ;

    Merci

    • Bonjour RP,

      Pour commencer, il faut désactiver l’insertion automatique du code de Slick. C’est une option dans la configuration du plugin. Le plugin se contentera alors de charger le JavaScript et le CSS.

      Pour le reste, c’est alors à toi de gérer correctement l’appel à Slick au bon endroit (modèles, squelettes...).

    Répondre à ce message

  • 5
    Lucie

    Bonjour et Bravo pour ce plugin !
    J’ai grâce a lui enfin pu faire une galerie sur mon site avec un lien sur les images pour les agrandir et navigation image par image. Cela ne fonctionnait pas pour moi avec la Mediabox...
    Seulement voilà : mes images sont attachées à un produit (du plugin Produit, qui ajoute des produits comme objet éditorial du site). Je ne peux donc me contenter du modèle <articleXX|slick>, il me faudrait plutôt pouvoir écrire <produitXX|slick>...
    Est-ce qu’il me serait possible de toucher au code du plugin pour que cela puisse se faire ? J’ai trouvé dans les slick > modeles > article_slick.html :

    <BOUCLE_listDocs(DOCUMENTS){id_article?}{id_document==^((#ENV{docs}|replace{',',|}|sinon{.*}))$}{extension==jpg|png|gif}>
    	<div>[
    		(#ENV{agrandir}|oui)<a href="#FICHIER" class="mediabox"[ rel="diaporama(#ENV{id-carousel,demo})"]>]
    		<img src="[(#FICHIER|image_reduire{960,*}|extraire_attribut{src})]" alt="[(#TITRE|textebrut)]">
    		[(#ENV{agrandir}|oui)</a>]
    	</div>
    	</BOUCLE_listDocs>

    J’ai tenté de changer le critère id_article ? par id_produit ? mais cela ne suffit pas...
    Alors si vous avez une idée, je suis preneuse !

    Merci et à bientôt !

    • Bonjour Lucie,

      Tu me sembles sur la bonne piste.
      Dans le cas présent, je dupliquerai le modèles des articles pour le surcharger dans le squelette.

      Ensuite, je remplacerai id_article par id_produit :

          <BOUCLE_listDocs(DOCUMENTS){id_produit?}{id_document==^((#ENV{docs}|replace{',',|}|sinon{.*}))$}{extension==jpg|png|gif}>
                  <div>[
                          (#ENV{agrandir}|oui)<a href="#FICHIER" class="mediabox"[ rel="diaporama(#ENV{id-carousel,demo})"]>]
                          <img src="[(#FICHIER|image_reduire{960,*}|extraire_attribut{src})]" alt="[(#TITRE|textebrut)]">
                          [(#ENV{agrandir}|oui)</a>]
                  </div>
                  </BOUCLE_listDocs>

      Je n’ai pas testé, mais si tu places ce modèle dans un produit, cela devrait fonctionner :).

    • Lucie

      Merci pour ta réponse Phenix.
      Question bête (désolé !) que veux-tu dire par placer ce modèle dans un produit ?
      Encore merci.

    • Lucie

      J’ai essayé de mettre la boucle citée dans le squelette et de rajouter le modèle <produitXX|slick> dans mon produit sur l’espace privé mais cela n’a pas fonctionné...

    • Bonjour Lucie,

      Je pense que tu peux régler ton problème en lisant la documentation des modèles de SPIP :
      https://www.spip.net/fr_article3454.html

    • Lucie

      Merci beaucoup Phenix, je viens de regarder le lien. Je pense que cela va résoudre mon problème. Je m’y penche dès que j’ai un peu de temps...

    Répondre à ce message

  • 1
    Agassem

    Pour info, il est possible d’améliorer la navigation dans le carrousel sur écran tactile en supprimant le scrolling par touch event du reste de la page à l’intérieur du DIV id=« ... » contenant la galerie Slick. Ceci peut se faire simplement par ajout d’un minuscule javascript sur la page contenant le carrousel et qui ne s’applique qu’au DIV contenant SLICK.

    <script type="text/javascript">
    /*Prevent scrolling within Slick*/
    function prevent(event){event.preventDefault();}

    document.getElementById("#ID_ARTICLE").addEventListener("touchmove", prevent)
    var haltEvent = function(event) {
    event.preventDefault();
    event.stopPropagation();
    };
    </script>

    pour le cas où le carrousel est dans une boucle ARTICLE. La balise #ID_ARTICLE n’est présente qu’à titre d’exemple, elle sert uniquement à donner une id unique au carrousel au cas où il y aurait plusieurs articles avec carrousel sur la même page.

    Il m’a aussi semblé utile d’augmenter sensiblement le seuil de déclenchement de balayage du carrousel. Ceci se règle avec le paramètre touchThreshold. Voir documentation sur le site de Slick ( voir Settings) .Par défaut, il est égale à 5, je l’ai fixé à 20 (plus sensible) !

    <script type="text/javascript">
    jQuery(function($){$("[#(#GET{id-carousel,demo})]").slick({[touchThreshold:(#ENV{touchthreshold,20})]});
    </script>

    Tout ceci est en place sur mon blog BD ;)

    • Bonjour,
      merci pour les astuces, il faut peut-être préciser qu’un id ne doit pas commencer par un chiffre, donc faire peut-être « id#ID_ARTICLE », ou sinon pour l’exemple « monid » ferait bien l’affaire...

    Répondre à ce message

  • 14

    Bonjour,
    une question simple : pourquoi le carrousel ne réagit pas aux touch events ? En regardant sous le capot, slick.js est équipe pour réagir aux écrans tactiles. In fine -en tout cas chez moi- pas de défilement en balayant avec le doigt... Faut-il implémenter différemment les paramètres par défaut ?
    Merci d’avance,
    spipement,

    • Bonjour,

      Ce n’est pas normal, je vais investiguer dès que possible.

    • Bonjour,

      ummhhh... « chez moi ça marche » ©™® :)

      Pour avoir un retour, il faudrait donner plus d’infos, ne serait-ce qu’une URL... Sans ça, on parle un peu dans le vent.

    • Bonjour,

      merci pour le retour.

      Le site devait être opérationnel ce jour-même. C’est un site de mise en ligne de BD. J’ai du faire appel au plugin owl. J’ai pourtant une petite préférence pour le plugin slick. Je vais donc créer un autre dossier racine sur le serveur avec une URL alternative du site mais qui fait appel au plugin slick.

      Pour info j’ai repris le modele article_slick.html pour l’adapter à mes besoins, et j’ai glissé cette copie dans mon dossier modele en le renommant. Est-ce la source de mes ennuis ? Pourtant mon carrousel Slick fonctionne très bien...
      Je reviens avec les URLs

    • Voici les URLs (site de mise en ligne de BD) :

      1. Un lien vers la galerie en carrousel version Owl : Le blog de Néki - Planche 09
      2. La même page avec le même carrousel version Slick : Le blog de Néki - Planche 09

      Les deux plugins sont activés. Les deux sont exploités par l’intermédiaire d’un modèle perso de mon dossier squelettes/modeles.

      J’avoue de ne pas encore avoir eu le temps d’investiguer en profondeur, mais j’aimerais passer par Slick pour d’autres galeries.

    • Hello,

      Je confirme, le touch ne fonctionne pas sur mon Galaxy S5 + Firefox.
      Cependant les touch event sont bien chargés (voir mon screenshot).

      Le problème ne vient pas de slick, mais du positionnement des « dots », le <ul> recouvre entièrement les slides en passant « au dessus ». Cela empêche les touch de fonctionner.

    • BON SANG MAIS C’EST BIEN SÛR ! Bravo Phenix, et grand merci ! Je n’avais pas cette piste en tête.

      Coups de poings sur les points par z-index et... Miracle ! Tout se laisse de nouveau dragger par le doigt ou la souris. Cool. Comme je ne veux pas les dots en surimpression, pas de soucis...

      Slick a l’avantage de mettre chaque image dans le voisinage des images qui la suivent et la précède, quelque soit la taille d’écran. Owl isole les images à partir d’une certaine taille d’écran.

      Le désavantage de la solution Slick, c’est que les images ne sont pas responsives comme chez Owl.

      Y-a-t-il moyen de rendre les images aussi responsives que chez Owl ???

    • De rien, j’ai trouvé rapidement :)

      Je ne vois pas bien de quoi tu parles au niveau des images.

      Slick a pas mal de paramètre, peut être que tu peux tenter avec mobileFirst:true
      Ce n’est pas prévu par défaut il faudra bricoler pour l’ajouter.
      Ou bien le prévoir dans le plugin :)

    • Salut Phenix,
      c’est vrai, je me suis mal exprimé...

      Dans mes carrousels, que ce soit par Owl ou Slick, le nombre d’item affiché est égal à 1. Je ne montre qu’une seule image.

      1. C’est évident visuellement avec Owl, l’image est isolée, et en sus, parfaitement responsive.
      2. C’est moins évident visuellement avec Slick, parce que l’image dans le contexte de ses images voisines (effet recherché), et elle n’est malheureusement pas responsive.

      Chez Owl, il est difficile de faire apparaître les images voisines, parce que ca grignote beaucoup sur l’item affiché sur les grands écrans (une histoire de stagepadding pas très pratique à mon goût). La solution Slick est plus spipienne dans un sens.

      Le paramètre mobileFirst ne semble pas fonctionné chez moi. En tout cas, je n’ai pas vu de différence...

      A la base, les images Slick sont responsives ????

    • Les liens sus-mentionnés sont devenus caduques, je fais appel aux deux galeries, Slick pour les écrans larges, et Owl pour les plus petits écrans. Il y a un bouton au-dessus de la galerie pour basculer entre les deux galeries. En attendant mieux...
      Le blog de Néki
      Au moins, ça permet aux spipiens de comparer le comportement des galeries avec un seul item affiché...

    • Hello,

      Je vois de quoi tu parles maintenant, mais c’est un souci CSS qu’il faut régler pour le coup, en creusant dans Slick pour gérer la taille des images autrement :)

    • La solution ne semble pas passer par la CSS. Parce qu’il faut que le DIV qui contient l’image recalcule sa largeur width en fonction de son contexte. Je m’explique.

      Mes images de Slick sont bien responsives, mais inclus dans un DIV avec les attributs

      position relative; overflow:hidden;  

      qui ne se redimensionne pas en largeur (width) si le div parent devient plus étroit. Plus précisément, le

      <div class="slick-slide.slick-current.slick-active"> <img src=...></div>

      qui contient l’image n’a pas d’ attribut de style du genre :

      width: 334px;

      (par exemple) qui se recalcule à la volée quand son contenant s’élargit ou devient plus étroit. C’est bien le cas sur le site de Slick. Pas chez moi. :-(

      Donc j’imagine que ca passe par un script. Y a que moi qui bugge ?

    • C’est bien le cas sur le site de Slick. Pas chez moi. :-(

      Du coup, le souci vient de ton site.
      Je testerai en manipulant les options de slick pour voir s’il y en a pas une qui provoque ce problème :)

    • J’ai aussi vérifié de mon côté, c’est effectivement le modèle de mon squelette qui coince ; celui du plugin fonctionne très bien.

    • En effet, c’est le paramètre variableWidth qui avec la valeur variableWidth:true peut poser problème dans certains contextes (mentionnés précédemment).
      Pour résoudre le problème, je fais appel au paramètre responsive pour changer le paramètre en fonction de la largeur disponible. Par exemple :

      variableWidth: (#ENV{variableWidth})],
      responsive: [
          {
            breakpoint: 1200,
            settings: {
            variableWidth:true
            }
          },
          {
            breakpoint: 979,
            settings: {
            variableWidth:false
            }
          },
          {
            breakpoint: 350,
            settings: {
            variableWidth:false,
            centerPadding:0
            }
          }
        ]

    Répondre à ce message

  • 4

    Bonjour,

    En activant « Compactage des scripts et CSS » de SPIP, je m’aperçois que slick.js ne fait pas partie des scripts "compacté", alors que les CSS le sont bien.

    Je loupe quelque chose ou pas ?

    Merci,
    françois

    Répondre à ce message

  • 1

    Bonjour,

    J’aimerais insérer un diaporama slick dans un article, mais en maitrisant les photos qui sont affichées.

    avec 3 options possibles :

    1. Toutes les photos du portfolio de l’article dans lequel on se trouve, avec quelque chose comme <slick|article>
    2. Toutes les photos du portfolio de l’article dont on donne le numéro, avec quelque chose comme <slick|article225>
    3. Les photos listée par leurs numéros, avec quelque chose comme <slick|doc=203,204,355,150>

    Merci d’avance,

    Cordialement,

    Hervé

    Répondre à ce message

  • 1

    Sinon, il y a une solution assez simple que j’utilise régulièrement :
    dans inclure/head.html

    [(#COMPOSITION|=={sommaire}|oui) 
    ici l'appel au js et aux css
    ]

    La limite du truc, c’est que, bien sûr, ’il faut répéter la condition pour cibler les autres pages dans lesquelles on souhaite utiliser le script.

    • Oui, merci Manu.

      Il se trouve que j’utilise ZCore, donc pas de souci pour gérer un head spécifique pour chaque page : sommaire/article/rubrique/etc.

      L’idée était de pouvoir gérer le chargement des scripts à partir de l’interface du plugin ;-)

    Répondre à ce message

  • 5

    Bonjour,

    Quand le plugin est actif, les js/css de Slick sont chargés sur toutes les pages via #INSERT_HEAD / #INSERT_HEAD_CSS.
    Y aurait-il une solution pour ne charger ces éléments que sur certaines pages ? En l’occurrence la page=sommaire ;-)

    Merci pour ce plugin,
    françois

    Répondre à ce message

  • Sympa le plugin ! Et bravo.

    Si j’ai bien compris le paramétrage, <slick|largeur=650|hauteur=320|nombre=20 signifie que le carrousel aura une largeur de 650px et une hauteur de 320 px.

    Or j’ai jeté un coup d’oeil dans le modèle <slick|> du plugin. On trouve dans la boucle DOCUMENTS les critères suivants :

          BOUCLE_documents_slide(DOCUMENTS)
          {largeur >= #GET{largeur}}
          {hauteur >= #GET{hauteur}}

    qui permettent de sélectionner les documents de type image dont la largeur est supérieure ou égale à #GETlargeur et la hauteur supérieure ou égale à #GEThauteur.

    Ce qui signifierait dans notre exemple que seules et seulement les images d’une largeur supérieure à 650 px ET d’une hauteur de 320 px seraient sélectionnées. Ce qui lie les dimensions du carroussel avec les images qui peuvent y être affichées.

    Où est-ce que je me trompe ?

    Répondre à ce message

Ajouter un commentaire

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

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

Dernière modification de cette page le 15 avril 2018