Wordpress 2.9 en français désormais disponible

Wordpress, le plus célèbre et peut-être le meilleur outil de gestion de contenu open source est désormais disponible en version 2.9 (et même 2.9.1 depuis quelques heures). Entièrement localisé en français , il intègre de nouvelles fonctionnalités bien sympathiques comme un éditeur d’images et une corbeille.

L’éditeur d’images, disponible lors de l’upload ou directement via le gestionnaire de médias, permet notamment de rogner et de redimensionner les images uploadées. Simple et convivial l’éditeur apporte un vrai plus en supprimant l’étape souvent longue et ennuyeuse de la préparation de ses illustrations via son logiciel de retouche habituel.

Concernant la corbeille, c’était quelque chose d’évidement attendu puisque déjà disponible sur bon nombre de CMS.

Rayon déception, on attendra encore pour une meilleure prise en charge de la gestion de l’ordre des pages et un gestionnaire de média plus professionnel.  A quand la gestion de répertoires ? Peut-être pour la version 3.0, annoncée pour mars prochain.

Streaming de fichiers MP4 avec H264 streaming module et Apache

Encore plus léger et offrant de meilleurs résultats que le format FLV (On2VP6) qui avait, en son temps, révolutionné la vidéo sur le web, le MP4 (H264) apparaît désormais comme la nouvelle référence en matière de compression vidéo. Disponible à la lecture universelle depuis la version 9 du player flash, il présente également l’énorme avantage d’être le format natif de nombreux caméscopes numériques du marché.

En clair, vous n’avez plus besoin de passer par la case logiciel pour publier vos vidéos directement sur votre site internet, blog ou autre.  Comptatibles avec le très populaire JW Player, les fichiers MP4/h264 révolutionnent à leur tour la diffusion de contenus vidéo sur le web. Cerise sur le gâteau, la possibilité de les diffuser en streaming pour peu que vous disposiez d’un serveur LAMP. Comment ?, c’est tout l’objet de ce petit tutorial (testé et approuvé sur une release 2 OVH – en fonction de votre distrib’ certains chemins et/ou commande peuvent varier) :

Téléchargement du h264 Streaming Module pour Apache (2+)

cd ~
svn export http://h264.code-shop.com/svn/h264/tags/mod_h264_streaming-2.0/apache apache_http_h264_streaming
svn export --force http://h264.code-shop.com/svn/h264/tags/mod_h264_streaming-2.0/mp4split apache_http_h264_streaming

Vous aurez peut-être besoin d’installer subversion pour ça : emerge -av dev-util/subversion

Compilation du module

cd ~/apache_http_h264_streaming
sudo /usr/local/apache/bin/apxs -c -i -a mod_h264_streaming.c moov.c

Compilation d’apache pour la prise en charge par le module des fichiers MP4

Edition du fichier de configuration dans /usr/local/apache/conf/httpd.conf

LoadModule h264_streaming_module modules/mod_h264_streaming.so
AddHandler h264-streaming.extensions .mp4

Redémarrer la configuration d’apache :

sudo /etc/init.d/apache reload

Choses importantes à savoir concernant l’installation de module :

1 – Pour les utilisateurs d’apache 2.0 qui rencontreraient le message d’erreur suivant au moment de la compilation du module “undefined symbol: apr_brigade_insert_file” il faut impérativement modifier le fichier : mod_h264_streaming.c comme suit :

#ligne 104 :
apr_brigade_insert_file(bb, fp, mdat_offset, mdat_size, r->pool);
#à remplacer par :
apr_bucket *e; e = apr_bucket_file_create(fp, mdat_offset, mdat_size, r->pool,r->bucket_alloc); APR_BRIGADE_INSERT_TAIL(bb, e); 

2-En fonction de votre configuration d’apache vous pouvez rencontrer des problèmes à la lecture des vidéos mp4 sous firefox toutes versions.

Ceci vient probablement du mod_deflate (ex g-zip), activé par défaut dans pas mal de configurations. Pour remédier au problème et profiter du streaming sur toutes les plate-formes, pensez à mettre à jour votre httpd.conf comme suit, afin d’exclure les .mp4 du processus de compression :

#Don't compress images (et pas non plus les mp4 ! )
SetEnvIfNoCase Request_URI
.(?:gif|jpe?g|png|mp4)$ no-gzip dont-vary


Sources et ressources :

http://h264.code-shop.com/
JW Player

Démo (n’hésitez pas à vous déplacer dans le film avant son chargement complet, c’est tout l’intérêt du streaming !) :

Créer un carrousel avec jquery pour vos diaporamas, fils infos, catalogue produits…

Même s’il existe de nombreux scripts prêt à l’emploi, comme l’excellent jcaroussel, l’utilisation de ceux-ci dans un environnement spécifique s’avère parfois compliqué. L’imbrication du html et du javascript notamment, ne facilite pas en effet la personnalisation de l’objet et la prise en main de la CSS relève souvent de l’exploit.

Aussi, afin de mettre en place quelque chose de plus personnel et de moins gourmand je vous propose d’apprendre à réaliser simplement votre propre carrousel à l’aide de jquery.

Un carrousel, à quoi ça sert ?

L’objectif de ce script consiste à afficher sur une page (html) une liste d’objet (potentiellement infinie) dont un nombre limité seulement sera visible par l’utilisateur. Il sera bien sûr complété par une interface de navigation pour parcourir ce “catalogue” d’objets (qui peuvent être des vignettes des textes ou encore des vidéos). Les applications sont donc multiples : diaporama photo, diaporama produit, ou encore module d’actualités.

Ce dont vous avez besoin pour commencer.

Avant toute chose, il convient de déterminer avec précision l’apparence finale de votre carrousel. En effet, pour que l’affichage fonctionne correctement sur tous les navigateurs (et c’est aussi le but), il conviendra d’être précis et méticuleux. En premier lieu donc, commencez par mesurer (en pixels) l’espace dont vous disposez pour l’affichage du carrousel. Dans notre exemple, le carrousel sera horizontal ce qui signifie que j’ai besoin de connaître la largeur totale de l’espace qui accueillera la navigation, par exemple de mon diaporama.

mesure_carrousel

Comme le montre l’image ci-dessus, cette mesure doit tenir compte de l’ensemble des éléments qui constituent votre navigation. Ensuite, il convient généralement de sortir la calculatrice pour déterminer d’autres paramètres très important :

  • La nombre d’éléments visibles au chargement du carrousel (ici 6).
  • La dimension (précise) de chaque éléments (ne pas oublier les bordures éventuelles…).
  • L’espacement entre chaque objet (ici 10 pixels qui seront obtenus par une “margin-right”).

Dans notre exemple, chaque élément visible occupera donc une largeur totale de 96px. (80 de largeur + 6 de bordure (3 de chaque côté) +10 de marge droite). Soit un total de 576 pixels nécessaires pour l’affichage de 6 éléments. Si vous avez suivi, il nous reste donc 12 pixels à droite et à gauche de nos vignettes qui serviront à l’affichage de la navigation (par exemple avec de petites flèches explicites.

Et maintenant on fait quoi ?

Une fois que le gabarit de votre Carrousel est déterminé, il convient de le créer en HTML. Pour cela je vais utiliser deux conteneurs, deux liens et une liste non ordonnées :


<!--Le premier conteneur qui englobe l'intégralité de la navigation-->
<div id="navigation">
<!--Le lien pour reculer dans notre diaporama-->
<a href="#" id="prev" class="first"><img src="left.jpg" alt="Précédent" width="10" height="10" border="0"/></a>
<!--Le second contenur qui englobe les objets-->
<div id="thumb">
<!--Le liste des objets-->
<ul id="defileur">
<li class="pdt" id="a0"><img src="vign4.jpg" /></li>
<li class="pdt" id="a1"><img src="vign1.jpg" /></li>
<li class="pdt" id="a2"><img src="vign2.jpg" /></li>
<li class="pdt" id="a3"><img src="vign3.jpg" /></li>
<li class="pdt" id="a4"><img src="vign4.jpg" /></li>
<li class="pdt" id="a5"><img src="vign5.jpg" /></li>
<li class="pdt" id="a6"><img src="vign6.jpg" /></li>
<li class="pdt" id="a7"><img src="vign2.jpg" /></li>
<li class="pdt" id="a8"><img src="vign5.jpg" /></li>
<li class="pdt" id="a9"><img src="vign2.jpg" /></li>
<li class="pdt" id="a10"><img src="vign4.jpg" /></li>
<li class="pdt" id="a11"><img src="vign5.jpg" /></li>
<li class="pdt" id="a12"><img src="vign6.jpg" /></li>
<li class="pdt" id="a13"><img src="vign2.jpg" /></li>
<li class="pdt" id="a14"><img src="vign5.jpg" /></li>
<li class="pdt" id="a15"><img src="vign2.jpg" /></li>
</ul>
</div>
<a href="#" id="next"><img src="right.jpg" alt="Suivante" width="10" height="10" title="Suivant" border="0"/></a>
</div>

Peu importe le html que vous souhaitez utiliser, 2 choses sont importantes dans le code ci-dessus :

  1. La class “first” que j’ajoute sur le premier lien : elle servira à le masquer lors de l’amorce (puisqu’aucune navigation vers la gauche sera possible au lancement).
  2. La class “pdt” toujours identique spécifiée sur chaque éléments de la liste : elle servira à compter au chargement de la page combien j’ai d’éléments dans ma liste.

Attaquons nous maintenant au javascript qui va nous permettre de rendre tout ça interactif et nous rapprocher du but. Avec un petit script simple, qui utilisera la puissance de jquery et nécessitant très peu de paramètre hormis le nombre d’éléments visibles au chargement (6 dans notre exemple) qui sera passé en “constante” de configuration.


//On s'assure d'abord que le document est chargé :
$(document).ready(function(){
//On configure notre script en lui indiquant le nombre d'objet visible en même temps :
var nbdisplay = 6;
//Puis on compte le nombre d'objet présent dans notre liste, à adapter peut-être à votre html
var nbobjet = $('#defileur').children('li.pdt').size();
//Enfin on amorce une variable à 0 qui va nous permettre de nous repérer dans la navigation
var repere = 0;
//On crée ensuite deux fonctions assigné sur chacun de nos boutons de navigation :
//La fonction qui permet d'avancer dans le carrousel est assigné au lien possédant l'id "next" :
$('#next').click(
function () {
if ($(this).is(".last")==false) //je n'active la fonction que si je ne suis pas sur le dernier élément
{
repere++; //j'incrémente ma variable de repère
$("#defileur").animate({"left": "-=96px"}, "slow");//je déplace vers la gauche mon conteneur de largeur totale d'un élément (element+marge+bordure).
$('#prev').removeClass();//j'enlève la classe du lien "précedent" pour le faire apparaitre puisque désormais je peux naviguer en arrière.
if((repere+nbdisplay)==nbobjet){//enfin, je calcule si je ne suis pas au bout de ma liste.
$(this).addClass("last");//le cas écheant, j'ajoute une classe au bouton pour le faire disparaitre.
}
}
return false;
});
//La fonction qui permet de reculer dans le carrousel est assigné au lien possédant l'id "prev" :
$('#prev').click(
function () {
if ($(this).is(".first")==false) {
$("#defileur").animate({"left": "+=96px"}, "slow");
repere--;
$('#next').removeClass();
if(repere==0){
$(this).addClass("first");
}
}
return false;
});
});

Il ne me reste plus qu’à ajouter une couche essentielle. La feuille de style. Qui va servir à masquer articiellement les objets qui dépasse le quota autoriser (ici 6) et à afficher et/ou masquer les boutons servant à la navigation.


*{
margin:0;
padding:0;
}
#navigation{
position:absolute;
width:600px;
left:0px;
top:0px;
}
#thumb{
width: 576px;
height:56px;
overflow:hidden;
position:relative;
left:14px;
}
#defileur {

position:absolute;
left:0px;
top:0px;
}
#defileur li {
float:left;
list-style:none;
width:80px;
height:50px;
margin-right:10px;
overflow:hidden;
border:solid 3px #C7922D;
}
.last,.first{
visibility:hidden;
}
#prev{
position:absolute;
top:25px;
left:0;
}
#next{
top:25px;
position:absolute;
left:590px;
}

Voilà, nous y sommes, le carrousel est terminé et permet de naviguer image par image dans notre collection de vignettes.

La démo du script achevé est disponible ici.