Deuxième pas en jQuery sous Dotclear 2, effet d'arrondi avec le thème alto
Par pyeb le jeudi 25 janvier 2007, 11:45 - Lien permanent
Des scripts existent pour jQuery déjà prêts à l'emploi ou presque ! En dehors de Tabs, un autre morceau code m'avait intéressé en terme d'exemple : Round Corner. Mais, il a un léger problème à mes yeux, il ne fonctionne pas avec Safari… Et je l'utilise ! Je me suis donc tourné vers son cousin Curvy Corners qui fonctionne sous Firefox, Internet Explorer, Safari et Opera.
Leur intérêt réside à ne pas utiliser d'images pour faire des coins non carrés et surtout de ne pas modifier la structure de Dotclear. Ma victime idéale est le thème alto qui utilise des coins arrondis pour les billets, les éléments de listes de la barre de menu et les commentaires.
De suite, je vous livre le thème altowithjQuery. Par ailleurs, les modifications du fichier style.css ne seront explicitées que si elles interagissent directement avec le code javascript.
Le thème fonctionne avec la version jQuery de Dotclear 2 beta 5 et la 1.1.
Effet d'arrondi
Il faut modifier le fichier _head.html pour inclure le jQuery, celui contenu dans le thème default - et le script Curvy Corners - inclus dans le thème altowithjQuery.
<script src="
tpl:BlogThemeURL/../default/js/jquery.js" type="text/javascript"></script>
<script src="tpl:BlogThemeURL/jq-corner.js" type="text/javascript"></script>
En terme de feuille de style, les aplats de couleurs sont définis pour chaque zone à arrondir comme le contenu des billets (.post) ou les listes des catégories (#sidebar .categories). Sur chacune de ces zones, le padding a été porté à 10px (padding: 10px;).
J'ai essayé d'optimiser l'effet arrondi car ce script est très consommateur de temps processeur, c'est un euphémisme… Il vaut mieux limiter le nombre de billet ainsi que le nombre de widget. De même, lors de recherche d'éléments de feuille de style, jQuery trouve plus rapidement les id - comme #top - que les balises html - comme div - que les classes - comme .links. Il est préférable d'utiliser #sidebar .links que .links.
Pour appliquer le même effet sur plusieurs zones, les tableaux sont acceptés ("elem1,elem2,…,elemn"). Le code, avec ouverture du DOM, donne.
<script type="text/javascript">
$(document).ready(function() {
$("#sidebar ul,#comments dd,#pings dd,#comment-form .hidecomment-form,#attachments ul,#content .post,#content .content-inner ul, body.dc-archive-month .content-inner, body.dc-tags ul.tags").corner();
});
</script>
Pour les arrondis, c'est déjà fini. Il y a plus à écrire dans la feuille de style que pour le code javascript ! Les arrondis débordent sur les éléments les précédents et les suivants, il est donc nécessaire de modifier l'espacement entre les différents éléments.
Une bannière changeante
Le thème alto utilise le php pour modifier la bannière du blog. Avec Dotclear 2, il est nécessaire de passer par un template et un fichier _public.php pour le thème.
Le thème contient 3 bannières que j'ai renommé round0.jpg, round1.jpg et round2.jpg. Dans un fichier _top.html, un script javascript de base est suffisant comme
<script type="text/javascript">
<!--
document.write("<img src='tpl:BlogThemeURL/img/round" + parseInt(Math.random()*3) + ".jpg' alt='banner' />");
-->
</script>
Mais, le script jQuery sera dans le _head.html.
Tout d'abord, il est nécessaire d'ajouter comme première ligne au fichier _top.html.
<div id="banner"> </div>
Dans la feuille de style, il est créé l'espace nécessaire à l'image de fond puis le titre du blog est positionné sur la bordure noire des bannières et doit apparaître après le chargement de la bannière (z-index). Une classe par image est créée (round(n)).
#banner {
display : block;
position : absolute;
background-color: transparent;
width: 723px;
height: 150px;
top : 69px ;
left : 79px ;
z-index: 1;
padding: 0;
}
.round0 { background : transparent url(img/round0.jpg) no-repeat top left; }
.round1 { background : transparent url(img/round1.jpg) no-repeat top left; }
.round2 { background : transparent url(img/round2.jpg) no-repeat top left; }
#top h1 {
position : absolute;
top: 165px;
left: 83px;
z-index: 2;
}
Pour fonctionner, le code pour l'affichage de la bannière doit être positionner avant l'effet d'arrondi. Il est donc positionné entre la déclaration du code javascript au DOM et le script sur les parties s'affichant après le _top.html. Le nombre aléatoire s'appuie sur le même code javascript standard, la fonction jQuery addClass permet d'ajouter une classe à la division #banner. Comme tout javascript, il est possible de constituer les éléments avec des variables et concaténation.
var round = parseInt(Math.random()*3);
$('#banner').addClass('round'+round);
Des fioritures pour l'affichage d'un billet
Le formulaire des commentaires occupe un espace important. Il est facile de l'afficher/masquer en se basant sur l'exemple précédent. Pour une meilleure utilisation, le fichier _post.html par défaut sera modifié. Un div (.hidecomment-form) est ajouté encadrant les deux fieldset de la division #comment-form ainsi le titre Ajouter un commentaire (h3) servira de bouton pour afficher/masquer le formulaire.
Comme le code ne concerne que l'affichage d'un billet et post.html est déjà modifié, le code est ajouté à ce fichier avant la division #comment-form.
<script type="text/javascript">
$(document).ready(function() {
$(".hidecomment-form").hide();
$("#comment-form h3").click(function() {
var answer = $(this).next();
if (answer.is(':visible')) {
answer.slideUp() } else {
answer.slideDown();
}
});
});
</script>
La division contenant le formulaire des commentaires est cachée. Elle s'affiche/masque après un clic que Ajouter un commentaire avec un effet descendre/monter. Cela pourrait être suffisant mais lors d'une prévisualisation, le formulaire reste cacher et il faut de nouveau cliquer pour modifier ou pour envoyer le commentaire.
Je fais une vérification pas très orthodoxe de la présence de la division #pr. Je vérifie si elle est visible alors le formulaire des commentaires est affiché sinon il est masqué. #pr est préféré à .comment-preview pour la rapidité comme expliquer plus haut. La ligne de masquage du formulaire est remplacé par
if ($('#pr').is(':visible')) {$('.hidecomment-form').show()} else {$(".hidecomment-form").hide()};
Conclusion
Le thème altowithjquery est donc « kitté » à mort.
Avec un core 2 duo sous Mac OS X et un serveur local, 3 à 4 secondes sont nécessaires pour charger la bannière et obtenir les effets d'arrondis pour 20 billets et 8 listes dans la barre de menu. Avec un hébergement 1and1 et 9 effets d'arrondi, le chargement s'effectue en 4/5 secondes. Dans l'ordre de rapidité arrive Opera - quasi instantané -, Safari - bizarrement ! - et Firefox.
Avec un bon vieux Pentium III à 866 Mhz et windows 2000, on se traînaille à 6/7 secondes en accès sur ce site. La lenteur se voit car la bannière et les coins arrondis se font en même temps sous IE.
Visualiser le thème.
Commentaires
tres intéressant, surtout quand comme moi, on ne connait pas le javascript! je vais me servir de tes supports pour intégrer le changement de bannière et l'apparition des divs (tags, commentaires)... la prochaine lecon, c'est les tabs?
Oui mais pour le moment, c'est pas qui coince… C'est l'enrobage.
J'ai un probleme avec ce theme sous IE7, lorsqu'il charge la page, il charge bien les video type youtube mais lorsqu'il a fini de charger le page, les videos n'apparaissent plus, impossible de savoir pourquoi.
gros gros pb de lenteur avec ce thème...
La ligne $("#sidebar ul,#comments dd,#pings dd,#comment-form .hidecomment-form,#attachments ul,#content .post,#content .content-inner ul, body.dc-archive-month .content-inner, body.dc-tags ul.tags").corner();
coute environ 2 secondes de chargement en +.
A quand une version avec des coins arrondis en image?
Thanks,
stacK
Le but du billet était justement de ne pas utiliser d'images. oO)
Hello ! Beau boulot !
Cependant, peux-tu me dire comment retirer le nom du blog de la bannière (puisqu'il est intégré en image dans mes bannières), et éventuellement, faire en sorte que ce soit l'image bannière qui soit cliquable pour retourner sur l'index.
Merci d'avance
Bonjour et grand merci pour ce thème que j'utilise déjà .
J'ai la même question que Denis. Comment puis-je enlever le titre qui s'affiche avec la bannière ?
La réponse est là.
Parfait..
Excellent travail ! Merci
J'ai un petit souci avec le Theme altowithjquery. En effet certaine catégorie présente dans le bandeau d'extra ne s'affiche pas comme le reste de catégorie. La il s'agit du bandeau "Liens de navigation". Comment faire pour qu'il saffiche comme il faut?
C'est fait exprès !
Il faut ajouter
#topnav ulà la liste qui doit être prise en compte parcorner()dans le fichier _head.html. Il Faut également ajouter#topnav uldans le fichier style.css dans une des règles qui définissent la couleur de fond, à toi de choisir la couleur.Salut.
Je teste ce thème pour mon tout nouveau tout beau blog, en espérant qu'il ne soit pas trop long à charger, vu que je risque d'avoir rapidement pas mal d'images. Bon boulot, en tout cas, il est visuellement très réussi!
Je n'ai fait que porter le thème sous Dotclear 2, il n'est pas de moi.
Bonjour,
je triture actuellement le thème d’origine pour essayer d’obtenir une version dc1 avec js. J’ai donc récupéré les javascript du thème et du Blue Silence de dc 2 ß 7 et j’obtiens des erreurs javascript (langage dont j’ignore tout), un affichage insatisfaisant dans ie6 et une interprétation fantaisiste des adresses internes (en local, le ~ n’est pas correctement traité et je reste sur la home quand j’essaye d’atteindre un billet).
Je me permets de te demander si tu as des pistes à me suggérer (sinon c’est pas grave, je vais me pendre :D ).
Le bouzin est visible ici http://lomalarch.free.fr/tanablog/?... et je peux mettre à ta disposition un paquet ou une archive pour dc1 (si tu veux y voir de plus prêt).
Merci de m’avoir lu
Là, je suis coincé avec IE7 et bloc-note donc je verrais avec de vrais outils ce soir. Par contre, le thème fonctionne. Sinon, c'est bizarre que l'effet d'arrondi ne fonctionne pas avec la syndication.
Merci de t’intéresser à mon cas,
je ne te le fais pas dire, concernant le bloc de syndication (ça fonctionne dans FF, bien sûr). Mon hypothèse est que ça a à voir avec le fait que c’est le dernier bloc à arrondir. Je n’ai obtenu les arrondis sur les blocs des billets et commentaires qu’en changeant l’ordre des instructions de traitement dans l’entête de page O_o
Le thème fonctionne, oui… sauf si l’adresse du blog comporte un "~" (uniquement dans FF, pour le coup :'( ).
Et merci encore de ta sollicitude
Pour les arrondis, j'ai rajouté 20px de marge haut/bas. J'avoue que je ne souviens plus si c'était pour IE… :roll: Par contre, jQuery trouve les objets à traiter plus rapidement dans cette ordre id, balise, classe.
Sinon pour revenir à IE, il trouve une erreur à la ligne 340 et avec Firefox ou Safari, il y a moins de 340 lignes… Le détail de l'erreur est évidemment abscons.
Pour le ~, j'en ai aucune idée ! Il y aurait pas un bug de Firefox avec le tilde ?
Je progresse \o/
J’ai mis le doigt sur (une partie de) mon erreur : je voulais un seul encadrement de bloc sur la blogroll. Du coup j’avais une ul autour, mais je pense qu’IE n’appréciait pas cet enchevêtrement de listes (des h3 dans des li, je me demande si ça ne suffit pas à mettre le waï)
J’ai donc remplacé la liste de liens par une dl dont les dt sont les catégories et les dd les liens eux-mêmes. Pas incohérent d’un point de vue sémantique, propre et j’ai récupéré un traitement normal des arrondis.
En revanche, pas de piste pour les ~ qui, naturellement, fonctionnent sans coup férir avec ton thème dc2. Certainement un bug lié au DOM de FF est « compensé » dans DC2
Le ligne 340 était sans doute une ligne du fichier jquery avec un objet indéfini à cause de la l’imbrication sus-visée.
Merci encore de ton soutien \o/
Vue qu'IE 7 n'entoure pas la
dl, va comprendre... Et quitte à retouche le code, je pense qu'il serait plus simple de mettre la catégorie dans uneliet lui affecter une classe avec le même style que#sidebar h3. En plus, pas d'objet supplémentaire pour jQuery.ie 7 n’entoure pas la dl ?! M’enfin, il m’en veut ce truc ! Tu pourrais me faire une capture ?
Je ne suis pas convaincu par le fait de mettre les intertitres au même niveau que les liens (pas satisfaisant sémantiquement)… raaah.
IE 7 marchait pas au boulot et là chez moi, il marche ! Quelle daube ce navigateur ! C'est bizarre que cela vienne du cache, l'effet fonctionnait sur la syndication et le source indiquait bien
#sidebar dl. Cela voudrait peut-être dire qu'IE 7 n'a pas recharger le fichier style.css…Sinon, un truc que j'avais oublié, avec Safari 3, le quadrillage du calendrier n'apparaît pas. Trop fin ?
J’ai fait quelques ajustages dans la css (la bordure des cellules avait effectivement une valeur fantaisiste) et mis sur http://themes.dotaddict.org.
Merci de ton suivi.
Bonsoir!
J'ai le même problème que Folken:
" J'ai un probleme avec ce theme sous IE7, lorsqu'il charge la page, il charge bien les video type youtube mais lorsqu'il a fini de charger le page, les videos n'apparaissent plus, impossible de savoir pourquoi."
Il y a un code javascript qui fait recharger la page et vire les Youtube...c'est très embêtant...quelqu'un a trouvé la parade?
Sinon qui a l'origine a fait ce thème?
Il faudrait que je penche un jour sur la question... J'essaierai de voir si les améliorations effectuées depuis la sortie de la beta 7 et intégrant un player flash propre à DC2, contourne le problème.
Sinon, le thème est l'oeuvre de la société Alto studio.
C'est vrai que je n'ai pas planché non plus sur la chose pendant des jours...mais je pense que ça vient très certainement du javascript qui permet d'afficher le formulaire pour ajouter un commentaire...
Bonsoir,
Je débute sous dotclear2... j'adore ce theme, le probleme c'est que tout se charge bien, mais quand j'essaie d'ouvrir mon site, le bandeau ne s'affiche pas et j'ai une erreur javascript : Object doesn't support this property or method
Pouvez-vous m'aider s'il vous plais
Merci d'avance
Mathieu
Je sais que jQuery fonctionne au moins sous IE 6 & 7, Firefox 2, Safari 2 & 3 et Opera 9. C'est quoi ton navigateur et sa version ?
J'ai IE 6
J'ai juste pris tel quel ton template sans y apporter aucune modif, mais ca ne marche pas
Merci en tout cas
mahtieu
Vérifie que la version de jQuery qui est dans le thème par défaut est supérieur à 1.1. Si c'est la cas, c'est aussi le signe que ta version de DC2 n'est pas sécurisée (inférieure à la beta 7).
bonjour,
je viens de lancer la demande de base "postgresql" auprès de free ..
j'espère pouvoir mettre mon blog en ligne très vite ...
sauf ...
sauf que là passé les 10 premiers billets qui s'affichent impec avec des cadres arrondis aux angles et tout et tout ...
les suivants sont tous collés les uns aux autres
et la colonne des catégories et autres liens est passée carrément tout en bas des billets au lieu de rester à droite comme au début.
bref ça foire tout à coup sans que je sache pourquoi ...
je n'ai fait qu'écrire des billets moi ....
peut être y a t-il trop de billets ? à partir de combien passe t-on à la page suivante ??
ah oui ... je n'ai pas précisé :
dotclear 2 beta 7
altowithjquery
navigateur firefox 2
site en local via easyphp ...
encore moi : je n'ai pas précisé non plus que le problème d'affichage de la colonne "catégories" ne se pose que sur la page "index" ..
sur les autres pages : la colonne est bien à droite ....
une solution ?
Tu as un problème avec le contenu d'un billet.
Tu peux faire un copie d'écran contenant le billet avant et celui où les arrondis ne fonctionnent pas. Et également me dire les balises html particulières qui sont incluses.