Dans une de mes galeries organisée par événements, j’ai voulu identifier par un signe distinctif les vidéos, un peu « noyées » parmi toutes les photos d’une sortie. J’ai donc imaginé d’ajouter une icône pour les repérer dans la page de vignettes :

L’opération est assez simple, et repose sur le fait que toutes mes vidéos sont physiquement regroupées1 dans un sous-répertoire /galleries/videos ; il est donc possible de tester la présence de la chaîne de caractères video dans le nom du fichier, et de faire un traitement spécifique en conséquence.
La modification comprend 2 éléments :
- une fonction jQuery, qui identifie chaque vignette correspondant à une vidéo, et lui ajoute un élément HTML correspondant à l’icône
- des nouvelles règles CSS pour que ce nouvel élément affiche l’icône sur la vignette de la vidéo.
1. Ajout d’une fonction jQuery
La fonction qui permet d’ajouter à chaque vignette un élément supplémentaire est celle-ci :
jQuery(document).ready(
function($) {
$("img[src*=video]").closest('span').after('<span class="video"></span>');
}
);
avec :
jQuery(document).ready(function($) {…});: définition d’une fonction jQuery qui s’exécutera une fois la page web chargée$("img[src*=video]"): recherche des élémentsimgde la page qui contiennent la chaîne de caractèresvideo.closest('span'): sélection de la balise<span>parente la plus proche.after('<span class="video"></span>'): ajout après cette balise d’un élémentspanporteur du nom de classevideo
Cette fonction peut être ajoutée dans n’importe quel template-extension à condition de l’encadrer ainsi :
{known_script id="jquery" src=$ROOT_URL|@cat:"themes/default/js/jquery.packed.js"}
{html_head}
{literal}
<script type="text/javascript">
… votre fonction est ici …
</script>
{/literal}
{/html_head}
avec :
{known_script id="jquery" src=$ROOT_URL|@cat:"themes/default/js/jquery.packed.js": indique que la bibliothèque jQuery est déjà définie par ailleurs,{html_head}…{/html_head}: déplace dans la partie head du code HTML tout le code encadré par les balises2,{literal}…{/literal}: indique à Smarty que le code entre ces balises ne le concerne pas,<script type="text/javascript">… votre fonction est ici …</script>: votre fonction jQuery est du javascript, ce qu’indiquent les balises qui l’encadrent.
Je vous suggère d’ajouter ce script à la fin d’un de vos template-extensions existants, si vous en avez déjà3 ; à défaut, vous trouverez un exemple de création et d’activation de template-extension sur cette page.
2. Nouvelles règles de style
La mise en forme de l’élément span ajouté par le script jQuery requiert l’ajout de 2 nouvelles règles CSS :
.content ul.thumbnails span.wrap1 {
position:relative;
}
.thumbnails .video{
background: url('../img/video.png') no-repeat;
position: absolute;
top: 90px;
left: 100px;
z-index:99;
width: 45px;
height:45px;
}
avec :
.content ul.thumbnails span.wrap1 {position:relative;}: définit un positionnement relatif pour l’élément parent de notre nouvel élément.thumbnails .video{…}: ensemble de la règle concernant notre nouvel élément, qui a pour nom de classevideobackground: url('../img/video.png') no-repeat;: définition de l’icône qui sert de fond au nouvel élémentposition: absolute; top: 90px; left: 100px;: positionnement absolu du nouvel élément, à 90 pixels du haut et 100 pixels de la gauche de l’élément parentz-index:99;: provoque la superposition de l’icône par rapport à l’élément parentwidth: 45px; height:45px;dimensions de l’icône affichée
Cette règle est à ajouter dans l’un de vos fichiers personnels de styles, par exemple /local/rules.css. Vous trouverez sur cette page un exemple détaillé de mise à jour de ce fichier.
Reste à charger l’icône video.png, définie avec une taille de 45 x 45 pi
xels. Je vous propose de copier celle-ci par un simple clic droit ; il s’agit d’une adaptation personnelle à partir d’une image trouvée sur cette page, qui en comportent beaucoup d’autres. Il vous suffit ensuite d’utiliser votre client FTP pour la charger dans le répertoire /local/img de votre galerie.
3. Pour aller plus loin
Vous pouvez adopter le même principe pour d’autres types de fichiers. Dans la même galerie, j’ai par exemple identifié les articles de presse par une autre icône du même style, comme vous pouvez le voir ici :

- Rappel : bien que les vidéos soient physiquement stockées dans une même sous-arborescence elles peuvent apparaître individuellement dans n’importe quelle catégorie virtuelle de la galerie. [↩]
- C’est pour cette raison que la fonction peut être mise dans n’importe quel fichier template. [↩]
- Personnellement, j’ai pour habitude de regrouper mes scripts dans un même template-extension ; je les retrouve ainsi beaucoup plus facilement. [↩]

Bonjour,
Il s’agit d’une excellente astuce et j’en remercie vivement l’auteur.
Cependant, il y a une erreur dans le code du « jquery », il faut mettre :
$(« img[src*=video]« ).closest(‘span’).after( »);
au lieu de :
$(« img[src*=video]« ).closest(‘span’).after( »);
Ce que je voulais noter dans mon précédent post n’est pas bien « passé » : dans le span du code il manque le class= »video »
Merci beaucoup Julien d’avoir relevé cette anomalie : le class= »video » apparaissait effectivement dans le commentaire, mais pas dans le bloc de code source que chacun peut copier/coller.
L’anomalie est désormais corrigée.
je suis perdu …
mes vidéos sont sous galleries/mesvideos
j’ai ajouté :
{known_script id= »jquery » src=$ROOT_URL|@cat: »themes/default/js/jquery.packed.js »}
{html_head}
{literal}
<script type= »text/javascript »>
jQuery(document).ready(
function($) {
$(« img[src*=video]« ).closest(‘span’).after(‘<span class= »video »></span>’);
}
);
</script>
{/literal}
{/html_head}
dans mon fichier footer_perso.tpl
puis:
.content ul.thumbnails span.wrap1 {position:relative;
}
.thumbnails .video{
background: url('../img/video.png') no-repeat;
position: absolute;
top: 90px;
left: 100px;
z-index:99;
width: 45px;
height:45px;
}
dans le fichier rule.csspuis j'ai recopié le fichier video.png dans le rep local/imget je ne vois rien qui s'affichent sur les vigenttes de mes videos.pouvez vous m'aider ?
http://portecles.free.fr/pcp_col/index.php?/category/361
merci
j’ai ces erreurs qui s’affichent :
Warning: known_script is deprecated jquery themes/default/js/jquery.min.js in /mnt/142/sda/1/c/portecles/pcp_col/include/template.class.php on line 547
Warning: Attempt to add script jquery but the head has been written in /mnt/142/sda/1/c/portecles/pcp_col/include/template.class.php on line 979
voyez vous ou pourrait etre mon pb ?
merci
C’est écrit en anglais dans le texte : ‘known_script’ n’est plus utilisable dans la nouvelle version de Piwigo, et provoque un conflit dans les scripts jquery. Il faut que je revois les tutoriaux qui ne sont plus d’actualité, mais je ne vais pas pouvoir le faire immédiatement.
merci pour ta reponse, je vais revenir en arrière en attendant la mise a jour de ce tuto