/** * Retourne une liste HTML des rubriques enfants d'une rubrique * * @uses extraire_article() * * @param int $id_rubrique * Identifiant de la rubrique parente * @param string $titre_rubrique * Titre de cette rubrique * @param int $zdecal * Décalage vertical, en nombre d'élément * * @return string * Code HTML présentant la liste des rubriques **/ function bandeau_rubrique($id_rubrique, $titre_rubrique, $zdecal) { static $zmax = 6; $nav = "<a href='" . generer_url_entite($id_rubrique, 'rubrique', '', '', false) . "'>" . supprimer_tags(preg_replace(',[\\x00-\\x1f]+,', ' ', $titre_rubrique)) . "</a>\n"; // Limiter volontairement le nombre de sous-menus if (!--$zmax) { $zmax++; return "\n<li>{$nav}</li>"; } $arr_rub = extraire_article($id_rubrique, $GLOBALS['db_art_cache']); $i = sizeof($arr_rub); if (!$i) { $zmax++; return "\n<li>{$nav}</li>"; } $nb_col = 1; if ($nb_rub = count($arr_rub)) { $nb_col = min(10, max(1, ceil($nb_rub / 10))); } $ret = "<li class='haschild'>{$nav}<ul class='cols_{$nb_col}'>"; foreach ($arr_rub as $id_rub => $titre_rub) { if (autoriser('voir', 'rubrique', $id_rub)) { $titre = supprimer_numero(typo($titre_rub)); $ret .= bandeau_rubrique($id_rub, $titre, $zdecal + $i); $i++; } } $ret .= "</ul></li>\n"; $zmax++; return $ret; }
function bandeau_rubrique($id_rubrique, $titre_rubrique, $zdecal, $largeur, $image='') { global $spip_lang_left; static $zmax = 6; $nav = "<a href='" . generer_url_ecrire('naviguer', 'id_rubrique='.$id_rubrique) . "'\nclass='bandeau_rub$image' style='width: " . $largeur . "px;'>\n " . supprimer_tags(preg_replace(',[\x00-\x1f]+,', ' ', $titre_rubrique)) . "</a>\n"; // Limiter volontairement le nombre de sous-menus if (!(--$zmax)) { $zmax++; return "\n<div>$nav</div>"; } $arr_rub = extraire_article($id_rubrique, $GLOBALS['db_art_cache']); $i = sizeof($arr_rub); if (!$i) { $zmax++; return "\n<div>$nav</div>"; } $pxdecal = max(15, ceil($largeur/5)) . 'px'; $ret = http_script("// http://doc.spip.org/@bandeauHover // http://doc.spip.org/@bandeauHover function bandeauHover(r) { if (!$(r).is('.hovered')) $(r) .addClass('hovered') .children('.bandeau_rub') .css('visibility', 'visible') // bizarre .show() .end() .hover( function(){\$(this).children('.bandeau_rub').show();}, function(){\$(this).children('.bandeau_rub').hide();} ); };"); $ret .= "<div class='pos_r' style='z-index: " . $zdecal . ";' onmouseover=\"bandeauHover(this);\">" . '<div class="brt">' . $nav . "</div>\n<div class='bandeau_rub' style='top: 14px; $spip_lang_left: " . $pxdecal . "; z-index: " . ($zdecal+1) . "'><table cellspacing='0' cellpadding='0'><tr><td valign='top'>"; if ($nb_rub = count($arr_rub)) { $nb_col = min(10,max(1,ceil($nb_rub / 10))); $ret_ligne = max(4,ceil($nb_rub / $nb_col)); } $count_ligne = 0; foreach( $arr_rub as $id_rub => $titre_rub) { $count_ligne ++; if ($count_ligne > $ret_ligne) { $count_ligne = 0; $ret .= "</td>"; $ret .= '<td valign="top" style="border-left: 1px solid #cccccc;">'; } if (autoriser('voir','rubrique',$id_rub)){ $titre = supprimer_numero(typo($titre_rub)); $ret .= bandeau_rubrique($id_rub, $titre, $zdecal+$i, $largeur); $i--; } } $ret .= "</td></tr></table>\n"; $ret .= "</div></div>\n"; $zmax++; return $ret; }