Le blog de Medialibs

Aller au contenu | Aller au menu | Aller à la recherche

Mot clé - intégration

Fil des billets - Fil des commentaires

vendredi, mars 28 2008

Quelques logiciels utiles pour intégrer avec e-majine

Pour optimiser son temps d'intégration avec e-majine, il y a un certains nombre de petits logiciels très utiles pour intégrer rapidement tout en faisant des pages compatibles avec un maximum de navigateurs. En voici quelques-uns.

Web Developer :

Cette extension Firefox ajoute un menu et une barre de navigation au navigateur. Cet outil est utile à tout développeur e-majine. Vous pouvez gérer le CSS sur une page (voir ou enlever les styles), désactiver sur une page le java, les javascripts, les couleurs, les images, gérer les cookies du site visité, traiter les images (les retirer, voir les chemins de chacune, les tailles). Vous pourrez tester votre site en différentes résolutions et de liens automatiques pour valider votre site sur W3C…

Lien pour télécharger l'extension

Firebug :

Autre extension Firefox très intéressante. Firebug fait partie de mes extensions préférées depuis un moment. Je l’estime aujourd’hui même plus importante que l’extension Web Developer.

Cette extension permet de retrouver simplement le code lié au visuel. Après avoir activé l’inspecteur, en survolant l’élément sur lequel on veut travailler, on clique dessus et le volet Firebug se fige dessus en indiquant toutes ses propriétés CSS, le modèle de boîte, etc. L’inverse est également possible, c’est-à-dire qu’en survolant le code, la correspondance visuelle dans la page est établie. De plus les différentes marges (internes, externes, bordures) sont elles aussi mises en surbrillance.

L'intérêt principal de cet inspecteur c’est également l’édition à la volée de toutes les balises. Très utile pour tester diverses classes d’un objet. Ainsi en changeant la valeur d'un style, le résultat est visible immédiatement à l'écran. C'est plus rapide que d'éditer la feuille de style, d'enregistrer, et regarder le résultat sur le navigateur.

Firebug permet de gagner beaucoup de temps dans la modification des CSS des template e-majine. En sélectionnant sur la fenêtre du navigateur une boîte, un h1 ou autre, on retrouve dans le panneau latéral, outre ses caractéristiques, la feuille de style qui est appelée ainsi que le numéro de la ligne du style dans le code. Le gain de temps est assez énorme.

Par contre attention, Yann me signale qu'il existe un conflit entre Firebug et l'éditeur de css accessible via l'onglet "intégration".

Lien pour télécharger l'extension

Multiple IE :

Avec Windows, il est compliqué d'installer plusieurs versions d'Internet Explorer sans qu'elles entrent en conflit. Même si Windows Vista installe IE7, bon nombre d'ordinateurs sont encore équipés de IE6. Multiple IE installe toutes les versions d'Internet Explorer (IE3, IE4.01, IE5, IE5.5 et IE6) de façon très fiable. Très utile pour développer votre site e-majine en le testant sur différentes versions d'IE.

Lien pour télécharger Multiple IE


IETester :

Voici le petit dernier : IETester. Même s'il est en version 0.2, il mérite qu'on s'y attarde. Contrairement à Multiple IE qui installe toutes les versions d'IE, IETester va installer UNE application basée sur une interface multionglets, chaque onglet correspondant à une version. Même s'il y a quelques bugs, il vaut le coup qu'on en suive l'évolution.

Lien pour télécharger IETester

Billet original sur Nicolas Menard

lundi, avril 30 2007

Réaliser des aides pour les formulaires avec CSS et Javascript

Depuis la version 0.14a d'e-majne, vous avez certainement rencontré une nouveauté sur les formulaires. Lors de l'ajout de champs de formulaires, il est possible de remplir un nouveau champ, le champ d'information : informations.png On peut se servir de ce champ pour compléter le libellé du champ afin de donner plus d'informations sur le champ à compléter. Nous allons voir comment gérer l'affichage de ces champs de façon un peu moins brut, voir un peu tendance... Attention, ce billet est relativement long, donc pour ceux qui n'ont pas trop le temps voici le résultat final voir le résultat final

Le XHTML et le CSS :

Tout d'abord, il va falloir modifier vos templates si vous voulez pouvoir remonter ce champ de nouveauté pour qu'au niveau du HTML, cela nous donne quelque chose comme cela :

<div class="row">
        <label for="libelleid">
                libelle
                <span class="obligatory">*</span> :
        </label>
        <span>
                <input name="libelle" id="libelleid" type="text">
                <span class="aide">
                        <p>
                        voici mon champ d'information
                        </p>
                </span>
        </span>
</div>

Ce qui impose pour le template creator_form.html de rajouter cet élément à la place des champs de formulaire :

<span mXattribut="class:error2">
        <mx:text id="fields_input"/>
        <mx:bloc id="additionnals_informations">
                <span class="aide">
                        <mx:text id="additionnals_informations" />
                </span>
        </mx:bloc id="additionnals_informations">
</span>

Si maintenant on appliquait un peu de CSS afin de rendre tout ça un peu plus propre.

body{
        font-family: Verdana, Arial, Helvetica, sans-serif;
        font-size:65%;
}
*{
        margin:0;
        padding:0;
}
form{
        width:600px;
}
fieldset{
        border: 1px solid #757575;
        margin:10px;
        padding:5px;
}
legend{
        color:#757575;
        font-size:1.1em;
        font-weight: bold;
        padding:0 5px;
}
.row{
        clear:both;
        margin: 5px;
        padding: 5px;
        position:relative;
}
label{
        float:left;
        width:170px;
}
input, select, textarea{
        border: 1px solid #999999;
        text-align:left!important;
        width: auto;
}

Si maintenant on applique un style à nos aides, voici ce que cela donne. On pourra remarquer que les aides sur les champs de formulaires sont masqués par défaut à l'aide d'un display:none;, car nous allons afficher ces aides uniquement lorsque l'internaute aura placé sa souris dans le champs (focus).

.aide {
        display:none;
        width: 191px;
        z-index:800;
        margin:-5px 0 0 15px;
        position:absolute;
        background:url(/common_images/skin001/form_aide.gif) bottom right no-repeat;
}
.aide p{
        margin:0;
        padding:10px 12px 10px 18px;
        background:url(/common_images/skin001/pointer_form.gif) top right no-repeat;
}

Le Javascript :

On va maintenant en javascript parser notre page afin de trouver tout les champs de formulaire de type input, et pour chacun d'entre eux, nous allons réagir au focus en affichant l'aide et enlever cette aide lorsque le curser de la souris ne se trouve plus dans mon champ de formulaire (onblur).

function prepareInputsForHints() {
        var inputs = document.getElementsByTagName("input");
        for (var i=0; i<inputs.length; i++){
                inputs[i].onfocus = function () {
                        if(this.parentNode.getElementsByTagName("span").length>0){
                                this.parentNode.getElementsByTagName("span")[0].style.display = "inline";
                        }
                }
                inputs[i].onblur = function () {
                        if(this.parentNode.getElementsByTagName("span").length>0){
                                this.parentNode.getElementsByTagName("span")[0].style.display = "none";
                        }
                }
        }
}

Il va falloir faire exactement la même manipulation pour les champs de type select (liste déroulante) et textarea (texte multilignes), juste ici aucun soucis, on change les input par les champs de formulaire correspondant. Malheureusement, avec e-majine il existe un peu plus que ces champs de formulaire, il faut aussi prévoir l'affichage de mes champs de formulaire de type input radio et case à cocher qui ont une structure XHTML différente que des champs de formulaire normaux, donc il va falloir gérer des conditions et un fonctionnement différent de ce script. Et puis il y a aussi le soucis pour les champs de formulaire de type file, pour lesquelles la réaction au comportement focus se fait sur le bouton parcourir, ce qui en sera visible que pour les utilisateur qui naviguent à l'aide de la touche tabulation, donc pour ces champs de type fichier, l'affichage de l'aide se fera au survol.
Je vous fait grâce du fonctionnement de ce script, pour les plus curieux, tout se trouve dans le ficher à télécharger ci-dessous.

Télécharger la première version du script.

Un peu d'animation avec tout ça :

Maintenant, si on jouait avec des effets à la sauce 2.0, jouer d'accord mais en toute légèetré d'abbord, voici donc une librairie qui regroupe juste des effets graphique pour seulement 4ko, simple.js. Parmis tout les effets que propose cette librairie javascript, il y en a un qui m'intéresse tout particulièrement c'est $opacity qui va me permettre d'afficher l'aide nom seulement dans la bulle grâce à mes styles, mais aussi en fondu, il faut donc tout d'abord faire appel à cette librairie :

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

Lorsqu'on regarde la documentation de cette librairie javascript pour cette fonction, il est écrit :

$opacity(id, opacStart, opacEnd, millisec)

On remarque donc que cette fonction s'applique à un identifiant, avec une opacité de départ et de fin, et une durée en millisecondes entre les deux opacités. Le soucis c'est qu'avec e-majine, nous n'avons pas d'identifiant sur les balises span qui entourent nos aides, pas de soucis, grâce au javascript et surtout du DOM, nous allons recréer ces identifiants.

var identifant = this.parentNode.getElementsByTagName("span")[0].setAttribute("id", this.id+'aide');

Et nous allons donc pouvoir appliquer la fonction qui gère l'opacité

$opacity(this.id+'aide', 0, 100, 1500);

Ce qui nous donne au final :

inputs[i].onfocus = function () {
        if(this.parentNode.getElementsByTagName("span").length>0){
                this.parentNode.getElementsByTagName("span")[0].style.display = "inline";
                var identifant = this.parentNode.getElementsByTagName("span")[0].setAttribute("id", this.id+'aide');
                $opacity(this.id+'aide', 0, 100, 1500);
                return false;
        }
}
inputs[i].onblur = function () {
        if(this.parentNode.getElementsByTagName("span").length>0){
                var identifant = this.parentNode.getElementsByTagName("span")[0].setAttribute("id", this.id+'aide');
                $opacity(this.id+'aide', 100, 0, 1500);
                this.parentNode.getElementsByTagName("span")[0].style.display = "none";
                return false;
        }
}

Attention, il est important de remarquer qu'à la réaction sur le onblur, je repasse l'opacité à 0, sinon lorsqu'on clique deux fois sur un même élément de formulaire, la gestion de l'opacité ne sera pas bonne.

Et l'accessibilité dans tout ça

Exact, comment font les utilisateurs ne disposant pas de javascript pour avoir accès à ces champs d'aide dans les formulaires. Et bien plutôt que d'appliquer les styles (avec un style display:none;) à ces champs pour tout les utilisateurs, je vais insérer ces styles la via javascript.

document.write('<style type="text/css">.aide {filter:Alpha(opacity=0); -moz-opacity:0; opacity:0;display:inline;width: 191px;z-index:800;margin:-5px 0 0 15px;position:absolute;background:url(/common_images/skin001/form_aide.gif) bottom right no-repeat;}.aide p{margin:0;padding:10px 12px 10px 18px;background:url(/common_images/skin001/pointer_form.gif) top right no-repeat;}</style>');

Désormais, il ne reste plus qu'a intégrer ces deux fichiers javascript

<script type="text/javascript" src="/common_scripts/simple.js"></script>
<script type="text/javascript" src="/common_scripts/helpForm.js"></script>

Voici le résultat final.

Télécharger les deux scripts ainsi que le template et la feuille de style permettant de faire fonctionner ces aides pour les formulaires.

Billet original sur Simon Bonaventure

lundi, mars 5 2007

Comment faire un menu déroulant avec e-majine.

Avec e-majine il est possible de réaliser des menus déroulant, c'est à dire qu'au survol d'un item de menu, on va afficher tout les sous-niveau de cet item.

Pour cela, il faut tout d'abord aller dans le factory puis dans votre projet pour aller configurer la navigation, et ici, on pourra noter l'apparition d'une nouvelle case à cocher « menu toujours déplié ». Cette dernière permet de faire apparaître tout les niveaux et sous niveaux d'un menu, sans avoir besoin de cliquer sur un item du menu pour faire apparaître les sous item de ce menu. Mais aussi subtil que cela puisse paraître c'est grâce à cette case que l'on va pouvoir réaliser notre menu déroulant. Il ne faut pas oublier de sélectionner le type de menu vertical dans le factory, car un menu de type vertical est en réalité un menu à listes imbriqués, ce qui est indispensable pour réaliser un menu déroulant. menu depilié Voici de façon simplifié la structure html dont on a besoin:

<ul id="first_level">
      <li>
            <a href="#">libelle</a>
            <ul class="second_level">
                  <li><a href="#">libelle</a></li>
                  <li><a href="#">libelle</a></li>
                  <li><a href="#">libelle</a></li>
                  <li><a href="#">libelle</a></li>
            </ul>
      </li>
      <li><a href="#">libelle</a></li>
      <li><a href="#">libelle</a></li>
</ul>

Toute première chose à faire, avant de commencer à donner une apparence à notre menu, il faut masquer les seconds niveaux de notre arborescence. On va éviter l'utilisation de la propriété display:none; qui pose quelques soucis avec certains navigateurs non graphiques.

ul#first_level li ul{
      position:absolute;
      left:-999em;
}

Une fois que cette étape est faite, il en reste plus qu'a habiller notre menu, et à gérer la réaction au survol pour afficher les seconds niveaux de liste qu'on a masqués auparavant. Pour faire cela, on va utiliser la pseudo classe :hover non pas sur un lien comme on a l'habitude de le faire, mais sur nos éléments de liste (<li>...</li>), jusqu'ici fantastique, cela fonctionne me direz-vous mais en plus cela fonctionne sans javascript

ul#first_level li:hover ul {
        left: auto;
}

Malheureusement Internet Explorer ne comprend cette pseudo-classe :hover que sur les liens. C'est pourquoi nous avons avoir besoin malgré tout de javascript pour IE.

sfHover = function() {
        var sfEls = document.getElementById("first_level").getElementsByTagName("LI");
        for (var i=0; i<sfEls.length; i++) {
                sfEls[i].onmouseover=function() {
                        this.className+=" sfhover";
                }
                sfEls[i].onmouseout=function() {
                        this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
                }
        }
}
if (window.attachEvent) window.attachEvent("onload", sfHover);

En gros, ce code va appliquer la classe "sfhover" aux items ("li") de la liste ("ul") nommée ("id") "first_level", lorsque ces items sont survolés par la souris. Cette classe est ensuite retirée en utilisant une expression régulière lorsque la souris quitte la zone. Donc, du coup le style devient :

ul#first_level li:hover ul, ul#first_level li.sfhover ul {
        left: auto;
}

Cet article s'inspire de l'excellent pompage.net et de son article sur les menus déroulant

Billet original sur Simon Bonaventure

lundi, janvier 22 2007

Structure et mise en forme optimales d'une page XHTML ...

Etudions la manière d'organiser une page afin d'être le plus optimal possible. Première étape, séparer le contenu de la mise en forme. Il faut se le dire, le XHTML n'est pas un langage de mise en page, mais un langage de description. Grâce au XHTML, il est possible d'organiser son contenu en regroupant des éléments de contenu entre eux, et de leurs donner un sens (sémantique) tout en le laissant accessible à tous. Le CSS est le langage qui va nous permettre d'habiller, de mettre en forme, ces éléments. Voyons ensemble comment organiser son XHTML et ses CSS afin d'avoir une page XHTML optimale.

La structure (XHTML)

Tout d'abord, il faut trouver la structure XHTML la plus souple possible, dans laquelle nous avons peu de modification à faire du XHTML, tout en ayant la possibilité, avec les feuilles de styles, de faire un maximum de mises en page possibles.

Au niveau de l'en-tête (<head>...</head>), utilisons une DTD XHTML 1.0 Strict. Nous choisissons cette DTD, car c'est la dernière norme en vigueur du W3C. Elle permet de spécifier la langue du document : pour chacune des langues, chaque en-tête doit être différente.

Dans le corps de la page (<body>...</body>), nous retrouvons tout d'abord un div#page contenant l'intégralité du site. Grâce à ce calque, il est possible de restreindre le site en largeur, pourquoi pas en hauteur, et puis de le centrer.

  • Le premier calque enfant du calque #page est #accessibility. On y retrouve des liens d'évitement qui nous permettent d'accéder directement au menu, au contenu,...(cf Alsacréations - les liens d'évitements).
  • Un calque #banner, avec un titre reprenant un titre générique à votre projet (pensez aux mots clefs ...) et un lien sur ce titre, permet de revenir à la page d'accueil.
  • Ensuite, le calque #wrapper, va lui contenir les calques #conteneur, #leftbar et #rightbar. A l'aide de cet élément, nous pouvons dissocier l'affichage des éléments de contenu (le menu, les outils et le contenu) qui peuvent être contraints en largeur et centrés, de la bannière qui elle peut s'adapter à la largeur de l'écran. Cet élément va également servir à mettre une image de fond sous ces trois colonnes.
  • Les calques #leftbar et #rightbar correspondent aux deux colonnes de la page de base. A l'intérieur de ces deux colonnes, retrouvons un menu et des outils par exemple.
  • Le calque #footer donne la possibilité d'y mettre des liens pour revenir en haut de page, ou bien pour faire un rappel/accéder à des rubriques importantes de votre site.
  • Et pour finir, un calque de signature #signature, dans lequel vous retrouverez la signature du/des créateurs de votre projet. Ce calque est le seul ne faisant pas parti du calque #page.

Imbrication des éléments dans le flux

imbrication des éléments dans le flux

La mise en forme (CSS)

Utiliser des feuilles de style ne fait pas tout, encore faut-il bien les utiliser. Tout d'abord, n'utilisez pas une unique feuille de style mais plusieurs feuilles de style. Ceci vous permettra d'économiser un temps non négligeable lors de vos intégrations, car plutôt que de naviguer dans une seule feuille de style qui fait des milliers de lignes, vous n'aurez qu'à sélectionner la bonne feuille de style pour trouver tout de suite ce que vous désirez.

Pour permettre de s'y retrouver encore plus facilement, indenter ses feuilles de style est un bon moyen de regrouper toutes les déclarations qui servent à mettre en page un élément :

#menu{}
     #menu ul{}
          #menu ul li{}
          #menu ul li.toto{}
          #menu ul#toto li{}
                  #menu ul li a{}
                  #menu ul li a:hover{}
                  #menu ul li a:visited{}
                  #menu ul li.active a{}

Supprimez toutes les marges par défaut *{margin:0;padding:0;}. On trouvera cette déclaration dans la feuille de style de base (celle qui importera toutes les autres). Cela servira à annuler les styles que toutes les balises HTML ont par défaut. Désormais grâce à cet élément, plus besoin de se poser la question si les éléments auxquels on veut appliquer des styles héritent d'une propriété qui a été écrite ou bien du style par défaut que possèdent toutes les balises HTML (notamment pour les listes des menu). Ceci va également éviter de mettre les marges internes et externes à zéro. Enfin, nous devrons penser aux espaces entre les paragraphes par exemple, plutôt que de se laisser porter par les styles HTML par défaut.

Attention particulière afin de contourner le problème du "box model" : ne pas mélanger, et des propriétés width, et du padding. Il est préférable d'appliquer le padding, si besoin, à un calque enfant. Par exemple :

#box{
width:250px;
}
#box div{
padding:15px;
}

Concernant le style de la balise body, inutile de vous rappeler qu'il est toujours important de déclarer ses polices de caractères de façon relative (si besoin est, alsacreations a un très bon tutoriel)

Il est important de dédier une feuille de style qui va permettre d'installer uniquement l'ergonomie du site, celle-ci ne sera pas parasitée par la mise en place d'autres éléments. La zone #banner sera fixe en hauteur pour pouvoir placer tout ce qui se trouvera dedans de façon absolue, et aussi appliquer de jolis fonds en CSS. Ensuite on va retrouver le calque #conteneur qui prend la totalité de la largeur de son parent (#wrapper), et auquel on attribut un float:left; pour que les éléments qui le suivent #leftbar et #rigthbar reviennent vers leur gauche. Ces deux derniers éléments ont des largeurs d'appliqués avec des marges négatives sur la gauche afin de venir se placer au dessus de #conteneur. Attention dans le cas d'une design liquide (qui s'adapte à la largeur de l'écran), la largeur de la colonne de gauche se doit d'être à -100%. Mais dans le cas d'une design restreint il faudra spécifier pour internet explorer une marge négative de la largeur de l'élément conteneur. Logiquement le -100% devrait suffire, car 100% de 770px par exemple, ça fait 770px ! Et bien de temps à autres, Internet Explorer ne comprend pas, il faudra donc spécifier des largeurs en pixels dans les cadres de designs qui ne s'adaptent pas aux écrans. Ensuite, nous avons un élément avec un style de type clear:left;, afin que l'élément conteneur (#wrapper) puisse savoir où il se termine. Mais pourquoi utiliser une structure aussi compliquée avec toutes ces marges négatives ? En fait, le but de cette structure, est d'utiliser le moins possibles d'éléments avec des clear:both;, tellement problématiques sous Internet Explorer...

Afin d'optimiser le poids de ses feuilles de styles, utilisons des propriétés raccourcies. Par exemple, pour appliquer un fond en CSS, il existe toutes une série de propriétés qui peuvent être remplacées par une seule :

#element{
background-color:red;
background-image:url(/images/monimage.jpg);
background-repeat:repeat-y;
background-attachment:scroll;
background-position:top left;
}

équivaut à

#element{
background:red url(/images/monimage.jpg) repeat-y scroll top left;
}

On peut faire ça avec les propriétés de font, padding; margin, border, list-style, outline et background bien sûr.

Pour l'insertion des images, dans une logique de sémantique et d'accessibilité, les images qui seront inclues en feuille de style sont uniquement les images de décoration. Dès qu'une image apporte du sens à votre page web, dès qu'il y a du texte dessus, il est préférable de l'inclure en XHTML.

Quelque chose de plus didactique (à la alsacréations, si si) sera réalisé dans les prochaines semaines afin de mieux comprendre comment est réalisé le style par défaut.

Billet original sur Simon Bonaventure

lundi, décembre 4 2006

faire une galerie d'images avancée autre part que dans un article en blocs.

Une galerie quoi ?

Avec e-majine, dans l'interface d'administration, lorsque vous créez un article en bloc, vous avez la possibilitée de faire un bloc de type médias. Dans la configuration de ce bloc, il suffit de lui demander d'afficher pour les types de médias des images. Ensuite, pour type d'affichage, on va demander une galerie d'images,a fin de pouvoir mettre plusieurs images, après avoir séléctionné toutes les images voulues, il faut cocher la case à cocher vignettes, qui va faire en sorte d'afficher tout d'abord les vignettes des images et avoir une action en cliquant dessus. Après avoir caché cette case, il faut choisir dans la liste déroulante, le mode de fonctionement avancé.

Comment cela fonctionne ?

Beaucoup d'entre vous apprécie le fonctionnement du bloc de type média lorsqu'il affiche une galerie d'images en mode avancé. On me pose souvent la question sur son fonctionnement et les technologies qui sont utilisés pour faire fonctionner cela, certains parlent de flash, d'autres d'AJAX. En fait il s'agit de DHTML, qui n'est pas à proprement parler un language mais une combinaison de languages. Le DHTML est une combinaison de technologies entre le Javascript, le CSS et le XHTML. Et donc cette galerie d'images proviens du site lightbox.

Comment l'intégrer autre part?

On fait appel aux fichiers externes

nous allons maintenant voir comment intégrer cette magnifique galerie d'images. Si on suit les recommendations du site de l'auteur, il va tout d'abord faire appel aux fichiers jaavscripts qui permettent de faire les effets de redimentionnement. Je vous conseille de déposer ces fichiers dans le dossier prévu à cet effet Scripts, qui se trouve à la racine de votre FTP :

<script type="text/javascript" src="/scripts/prototype.js"></script>
<script type="text/javascript" src="/scripts/scriptaculous.js?load=effects"></script>
<script type="text/javascript" src="/scripts/lightbox.js"></script>

Ensuite, il va aussi falloir faire appel à la feuille de style de cette galerie, sans oublier de déposer dans le dossier images, à la racine du FTP toutes les images qui sont appellées dans la feuille de style. :

<link  rel="stylesheet" type="text/css" href="/modeles/fr/Modele1/css/gallery.css" title="normal" />

On défnit le(s) endroit(s) on vont le trouver les images

Ensuite, il va falloir définir dans votre template l'endroit ou va se trouver la galerie d'images, en encapsulant les images dans un div qui va devoir porter un attribut de class qui vous aurez définit.

<div class="gallery">
         <img src="/medias/thumbnail/image1.png" alt="texte alternatif 1" />
         <img src="/medias/thumbnail/image2.png" alt="texte alternatif 2" />
         <img src="/medias/thumbnail/image3.png" alt="texte alternatif 3" />
</div>

Pour ceux qui ne

On s'amuse avec javascript et le DOM

Après avoir fait cela, il falloir intégrer un nouveau fichier javascript de mon fait, qui aura pour but de rajouter avec le DOM pour chaque image le lien avec les bons attributs qui vont pouvoir faire en sorte d'afficher le galerie d'images. Dans ce fichier, on va tout d'abord commencer par retrouver une fonction qui va nous permettre de travailler avec les classname, car il n'existe pas de fonction native en javascript qui récupère chaque classname, et qui stock le contenu dans un tableau.

function getElementsByClassName(oElm, strTagName, strClassName){

        var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
        var arrReturnElements = new Array();
        strClassName = strClassName.replace(/\-/g, "\\-");
        var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
        var oElement;
        for(var i=0; i<arrElements.length; i++){
                oElement = arrElements[i];    
                if(oRegExp.test(oElement.className)){
                        arrReturnElements.push(oElement);
                }
        }
        return (arrReturnElements)

}

Ensuite, on à une seconde fonction, qui à chaque fois qu'on va rencontrer le nom de class qu'on aura choisi de mettre sur notre div qui englobe les images de notre galerie, va regarder toutes les images. Pour chacune des images, je rajoute une lien dans le div parent, à ce lien, je lui met l'image à l'interieure, et ensuite je créer les attributs href, title et rel (qui av parmettre de créer la galerie). Je vous fait grace du fonctionnement de tout ça.

function createGallery(class){
        var className = getElementsByClassName(document, "div", class);
        // à chaque fois qu'on rencontre la classname, on crée uen nouvelle gallerie
        for(var i=0 ; i<className.length ;i++){
                var imagesGallery = className[i].getElementsByTagName("img");
                //pour chacune des images de la gallerie
                for(var j=0 ; j<imagesGallery.length ;j++){
                        //création du lien
                        var lien = document.createElement("a");
                        className[i].appendChild(lien);
                        lien.appendChild(imagesGallery[j]);
                        //création des attributs du lien
                        lien.setAttribute('rel', 'lightbox['+class+']');
                        lien.setAttribute('href', '/media/'+imagesGallery[j].src.split("/")[5]);
                        lien.setAttribute('title', '<h3>'+lien.title+'</h3><p>'+imagesGallery[j].alt+'</p>');
                        //alert(lien.innerHTML);
                }
        }

}

Et enfin, une fois que tout cela est fait, il ne reste plus qu'a lancer cette dernière fonction à la fin du chargement de la page. En n'oubliant pas de faire apple au même nom de class qui est mis sur le div en englobe nos images.

window.onload = function(){
        var classname = "gallery";
        if (getElementsByClassName(document, "div", classname).length>=1){
                createGallery(classname)
        }
}

Ces trois dernieres fonctions se trouvent aussi dans un fichier externe, il va falloir y faire appel comme précédemment :

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

Je laisse à disposition une archive contenant tout les fichiers susciétes

A vos claviers, il ne vous reste plus qu'à insérer cela dans vos annuaires, catalogues, articles préformatés, etc.

PS : si dans votre site vous avez déjà intégré du javascript avec la fonction onload, il est fort probable qu'il y ai un conflit avec deux fonctions onload. Si c'est le cas, n'hésitez pas à lire cet article

Billet original sur Simon Bonaventure

Les hacks de css

Internet Explorer 7 est sorti sous la forme d'une mise à jour récemment. Nombre d'entre nous ont du tester ce nouveau navigateur dans sa version beta (comme nous le proposait Ronan avec une double installation). IE7 fait un grand pas en avant dans le respect des standards. Il implémente à présent une grande partie de CSS 2 et gère notamment la transparence des PNG. IE7 reste toujours en retard vis à vis des autres navigateurs modernes (Firefox, Opéra ou Safari pour ne citer qu'eux), bien qu'il évolue dans le bon sens, soyons satisfait, voilà 5 ans que cela n'avait pas été le cas.

Bref, lors de vos intégrations, il y a certainement quelques hack de css qui doivent traîner quelque part, afin d'obtenir un affichage correct sur tous les navigateurs et aussi pour Internet Explorer... Car rappelons le, IE n'implémentait pas en complètement les standards et imposait donc les hacks de css. Les plus célèbres étant le bidouillage du « modèle de boîte Microsoft » ( « box model hack » ) en contradiction avec CSS2 et, jusqu'à la sortie d'IE7, la non-gestion de la transparence des images au format PNG. Malheureusement, chez Microsoft, ils n'ont pas jugé bon de faire de la rétro-compatibilité avec les hacks de css, donc ceux que vous pouviez utiliser peuvent soudainement être interprétés ou non par d'autres navigateurs...

Voici ce qui a changé dans internet explorer , et voici quelques sites avec des nouveaux hacks pour donner des styles différents selon les navigateurs et même les versions d'IE :

Billet original sur Simon Bonaventure