0

Tere!

Oleks vaja funktsiooni või klassi mis koostaks puu vaate (tree view), et olemasolevad andmed oleks id ja alluvus id. Hetkel on endal muidu üks klass kasutuses, mis oskab küll puu vaadet joonistada ja saab ka teada kus iga kirje on aga kirjetele joonte külge pookimine (kas siis piltide vms. abil) ei õnnestu.

puu peaks välja nägema järgmine

root
 +--kataloog1
 |   +--alamkataloog1
 |   +--alamkataloog2
 |   |  +--alamkataloog2.1
 |   |  +--alamkataloog2.2
 |   +--alamkataloog3
 +--kataloog2
    +--alamkataloog1
    +--alamkataloog2
    |  +--alamkataloog2.1
    |  +--alamkataloog2.2
    +--alamkataloog3
       +--alamkataloog3.1
       +--alamkataloog3.2

Hetkel on teada viimased punktid (+), kuid oleks vaja et need jooned oleksid alati õiges kohas ja ei jääks viimaste punktide juurde rippuma nagu allpool näites:

root
 +--kataloog1
 |   +--alamkataloog1
 |   +--alamkataloog2
 |   |  +--alamkataloog2.1
 |   |  +--alamkataloog2.2
 |   +--alamkataloog3
 +--kataloog2
 |  +--alamkataloog1
 |  +--alamkataloog2
 |  |  +--alamkataloog2.1

Ette tänades, Janek

flag
Kas tulemus peaks olema html, tekst või midagi muud? – egon May 6 at 17:13
On olemas masiiv mis joonistab puu, on teada ka mitu kohta sügavamale läheb iga kirje ja on teada iga sügavuse viimane kirje. Oleks vaja loogikat kuidas tuvastada millal joone joonistamine lõpetada. See kuidas see pärast välja kuvatakse see pole hetkel niivõrd tähtis, sest sealt väljundi koostamine pole juba mingi probleem. Oleks hea kui saaks kasutada ainult php-d, javascripti jätaks hetkel välja. – cioa May 7 at 7:19
Saaksid ehk tuua näite selle massiivi kohta? – egon May 7 at 10:43

3 Answers

1

Kirjutasin kunagi ammu Hinnavaatluse vikisse artikli teemal rekursioon, kus kirjeldasin just sellise puustruktuuri ehitamist. Ehk on sellest abi.

link|flag
0

Kaks linki: jQuery, PhpTliste

link|flag
Uurin seda PhpTliste koodi hiljem lähemalt, saan ehk sealt vastuse kätte :) – cioa May 7 at 9:18
0

Mul on kasutuses paar funktsiooni.

Andmete lugemine baasist massiivi

function getMenu($sql,$juur='1') { 
$db_conn=new db;
$db_conn->connect();
$db_conn->query($sql);
    // Elementide tunnuste järgi indekseeritud massiivi tekitamine 
    while ($row = $db_conn->fetch_row($db_conn->result)) {
        $Items[$row[0]] = array( 
            'ItemID' => $row[0], 
            'ParentID' => $row[1], 
            'Name' => $row[2], 
            'Children' => array() 
       ); 
    } 
    if(empty($Items))  
        return array(); 
    // Puu ehitamine 
    foreach ($Items as $item) { 
        if ($item['ParentID'] == $juur) { 
            // Puu madalaimad oksad 
            $MyTree[] =& $Items[$item['ItemID']]; 
        } elseif (isset($Items[$item['ParentID']])) { 
            // Lisa omanikelemendi harudesse viide käesolevale elemendile 
        $Items[$item['ParentID']]['Children'][] =& $Items[$item['ItemID']]; 
         } else { 
            // Orbudega tegelemine 
            trigger_error('Item #'.$item['ID'].' parent not found.', E_USER_WARNING); 
        } 
    } 
    return $MyTree; 
$db_conn->free_result($db_conn->result);
$db_conn->close_db;
} 

Ja selle massivi baasil näiteks optionide tegemine

function formatMenuOption(&$Items,$valitud='',$item_id='',$disabled_on='') { 
global $mitmes;
        $o = ''; 
        if(!empty($Items)) 
        { 
            $mitmes++;
            //$o .= "\n<ul>"; 
            foreach($Items as $k=>$i) 
            { 
                $liide="";
                for ($m = 3; $m <= $mitmes; $m++) $liide.="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";

                if ($mitmes>="2")
                    $liide.="|-- ";
                //$o.=" id=".$i['ItemID']."ja nimi=".$i['Name'];
                $selected="";
                if (is_array($valitud)){
                    if(in_array($i['ItemID'],$valitud))
                        $selected="selected";
                }else{  
                    if($i['ItemID']==$valitud)
                        $selected="selected";
                }
                if ($i['ItemID']==$item_id){
                    $disabled="DISABLED";
                }else{
                    $disabled="";
                }
                if ($disabled_on=="DISABLED")
                    $disabled=$disabled_on;

                $o.="<option $selected $disabled value='".$i['ItemID']."'>".$liide.$i['Name']."</option>";

                //$o .= sprintf('<li><a href="index.php?id=%s">%s</a>', $i['ItemID'], $i['Name']); 
                $o .= formatMenuOption($i['Children'],$valitud,$item_id,$disabled); 
                //$o .= "</li>"; 
            } 
            //$o .= "</ul>\n"; 
            $mitmes--;
        } 
        return $o; 
} 

Või siis li nimekirja tegemine

function formatMenuList(&$Items,$link='') { 
        $o = ''; 
        if(!empty($Items)) 
        { 
            $o .= "\n<ul>"; 
            foreach($Items as $k=>$i) 
            { 
                $o .= sprintf('<li><a href="$link%s">%s</a>', $i['ItemID'], $i['Name']); 
                $o .= formatMenuList($i['Children']); 
                $o .= "</li>"; 

            } 
            $o .= "</ul>\n"; 
        } 
        return $o; 
} 

Kasutamine on umbes nii

$menu = getMenu("select id as ItemID, parent_id as ParentID, amet as Name from struktuur order by orderfield"); 
$opt_parent="<option value='1'>Juur</option>";
$opt_parent.=formatMenuOption($menu,$menu_array['parent_id'],$menu_array["id"]); 

echo '<select name="amet">'.$opt_parent.'</select>';
link|flag

Your Answer

Get an OpenID
or

Not the answer you're looking for? Browse other questions tagged or ask your own question.