<?php
class cTree
{
var $aTree;
var $brozwiniete;
function cTree($brozwiniete=true) {
$this->brozwiniete=$brozwiniete;
?>
<link href="css/tree.css" rel="stylesheet" type="text/css" />
<script language="javascript">
function zwin_rozwin(id,ile,ids,ukryj,lewel) {
// id - id elementu kliknietego
// ile - ilosc elementow potomych
// ids - id wszystkich elementow potomnych dla wybranego wezla
// ukryj - 1 lub 0. jesli 1 ukrywa line pionowe dla ostaniego elementu drzewa
// lewel - aktualny poziom drzewa
if(ids.length>0) aids = ids.split(" ");
// pokazywanie i ukrywanie podgalezi
var bclose = false; // zmienna okreslajaca, czy zamykac galaz drzewa
for(i=1;i<=ile;i++) {
el = eval("document.getElementById(""+id+"_"+i+"")");
if(el.style.display == "block") {
el.style.display = "none";
bclose = true;
}
else {
el.style.display = "block";
}
}
var img_src, img_src_plus, img_src_child, img_linia; // zmienne zawierajace obrazki
el_img = eval("document.getElementById(""+id+"_img")");
el_img_plus = eval("document.getElementById(""+id+"_img_plus")");
img_src = el_img.src;
img_src_plus = el_img_plus.src;
// podmiana ikony folderu zamknietego i otwartego, jesli uzywa folderu
if(img_src.match("/dir")) {
if(bclose) el_img.src = "img/tree/dir.gif";
else el_img.src = "img/tree/dir_open.gif";
}
// podmiana plusa i minusa
if(bclose) {
if(img_src_plus.match("/tree_101.gif")) el_img_plus.src = "img/tree/tree_100.gif";
if(img_src_plus.match("/tree_103.gif")) el_img_plus.src = "img/tree/tree_102.gif";
}
else {
if(img_src_plus.match("/tree_100.gif")) el_img_plus.src = "img/tree/tree_101.gif";
if(img_src_plus.match("/tree_102.gif")) el_img_plus.src = "img/tree/tree_103.gif";
}
// ukrycie niepotrzebnych lini pionowych na koncu drzewa
if(ids.length>0 && ukryj==1) {
for(j=0;j<aids.length;j++) {
for(k=0; k<lewel; k++) {
el_linia = aids[j] + "_" + lewel + "_linia";
img_linia = eval("document.getElementById(""+el_linia+"")");
img_linia.style.display = "none";
}
}
}
// ukrywanie galezi drzewa
if(ids.length>0 && bclose) {
for(j=0;j<aids.length;j++) {
el_child = eval("document.getElementById(""+aids[j]+"")");
el_child.style.display = "none";
el_img_child = eval("document.getElementById(""+aids[j]+"_img")");
el_img_child_plus = eval("document.getElementById(""+aids[j]+"_img_plus")");
if(el_img_child_plus) {
if(el_img_child_plus.src.match("/tree_101.gif")) el_img_child_plus.src = "img/tree/tree_100.gif";
if(el_img_child_plus.src.match("/tree_103.gif")) el_img_child_plus.src = "img/tree/tree_102.gif";
}
}
}
}
</script>
<?php
}
function renderTree($aTree) {
return $this->buildTree($aTree);
}
function buildTree
($aTree,$level=0
,$idup=0
,$arods=array()) { $level++;
for($i=0
,$count=count($aTree);$i<$count;$i++) { $blast = ($i==$count-1);
$row = $aTree[$i];
$row['id'] = $i+1;
$id_tab = $idup.'_'.$row['id']; // id wiersza (galezi)
// sprawdzenie czy galaz ma elementy potomne
$nchildren = count($row['child']); // ilosc elementów potomnych $sids = trim($this->getAllChildren($row['child'],$id_tab)); // id wszystkich potomnych elementow
if($i==($count-1)) $ukryj = 1;
else $ukryj = 0;
$link_start = '<span style="cursor:hand;" onclick="zwin_rozwin(''.$id_tab.'',''.$nchildren.'',''.$sids.'',''.$ukryj.'',''.$level.'');">';
$link_end = '</span>';
}
// ukrywanie galezi drzewa
if($level>1 && !$this->brozwiniete) $style = ' style="display:none;" ';
else $style = ' style="display:block;" ';
$sout .= '<table border="0" width="100%" cellpadding="0" cellspacing="0" '.$style.' id="'.$id_tab.'">';
$sout .= '<tr>';
// dodatkowe pola przed nazwa elementu (na ikonki i linie nawigacyjne)
$arodsnow = $arods;
$arodsnow[$level]=($i==$count-1);
for($j=1;$j<$level;$j++) {
$sout .= '<td width="17">';
if($arodsnow[$j]) $sout .= '<img src="img/tree/tree_01.gif" id="'.$id_tab.'_'.$j.'_linia" alt="j='.$j.' lev='.$level.' blast='.$blast.'"/>';
else $sout .= '<img src="img/tree/tree_02.gif" id="'.$id_tab.'_'.$j.'_linia" alt="j='.$j.' lev='.$level.' blast='.$blast.'"/>';
$sout .= '</td>';
}
$sout .= "n<td width="17"><nobr>";
if($count==($i+1)) {
if($row['child']) {
if($this->brozwiniete) $sout .= $link_start.'<img src="img/tree/tree_103.gif" id="'.$id_tab.'_img_plus" />'.$link_start;
else $sout .= $link_start.'<img src="img/tree/tree_102.gif" id="'.$id_tab.'_img_plus" />'.$link_start;
}
else $sout .= '<img src="img/tree/tree_04.gif" />';
}
else {
if($row['child']) {
if($this->brozwiniete) $sout .= $link_start.'<img src="img/tree/tree_101.gif" id="'.$id_tab.'_img_plus" />'.$link_end;
else $sout .= $link_start.'<img src="img/tree/tree_100.gif" id="'.$id_tab.'_img_plus" />'.$link_end;
}
else $sout .= '<img src="img/tree/tree_03.gif" />';
}
$sicon = "img/tree/dir.gif";
if(!is_array($row['child'])) $sicon = "img/tree/tree_leaf.gif"; if($row['sicon']) $sicon = $row['sicon'];
$sout .= $link_start.'<img src="'.$sicon.'" id="'.$id_tab.'_img" />'.$link_end;
$sout .= '</nobr></td>';
$sout .= '<td>';
if($row['onclick']) $sout .= "<span class="tree_link" onclick="".$row['onclick']."">";
else $sout .= "<span class="tree_element">";
$sout .= $row['sname'];
if($row['onclick']) $sout .= "</span>";
$sout .= '</td>';
$sout .= '</tr>';
$sout .= "</table>nn";
$sout .= $this->buildTree($row['child'],$level,$id_tab,$arodsnow);
}
}
return $sout;
}
function getAllChildren($aArray,$idup)
{
for($i=0;$i<count($aArray);$i++) {
$id.=$idup.'_'.($i+1).' ';
if($aArray[$i]['child'])
$id.=$this->getAllChildren($aArray[$i]['child'],$idup.'_'.($i+1));
}
return $id;
}
}