Modifier la présentation du blogroll avec des listes imbriquées
Par Benjamin le vendredi 9 décembre 2005, 02h11 - DotClear - Lien permanent - URL miniature
Kozlika a posé une question intéressante sur le forum DotClear et je n'ai donc pas pu résister à la résoudre (super chinois ?). L'idée était donc de modifier l'affichage du blogroll pour permettre l'utilisation de listes imbriquées. Voilà qui est fait, c'est donc possible moyennant les menus changements que nous allons évoquer.
Le problème
La présentation par défaut du blogroll correspond donc à ceci :
geshi html4strict
<h3>Première catégorie</h3>
<ul>
<li>Lien 1</li>
<li>Lien 2</li>
<li>etc.>
</ul>
<h3>Deuxième catégorie</h3>
<ul>
<li>Lien 1</li>
<li>Lien 2</li>
<li>etc.>
</ul>
etc.
Et l'idée était de l'afficher comme ça :
geshi html4strict
<ul>
<li>Première catégorie
<ul>
<li>Lien 1</li>
<li>Lien 2</li>
<li>etc.>
</ul>
</li>
<li>Deuxième catégorie
<ul>
<li>Lien 1</li>
<li>Lien 2</li>
<li>etc.>
</ul>
</li>
</ul>
La solution
Aperçu de la fonction avec ses petites modifications :
geshi php
function linkList($category='<h3>%s</h3>',$block='<ul>%s</ul>',$item='<li>%s</li>')
{
global $con, $blog;
if (($rs_link = $con->select(
' SELECT label, href, title, lang, rel FROM ' . $blog->t_link
. ' ORDER BY position')) !== false) {
$res = '';
while (!$rs_link->EOF()) {
$label = $rs_link->f('label');
$href = $rs_link->f('href');
$title = $rs_link->f('title');
$lang = $rs_link->f('lang');
$rel = $rs_link->f('rel');
if (! $label && ! $href) {
if ('' != $res) {
#printf($block,$res);
/* début ajout */
$res2 = sprintf($block,$res);
/* fin ajout */
}
#printf($category, $title);
/* début ajout */
if (!empty($res)) {
$res3 .= sprintf($category,$cattitle,$res2);
}
$cattitle = $title;
/* fin ajout */
$res = '';
} else {
$link =
'<a href="'.htmlspecialchars($href).'"'.
((!$lang) ? '' : ' hreflang="'.htmlspecialchars($lang).'"').
((!$title) ? '' : ' title="'.htmlspecialchars($title).'"').
((!$rel) ? '' : ' rel="'.htmlspecialchars($rel).'"').
'>'.
htmlspecialchars($label).
'</a>';
$res .= sprintf($item,$link);
}
$rs_link->moveNext();
}
/* début ajout */
$res2 = sprintf($block,$res);
$res3 .= sprintf($category,$cattitle,$res2);
/* fin ajout */
if ('' != $res) {
#printf($block,$res);
/* début ajout */
printf($block,$res3);
/* fin ajout */
}
}
}
Utilisation
On peut donc désormais utiliser la syntaxe suivante dans notre blog :
geshi php
<?php dcBlogroll::linkList('<li>%1$s %2$s</li>'); ?>
Si ça c'est pas la fête 
Commentaires
Bonjour,
Est-il possible de utiliser le générateur de titre-image (http://www.dotclear.net/trac/wiki/DotCl … ler/EnVrac) dans le blogroll ?
Merci de ton aide.
K
oui c'est possible, de même que copier un lien abrégé,
mais ça c'est moins malin
tu peux donc copier la fonction linkList du blogroll dans ton prepend.php
et remplacer la ligne htmlspecialchars($label). par le create_title de la bidouille
non ?
Merci beaucoup pour cette petite astuce, j'ai maintenant un joli menu pour les liens !!