Powrót

Funkcje budujące menu z tablicy zawierającej strukturę menu. Można też wykorzystać do logicznego przedstawienia struktury danych lub innych rzeczy. Po drobnych modyfikacjach można osiągnąć niezłe rezultaty. Mam nadzieję, że komuś to ułatwi życie.

Przykładowa tablica ze strukturą danych:
$m[]="root/mynthon"
$m[]="root/mynthon.net"
$m[]="root/mynthon/majo"
$m[]="root/mynthon/harry"
$m[]="root/mynthon.net/canon"
$m[]="root/mynthon.net/canon/fotki"
$m[]="root/mynthon.net/canon/zdjęcia"
$m[]="root/mynthon.net/kontakt"
$m[]="root/mynthon.net/mail"
$m[]="root/mynthon.net/mail/adres"
$m[]="root/mynthon.net/mail/adres/kontakt"
$m[]="root/mynthon/harry/sieć"

Najpierw dane należy posortować i zbudować z nich tablicę wielowymiarową o odpowiedniej strukturze. Funkcja cmp() wspomaga sortowanie i jest użyta w funkcji usort(), której dokładny opis można znaleść w dokumentacji PHP.

<?php
function cmp($a, $b){
   return strcmp(strtolower($a), strtolower($b));
}

function createArray($links){
	usort($links, "cmp");
	foreach($links as $key => $value){
		$links[$key]=explode("/", $value);
	}
	return $links;
}
?>

Funkcja tworząca strukturę menu. W miarę potrzeb można dodawać kolejne zagnieżdżenia dodając warunki elseif $value[poziom_zagnieżdzenia] == null. Warunki muszą być w odpowiedniej kolejności i muszą być oczywiście dodawane przed "ostatecznym" else.

<?php
function buildCatArr($array){
	$struct=Array();
	foreach($array as $key => $value){
	if ($value[2]==null){
		$struct[$value[1]]=Array();
	}elseif($value[3]==null){
		$struct[$value[1]][$value[2]]=Array();
	}elseif($value[4]==null){
		$struct[$value[1]][$value[2]][$value[3]]=Array();
	}else{
		$struct[$value[1]][$value[2]][$value[3]][$value[4]]=Array();
		}
	}
	return $struct;
}
?>

Ostatnia funkcja - buildCat(), budująca strukturę wizualną i wywołanie funkcji.

<?php
function buildCat($struct, $offset){
        $output.="<ul id=\"list$offset\">\n";
        $i=0;
        foreach($struct as $key => $value){
	    
	    if (!empty($value)){
		$i++;
		$v=$offset.$i;
		$output.="<li>$key";
		$output.= buildCat($value, $v)."</li>";
	    }else{
		$output.="<li>$key</li>\n";
	    }
        }
        $output.="</ul>\n";
        return $output;
}
echo buildCat(buildCatArr(createArray($m1)), 0);
?>

I na koniec lista wygenerowana przez skrypt. Należy zauważyć, że każdej liście jest nadawane unikatowe id, co można wykorzystać w skryptach JavaScript.

Jeśli nadal te funkcje sprawiają Ci kłopot, możesz ściągnąć przykładowy plik PHP. Jeśli znalazłeś jakieś błędy lub masz uwagi - napisz do mnie. Adres znajdziesz na stronie głównej.