Perso Web PMI Prog Réseaux sociaux Développement Etudes OS Sécurité Infographie Mobiles Référencement iPhone Apple Scrum

15 oct. 2008

Afficher un slideshow de votre galerie Flickr sur votre site

Par Jean-Christophe Duvivier à 11:31

Mots Clés Ajax, Flickr, Internet, Site, Tutoriel, Web, Web 2.0,

Inutile de vous présenter ce concentré d'Ajax, la référence du partage d'images personnelles sur le web : Flickr

prog_flickr

Les fonctionnalités de ce site sont tout simplement énormes : partage, retouche, classement, géolocalisation de vos photos, ce qui pousse tout internaute, du noob au nerd à se servir de cette outil pour référencer ses photos personnelles.

Le but du tutoriel que je vous propose est d'afficher vos photos Flickr sur votre site et/ou blog personnel. Nous allons pour cela nous servir de l'outil Flickrshow développé par Ben Sekulowicz-Barclay

L'installation de Flickrshow est très simple, tout comme sa configuration.

Préambule :

Il vous faut tout d'abord télécharger le fichier Javascript que vous pourrez trouver ici : http://v6.flickrshow.com/scripts/scripts.js

1ère étape : Mise en Place :

Une simple inclusion dans votre fichier PHP/HTML est nécessaire :

<script type="text/javascript" src="js/scripts.js"></script>

Il vous suffit ensuite d'insérer le code suivant à l'endroit où vous voulez afficher votre slideshow, en remplacant "VOTREALBUM" par l'id de votre album que vous trouverez sur Flickr (dans la barre d'adresse, après avoir doublé-cliqué sur votre album). Il est en principe composé de 17 chiffres et lettres.

<div id="fsDemo" style="height:600px;width:400px;">
</div>
<script type="text/javascript">
var cesc = new flickrshow("fsDemo", {flickr_photoset: "VOTREALBUM@N00"});
</script>

2ème étape : Sélection des photos :

L'affichage des photos en fonction de l'album auquel elles correspondent est une chose, mais comment procéder pour afficher toutes ses photos, sans distinction d'album ? Pour cela flickrshow propose différents paramètres :

flickr_photoset : Affiche les photos d'un album précis.
flickr_group : Affiche les photos d'un groupe précis.
flickr_tags : Affiche les photos rattachées à des tags précis (séparez les tags par des virgules lors de la déclaration).
flickr_user : Affiche les photos d'un membre précis.

De plus, il vous est possible de combiner les paramètres "flickr_user" et "flickr_tags" :

var slideshow= new flickrshow("fsDemo", {flickr_tags: "paysage", flickr_user: "jchristophe.d"});

Cela vous affichera donc toutes mes photos portant le tag "paysage".

3ème étape : Modifier l'apparence de Flickrshow :

a. Modifier les couleurs

Ben Sekulowicz-Barclay a développé plusieurs CSS vous permettant de choisir le style de votre Flickrshow parmis différents styles : bleu(blue), vert(green), gris(grey), et rose(pink). Pour sélectionner le thème "green", il suffit de déclarer la variable suivante :

var slideshow= new flickrshow("fsDemo", {flickr_photoset: "VOTREALBUM@N00", theme: "green"});

Si aucune de ces CSS ne vous convient, ou si vous voulez modifier quelques éléments, il suffit de rattacher votre propre CSS, en déclarant, au préalable, la variable suivante :

var slideshow= new flickrshow("fsDemo", {flickr_photoset: "VOTREALBUM@N00", theme: "none"});

Voici la feuille de style (du thème "green") à modifier et à appeler depuis votre squelette pour appliquer votre propre style :

/* WRAPPER
************************************************************************************* */
 
div.fs { background: #E8E8E8 !important; }
 
/* WRAPPER - LOADING
************************************************************************************* */
 
div.fs div.fsLoading { 
	background: #E8E8E8 url("http://v6.flickrshow.com/themes/green/al.gif") 50% 50% no-repeat!important;
	z-index: 500;
}
 
div.fsLoaded-0 div.fsLoading { background-image: url("http://v6.flickrshow.com/themes/green/al.gif") !important; }
div.fsLoaded-1 div.fsLoading { background-image: url("http://v6.flickrshow.com/themes/green/al.gif") !important; }
div.fsLoaded-2 div.fsLoading { background-image: url("http://v6.flickrshow.com/themes/green/al.gif") !important; }
div.fsLoaded-3 div.fsLoading { background-image: url("http://v6.flickrshow.com/themes/green/al.gif") !important;}
div.fsLoaded-4 div.fsLoading { background-image: url("http://v6.flickrshow.com/themes/green/al.gif") !important; }
div.fsLoaded-5 div.fsLoading { background-image: url("http://v6.flickrshow.com/themes/green/al.gif") !important; }
div.fsLoaded-6 div.fsLoading { background-image: url("http://v6.flickrshow.com/themes/green/al.gif") !important; }
div.fsLoaded-7 div.fsLoading { background-image: url("http://v6.flickrshow.com/themes/green/al.gif") !important; }
div.fsLoaded-8 div.fsLoading { background-image: url("http://v6.flickrshow.com/themes/green/al.gif") !important; }
div.fsLoaded-9 div.fsLoading { background-image: url("http://v6.flickrshow.com/themes/green/al.gif") !important; }
div.fsLoaded-10 div.fsLoading { background-image: url("http://v6.flickrshow.com/themes/green/al.gif") !important; }
 
 
/* WRAPPER - SLIDER
************************************************************************************* */
 
div.fs div.fsSlider
{
   background: #D1D1D1 url("http://v6.flickrshow.com/themes/green/sl.gif") !important;
}
 
div.fs div.fsSliderH { 
	background: #99CC00 !important; 
	cursor: pointer;
}
 
/* WRAPPER - BUTTONS
************************************************************************************* */
 
div.fs ol.fsButtons { background: #E8E8E8; }
 
div.fs ol.fsButtons li {
	background: #E8E8E8 50% 50% no-repeat;
	overflow: hidden;
	text-indent: -999px;
	z-index: 300;
}
 
div.fs ol.fsButtons li.fsButtonA { background-image: url("http://v6.flickrshow.com/themes/green/ip.gif") !important; }
div.fs ol.fsButtons li.fsButtonB { background-image: url("http://v6.flickrshow.com/themes/green/ir.gif") !important; }
div.fs ol.fsButtons li.fsButtonC { background-image: url("http://v6.flickrshow.com/themes/green/il.gif") !important; }
 
div.fsPlaying ol.fsButtons li.fsButtonA { background-image: url("http://v6.flickrshow.com/themes/green/is.gif") !important; }
 
/* WRAPPER - IMAGES
************************************************************************************* */
 
div.fs ol.fsImages { background: #D1D1D1; }
 
div.fs ol.fsImages li h2 {
	color: #2E2E2E !important;
	font-family: "Lucida Grande", "Helvetica", "Arial", Sans-serif;
	font-weight: lighter;
	overflow: hidden;
	z-index: 200;
}

b. Modifier la taille des images

Par défaut, Flickr propose plusieurs tailles pour afficher vos images. Elles sont identifiées grâce à des lettres :

s petit carré 75x75
t miniature, côté le plus long de 100
m petit, côté le plus long de 240
- moyen, côté le plus long de 500
b grand, côté le plus long de 1024 (existe uniquement pour de très grandes images d'origine)
o image d'origine, jpg, gif ou png selon le format source

Il suffit donc d'insérer cette lettre dans la variable principal. Exemple pour une taille miniature :

var slideshow= new flickrshow("fsDemo", {flickr_photoset: "VOTREALBUM@N00", size:"_t"});

c. Modifier la vitesse de changement des images

Il vous suffit d'insérer dans la variable le laps de temps entre l'affichage total de 2 photos. Exemple pour 3 secondes :

var slideshow= new flickrshow("fsDemo", {flickr_photoset: "VOTREALBUM@N00", speed:3});

c. Debug Mode

Flickrshow est doté d'un mode de débuggage afin de permettre à l'utilisateur d'identifier les erreurs en cas de non affichage du Slideshow.

var slideshow= new flickrshow("fsDemo", {flickr_photoset: "VOTREALBUM@N00", debug:1});

N'oubliez pas de désactiver le mode debug si votre slideshow fonctionne.

Et voilà pour ce tuto =) Vous pouvez venir voir le résultat sur ma galerie perso ou sur le site officiel de Flickrshow.

12 oct. 2008

Installer un mini calendrier sur SPIP 1.9.2

Par Jean-Christophe Duvivier à 09:58

Mots Clés Internet, Site, SPIP, Tutoriel, Web,

Le but de ce Tutoriel est de vous permettre d'intégrer un mini calendrier sur votre site SPIP, de la même manière que je l'ai fait sur ce site.

Ayant moi même rencontré beaucoup de problèmes dans l'installation de ce plugin, et, une fois réussi, ayant reçu beaucoup de mails me demandant conseils pour réaliser cette intégration, j'ai décidé de rédiger un Tutoriel, comme j'aurais aimé en trouver il y a 6 mois.

Un grand merci à Hervé, rencontré sur SPIP Contrib, qui m'a permis d'avancer ;)

Préambule :

Tout d'abord, il vous faut vous rendre sur SPIP Contrib pour télécharger la version 0.13 du calendrier, ainsi que le plugin Widget Calendrier. Ces deux plugins sont disponibles ici.

Une fois téléchargées, dézippez vos deux archives, et placez les dans le répertoire plugins présent à la racine de votre site (s'il n'y est pas, créez le).

spip_calendrier1

Rendez-vous dans l'admin de votre site, puis dans Configuration > Plugins et activez les deux plugins.

spip_calendrier2

À partir de maintenant, je vais décrire la marche à suivre pour implanter votre calendrier dans votre squelettes et énumérer les erreurs que vous pourriez rencontrer.

1ère étape :

Comme indiqué dans SPIP Contrib, vous devez insérez le code suivant dans votre squelette :

#CALENDRIER_MINI{#ENV{date},'date',#SELF}

1er Cas : Ça fonctionne, vous pouvez passer à l'étape suivante.

2ème Cas : Si le calendrier s'affiche mais que vous ne pouvez pas naviguer entre les mois c'est en général parce-que vous avez placé votre code dans un squelette que vous appelez (grâce à INCLURE) dans votre squelette principal. Le calendrier doit être inséré directement dans le squelette principal.

2ème étape :

Pour tester votre calendrier, vous décidez de programmer un événement (pour programmer un événement, rendez-vous dans l'article concerné, et cliquez sur la flèche noire à gauche de AGENDA).

1er Cas : Votre événement s'affiche dans votre calendrier, et vous accédez à l'article en cliquant sur le jour concerné. Vous pouvez passer à l'étape suivante.

2ème Cas : Si votre événement ne s'affiche pas, cela vient de votre page Plugins > agenda_1_9_2 > formulaires > calendrier_mini.html. Créez un dossier formulaires dans votre dossier squelettes, et copier votre page calendrier_mini.html dans votre nouveau dossier formulaires.

Remplacez le code suivant :

<tbody>
<BOUCLE_calendrier(EVENEMENTS)
{id_article}{id_mot?}{agenda date_debut, mois, (#ENV{date}|annee), (#ENV{date}|mois)}>
[(#DATE_DEBUT|Agenda_memo_full{#DATE_FIN,[(#TITRE|addslashes)],#DESCRIPTIF,#LIEU,
[(#ENV{self}|parametre_url{#ENV{var_date},[(#DATE_DEBUT|affdate{'Y-m-d'})]})]})]
</BOUCLE_calendrier>
[(#ENV{date}|agenda_mini)]
</tbody>

Par celui-ci :

<tbody class="calendrier-td"><BOUCLE_calendrier(EVENEMENTS)
{id_mot?} {agenda date_debut, mois, (#ENV{date}|annee), (#ENV{date}|mois)}>
[(#DATE_DEBUT|Agenda_memo_full{#DATE_FIN,[(#TITRE|addslashes|supprimer_numero)],
#DESCRIPTIF,#LIEU,#URL_ARTICLE,[(#DATE_DEBUT|affdate{'Y-m-d'})]]})]
</BOUCLE_calendrier>
[(#ENV{date}|agenda_mini)]
</tbody>

3ème étape :

Enfin, on va remanier le style de l'agenda. En principe vous ne rencontrerez pas de problème pour le personnaliser, mais je préfère vous donner toutes les cartes.

Personnalisation des cellules :

#calendar td { }

Personnalisation des cellules du mois en cours :

#calendar td.libre{ }

Personnalisation des cellules n'appartenant pas au mois en cours :

#calendar td.horsperiode{ }

Personnalisation de la cellule du jour en cours :

#calendar td.today{ }

Personnalisation des cellules des jours occupés :

#calendar td.occupe { }

Si vous voulez changer le nom des classes, en rajouter, en enlever etc., ça se passe dans le fichier agenda_1_9_2 > balise > calendrier_mini.php lignes 96, 100 et 107.

Utilisation :

Il ne vous reste plus qu'à tester votre calendrier en y ajoutant plusieurs événements. Rendez-vous dans votre article, et dépliez la partie concernant l'agenda.

spip_calendrier3

Renseignez-y le titre, le lieu, la date, le descriptif, et validez. En principe, l'événement figure dès à présent dans le calendrier ;-)

Si vous rencontrez des problèmes en suivant ce tutoriel, n'hésitez pas à laisser un message. J'essaierai d'y répondre ;-)

Mise à jour du 8/02/2009 : Plusieurs événements le même jour

Comme vous l'avez surement remarqué, lorsque plusieurs événements sont programmés le même jour, le lien renvoi sur le premier événement saisi, rendant les autres inaccessibles. Suite à de nombreuses demandes, je vous propose une solution à ce problème, facile à mettre en place. Elle est majoritairement basée sur l'infobulle javascript de Damien Alexandre, que j'ai remaniée à ma sauce, en la combinant avec le script de l'agenda. Voici les étapes de mise en place :

1ère étape : Le fichier calendrier_mini.html : squelette et scripts

Rendez-vous tout d'abord dans le fichier plugins > agenda_1_9_2 > formulaires > calendrier_mini.html ou dans squelettes > formulaires > calendrier_mini.html (si vous avez au préalable dupliqué le squelette de votre calendrier dans ce dossier).

Juste après ce code :

<div id="calendar">

Insérez ceci :

<div id="curseur" class="infobulle"></div>

Ce code représente une infobulle qui contiendra les liens de différents événements de la journée. Peut-importe où vous l'insérez étant donné qu'on la mettra en position absolute. Mais mieux vaut la mettre ici pour ne pas la perdre.

Ensuite le script. Vous pouvez le mettre ou vous voulez, tant qu'il est présent dans la même page que votre mini calendrier. Pour mon test, je l'ai mis tout en haut de mon calendrier_mini.html, c'est à dire avant le :

<div id="calendar">

Voici l'intégralité du code à insérer :

<script language="javascript" type="text/javascript">
<!--
// Fonction qui nous retourne l'élement en fonction de son id
function GetId(id)
{
  return document.getElementById(id);
}
 
var i = false; // Si l'infobulle est invisible, i = false et invesement
var a = true; // Si le curseur a déja survolé le jour, a = false
 
// Fonction qui calcule la position de l'infobulle en fonction de celle du curseur
function move(e)
{
    if(i && a)
    {  // Si la bulle est visible et que c'est la première fois que le curseur survole le jour, on calcul en temps reel sa position idéale
      if (navigator.appName!="Microsoft Internet Explorer")
      { // Si on est pas sous IE
        GetId("curseur").style.left=e.pageX + 5+"px";
        GetId("curseur").style.top=e.pageY + 10+"px";
      }
      else
      { // Si on est sous IE
        if(document.documentElement.clientWidth>0)
        {
          GetId("curseur").style.left=20+event.x+document.documentElement.scrollLeft+"px";
          GetId("curseur").style.top=10+event.y+document.documentElement.scrollTop+"px";
        }
        else
        {
          GetId("curseur").style.left=20+event.x+document.body.scrollLeft+"px";
          GetId("curseur").style.top=10+event.y+document.body.scrollTop+"px";
        }
      }
    }
    a = false; // Le curseur vient de survoler le jour, on passe a à false
}
 
// Fonction qui affiche l'infobulle
function montre(text) 
{ 
  if(i==false)
  { // Si l'infobule est invisible, on l'affiche
    GetId("curseur").style.visibility="visible"; // Si il est caché (la verif n'est qu'une securité) on le rend visible.
    GetId("curseur").innerHTML = text; // on copie notre texte dans l'élément html
    i=true;
    a = true;
  }
  else
  { // Si l'infobule est visible, on la cache
    cache();
  }
}
 
// Fonction qui cache l'infobulle
function cache()
{
  if(i==true)
  {
    GetId("curseur").style.visibility="hidden"; // Si la bulle est visible on la cache
    i=false;
  }
}
 
</script>

Je pense que les commentaires de Damien mêlés aux miens sont suffisants pour comprendre le code. Mais n'hésitez pas si vous avez des questions ;)

2ème étape : Le fichier habillage.css : style

Comme précédemment, vous pouvez mettre ce code n'importe où, mais c'est plus propre de le mettre dans votre fichier css principal. Il vous suffit donc d'y insérer ce code :

.infobulle
{
  position : absolute;   
  visibility : hidden;
  border : 1px solid Black;
  padding : 10px;
  font-family : Verdana, Arial;
  font-size : 10px;
  background-color : #ffffcc;
}

Modifiez le style à votre guise, mais laissez bien la position en absolute, c'est nécessaire pour le calcul de la position de votre infobulle en fonction de votre curseur.

3ème étape : Le fichier calendrier_mini.php : remplissage de l'infobulle

Rendez-vous dans le fichier plugins > agenda_1_9_2 > balise> calendrier_mini.php et remplacez ce code :

$evts = $evenements[$amj];
$class="";
if ($evts)
{
  $evts = "<a href='".parametre_url($evts[0]['URL'],'date',"$annee_en_cours-$mois_en_cours-$jour")."' 
title='".$evts[0]['SUMMARY']."'>".intval($jour)."</a>";
	$class='occupe';
}
else
{
	$evts = intval($jour);
	$class='libre';
}

Par ce code :

$evts = $evenements[$amj];
$info = ""; // Initialisation du contenu
for($i=0 ; $i<sizeof($evts); $i++) // Pour tous les éléments du tableau d'événements,
{
  // On créé un lien vers l'événement et on l'affiche
    $info .= "<a href=\'".parametre_url($evts[$i]['URL'],'date',"$annee_en_cours-$mois_en_cours-$jour")."\' 
title=\'".$evts[$i]['SUMMARY']."\'>".$evts[$i]['SUMMARY']."</a><br />";
  }
$class="";
if ($evts)
{
	$evts = "<a onmouseover=\"montre('".$info."');move()\" href='".parametre_url($evts[0]['URL'],'date',
"$annee_en_cours-$mois_en_cours-$jour")."' title='".$evts[0]['SUMMARY']."'>".intval($jour)."</a>";
	$class='occupe';
}
else
{
	$evts = intval($jour);
	$class='libre';
}

La méthode est simple, on parcoure le tableau des événements, et pour chaque élément, on affiche dans l'infobulle le titre de l'événement, qui mène directement à l'article.

Au final, l'utilisation est très simple : un survol sur le jour et vos événements apparaissent dans l'infobulle (vous pouvez donc choisir l'événement qui vous intéresse). Un deuxième survol sur le jour, et votre infobulle disparait.

Et voilà ! Si vous ne vous êtes pas trompés, tout est opérationnel ! N'hésitez pas à venir exposer vos problèmes si vous en rencontrez ;)

11 oct. 2008

Parce qu'ils le méritent !

Par Jean-Christophe Duvivier à 21:54

Mots Clés 4IM, Blog, Développement, Infographie, Internet, Management, Programmation, Site, Web,

Je profite du lancement de mon nouveau Blog pour faire un peu de pub environnante !

Tout d'abord, je vous propose le Blog de Ma Chérie

blog de Sophie Celis

Ne vous attendez pas à retrouver de la prog ou du management, il n'y en a pas une goutte ! Vous y découvrirez le quotidien d'une étudiante en Lettres Modernes, à l'Université de Marseille. Aussi, si vous avez la tête saturée de requêtes SQL, de POO, vous pouvez venir vous y ressourcer :D Entre les billets à tendance littéraire, s'immiscent quelques morceaux de rock ou de pop. Le Blog est régulièrement mis à jour, alors n'hésitez pas à vous abonner ;)

Ensuite je vous propose le Blog de Benjamin Agullana, un pote de 4IM

blog de benjamin agullana

Étant donné que nous suivons le même cursus depuis Bac+1, vous trouverez sur son Blog à peut-prêt les mêmes domaines abordés ici, à savoir : Infographie, Développement, Programmation, Management... Il vient de passer son blog sous Worpress et commence à rédiger des tutoriaux de prog, alors rien que pour ça, vous devez vous y rendre ;)

À venir le Blog de Romain Cotton, un autre pote de 4IM qui est actuellement en refonte (le blog, pas Romain...)

05 oct. 2008

Dotclear en place !

Par Jean-Christophe Duvivier à 17:31

Mots Clés Actualités, Blog, Dotclear, Internet, Site, Web, Web 2.0,

C'est parti, je me lance !

Je commençais à me sentir un peu à l'étroit dans mon petit Blog sauvagement inséré dans mon site (propulsé par SPIP) et j'ai voulu faire tomber les murs (la folie des grandeurs surement). La nouvelle version de Dotclear (la 2.0) étant disponible depuis début août en version stable, j'ai signé !

Pourquoi un tel changement ? Je vous l'ai dit, je me sentais un peu à l'étroit. Je voulais avant tout pouvoir gérer mon blog grâce à plusieurs catégories sans pour autant complexifier l'arborescence de mon site... Une seule solution : scinder mon site en deux (et peut-être même en 3 très prochainement). D'une part le site, d'autre part le blog. Et pourquoi ne pas profiter de la mise en place de catégories pour profiter des fonctionnalités d'un vrai blog ? C'est ce que j'ai fait !

Alors n'hésitez pas à venir visiter le blog régulièrement et à vous abonner aux flux RSS car il promet d'être intéressant et bien fourni !

page 3 de 3 -

Propulsé par Dotclear - Hebergé par PlanetHoster - Thème Green Mantis par jchristophe
© jchristophe.fr 2008 - 2009
Valide CSS 2.1 CSS 2.1 Valide XHTML 1.0 XHTML Strict 1.0 Flux RSS RSS