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 :
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
lundi, avril 30 2007
Réaliser des aides pour les formulaires avec CSS et Javascript
Par Simon Bonaventure le lundi, avril 30 2007, 16:43
lundi, mars 5 2007
Comment faire un menu déroulant avec e-majine.
Par Simon Bonaventure le lundi, mars 5 2007, 14:42
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.
lundi, janvier 22 2007
Structure et mise en forme optimales d'une page XHTML ...
Par Simon Bonaventure le lundi, janvier 22 2007, 12:00
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.
lundi, décembre 4 2006
Faire une galerie d'images avancée ailleurs que dans un article en blocs
Par Simon Bonaventure le lundi, décembre 4 2006, 17:11
Une galerie, quoi ?
Dans l'interface d'administration e-majine manage, lorsque vous créez un article en bloc, vous avez la possibilité de faire un bloc de type médias. Configuration de ce bloc :
- Type : image - Affichage: galerie d'images - Insertion de plusieurs images composant cette galerie et enregistrement de leur ordre d'apparition - Cocher la case "vignettes" - les vignettes des images sont affichées par défaut, en cliquant dessus les images sont affichées à leur taille réelle. - Type de galerie : avancée - Choix de l'alignement
Comment elle fonctionne ?
Beaucoup d'entre vous apprécient 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ées pour afficher cela. Certains parlent de flash, d'autres d'AJAX... En fait, il s'agit de DHTML, qui n'est pas à proprement parler un unique langage mais une combinaison de technologies : Javascript, CSS et XHTML. La librairie utilisée pour faire ces galeries d'images provient du site lightbox.
Comment intégrer une galerie avancée ailleurs dans votre site ?
Faire appel aux fichiers externes
En suivant les recommandations du site de l'auteur, on s'aperçoit qu'il faut tout d'abord faire appel aux fichiers javascripts permettant de réaliser les effets de redimensionnement. Je vous conseille de déposer ces fichiers dans le dossier prévu à cet effet : "Scripts" se trouvant à 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 faut 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, elles-mêmes appelées à partir de la feuille de style :
<link rel="stylesheet" type="text/css" href="/modeles/fr/Modele1/css/gallery.css" title="normal" />
Définir le(s) endroit(s) où se trouvera la galerie d'images
Il est nécessaire ensuite de définir dans votre template, l'endroit où va se trouver la galerie d'images. Pour cela, il faut encapsuler les images dans un div qui devra porter un attribut de class que 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>
Amusons-nous avec le javascript et le DOM
Intégrons maintenant un nouveau fichier javascript ayant pour but de rajouter, avec le DOM, pour chaque image, le lien avec les bons attributs, permettant de faire afficher le galerie d'images. Dans ce fichier, nous allons tout d'abord commencer par écrire une fonction pour travailler avec les "classname".
function getElementsByClassName(strClass, strTag, objContElm) {
strTag = strTag || "*";
objContElm = objContElm || document;
var objColl = objContElm.getElementsByTagName(strTag);
if (!objColl.length && strTag == "*" && objContElm.all) objColl = objContElm.all;
var arr = new Array();
var delim = strClass.indexOf('|') != -1 ? '|' : ' ';
var arrClass = strClass.split(delim);
for (var i = 0, j = objColl.length; i < j; i++) {
var arrObjClass = objColl[i].className.split(' ');
if (delim == ' ' && arrClass.length > arrObjClass.length) continue;
var c = 0;
comparisonLoop:
for (var k = 0, l = arrObjClass.length; k < l; k++) {
for (var m = 0, n = arrClass.length; m < n; m++) {
if (arrClass[m] == arrObjClass[k]) c++;
if (( delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length)) {
arr.push(objColl[i]);
break comparisonLoop;
}
}
}
}
return arr;
}
La seconde fonction : à chaque fois que l'on va rencontrer le nom de la class, choisi sur notre div qui englobe les images de notre galerie, la fonction va détecter toutes les images. Pour chacune des images, il faut rajouter un lien dans le div parent, à ce lien. L'image est à insérer à l'intérieur et nous créons les attributs href, title et rel (qui va permettre de créer la galerie). Je vous fait grâce du fonctionnement de tout ça.
function createGallery(nameclass){
var className = getElementsByClassName(nameclass, "div", document);
for(var i=0 ; i<className.length ;i++){
var imagesGallery = className[i].getElementsByTagName("img");
for(var j=0 ; j<imagesGallery.length ;j++){
var lien = document.createElement("a");
className[i].appendChild(lien);
lien.appendChild(imagesGallery[j]);
lien.setAttribute('rel', 'lightbox['+nameclass+']');
lien.setAttribute('href', '/media/'+imagesGallery[j].src.split("/")[5]);
lien.setAttribute('title','<h3>'+imagesGallery[j].alt+'</h3>');
}
}
}
Et enfin, une fois que tout cela est fait, il ne reste plus qu'à lancer cette dernière fonction à la fin du chargement de la page. En n'oubliant pas de faire appel au même nom de class, mis sur le div qui englobe nos images.
window.onload = function(){
var classname = "gallery";
if (getElementsByClassName(classname, "div", document).length>=1){
createGallery(classname)
}
}
Ces trois dernières fonctions se trouvent aussi dans un fichier externe, il est nécessaire d'y faire appel comme précédemment :
<script type="text/javascript" src="/scripts/Gallery.js"></script>
Je laisse à disposition une archive contenant tous les fichiers suscités
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 ait un conflit
avec deux fonctions onload. Si c'est le cas, n'hésitez pas à lire cet article
EDIT : attention, pour la fonction createGallery à ne pas utiliser le paramètre "class" qui est un mot réservé pour Internet Explorer
Les hacks de css
Par Simon Bonaventure le lundi, décembre 4 2006, 10:23
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 trainer 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 :