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 :note: