dimanche 26 juillet 2009

[spip] Boucle pour les traductions des articles

Je veux afficher les traductions de l'article en cours, avec la mention de l'article original si on n'est pas dessus. Mine de rien, c'est pas si simple, et ça donne :
<B_Original> <div class="auteuretc" align="right">
<:traducs:> <BOUCLE_Original(ARTICLES){traduction}{origine_traduction}{exclus}>
[<a href="#URL_ARTICLE"> (#LANG|traduire_nom_langue|unique)</a> <span class="petit_justifie">(original)</span> .]
</BOUCLE_Original> <B_traductions> <BOUCLE_traductions(ARTICLES){traduction}{exclus}>
[<a href="#URL_ARTICLE">(#LANG|traduire_nom_langue|unique)</a> .] </BOUCLE_traductions> </B_traductions> </div> </B_Original>
<B_Traducs> <div class="auteuretc" align="right"> <:traducs:> <BOUCLE_Traducs(ARTICLES){traduction}{exclus}>
[<a href="#URL_ARTICLE">(#LANG|traduire_nom_langue|unique)</a> .] </BOUCLE_Traducs> </div> </B_Traducs>
<//B_Original>

dimanche 19 juillet 2009

[spip] Menu dépliant sur clic

Voilà encore un menu pour un site Spip, qui donne le contenu des rubriques lorsqu'on clique sur celles-ci, mais sans aller dans la rubrique elle-même. Vous avez un exemple ici. Le top, c'est que le menu déplie la rubrique dans laquelle on se trouve.

Code javascript


function afficheMenu(obj){
var idMenu = obj.id;
var idSousMenu = 'sous' + idMenu;
var sousMenu = document.getElementById(idSousMenu);

if(sousMenu.style.display == "none"){
sousMenu.style.display = "block";
}
else{
sousMenu.style.display = "none";
}
}


Code HTML


<BOUCLE_RecupRub(RUBRIQUES){id_rubrique}>
<div id="ssmenu"> <BOUCLE_Menu(RUBRIQUES){meme_parent}{unique}{par num titre}>
<div class="ssmenu" id="menu#ID_RUBRIQUE" onclick="afficheMenu(this)">
<h4 class="ssmenu"> [(#TITRE|supprimer_numero)]</h4>
</div>
<div id="sousmenu#ID_RUBRIQUE" [(#EXPOSE{style="display:block;",style="display:none;"})] > <B_SsMenu> <div class="sssousmenu"> <ul>
<BOUCLE_SsMenu(ARTICLES){id_rubrique}{par num titre}{doublons nieces}>
[<li> <#EXPOSE{span,a href="#URL_ARTICLE"}[ class="(#EXPOSE)"]>
(#TITRE|supprimer_numero)</#EXPOSE{span,a}></li>] </BOUCLE_SsMenu> </ul> </div></B_SsMenu>
</div> </BOUCLE_Menu>
</div> </BOUCLE_RecupRub>


Code CSS


#ssmenu{ margin:10px 0; width:230px;}
.ssmenu{ display:block; padding:1px 0 3px 3px; background:#ebcccc; color:#000; text-decoration:none; cursor:hand; cursor:pointer; margin:0 0 5px 0; }
.sssousmenu{ width:220px; padding:5px; background:#e0e2e9; color:#000; margin:-10px 0 5px 0; }
.sssousmenu a{ width:100%; height:100%; color:#000; font-size:.9em; text-decoration:none; background:#e0e2e9; margin:0; }

dimanche 12 juillet 2009

[css] display:inline-block; sur tous les navigateurs

Voici un hack qui permet à la propriété CSS inline-block d'être compatible avec la plupart des navigateurs actuellement en circulation. Cette propriété permet non seulement d'aligner une liste d'éléments (un classique du CSS), mais en plus de considérer chaque élément comme un "bloc" et ainsi aller à la ligne lorsque celui-ci ne tient pas sur l'espace demandé.

Le code HTML pour l'exemple :
<ul class="ssrubs">
<li> mon 1er élément </li>
<li> mon 2ème élément </li>
</ul>


Le code CSS :
ul.ssrubs li {
display: -moz-inline-stack;
display:inline-block;
zoom: 1;
*display: inline;
}


Et ça fonctionne avec IE6, IE7, toutes les versions de Firefox, et Google Chrome.

Exemple ici.

dimanche 5 juillet 2009

[spip] N'afficher le code des commentaires que si les forums sont activés sur l'article

Sur un site, les forums des articles ne sont activés que par-ci, par-là, aux choix des utilisateurs. J'ai donc inclus des boucles pour afficher les commentaires et puis le formulaire pour en laisser. Je souhaite que ces boucles ne s'intègrent à l'article que lorsque les commentaires sont activés :
- D'abord je créé un fichier d'inclusion, que je nomme inc-commentaires.html, et j'y écris les boucles que je veux afficher si les commentaires sont activés :
<h2><BOUCLE_NbreCommentaires(FORUMS){id_article}{plat}></BOUCLE_NbreCommentaires>[(#TOTAL_BOUCLE)
[(#TOTAL_BOUCLE|>{1}|?{<:coms:>,<:com:>})] ]
<//B_NbreCommentaires> </h2>
<B_Commentaires> <BOUCLE_Commentaires(FORUMS){id_article}{plat}{!par date}> <a name="forum#ID_FORUM"></a>
<div class="forums_texte"> [<strong>(#TITRE)</strong> <br />]
[(#TEXTE|image_reduire{600})]</div>
<h5 class="forums"> <:comauteur:>
<[(#EMAIL|?{a href="mailto:#EMAIL",span})]>[(#NOM|sinon{<:visiteur:>})]</[(#EMAIL|?{a,span})]>[,
<a href="#URL_SITE">(#NOM_SITE)</a>] [<:le:> (#DATE|affdate)] </h5></BOUCLE_Commentaires>
</B_Commentaires> <//B_Commentaires>
<p>&nbsp;</p>

Au passage, à l'intérieur de ce code se trouve ceci :
[(#TOTAL_BOUCLE) [(#TOTAL_BOUCLE|>{1}|?{<:coms:>,<:com:>})] ], qui nous permet d'écrire "commentaire" au singulier s'il n'y a qu'un seul article, et "commentaires" au pluriel dans le cas contraire.

- Puis, dans mon squelette article.html, j'écris le code suivant :
[<INCLURE{fond=inc-commentaires}{id_article}>(#FORMULAIRE_FORUM)]

et voilà !