logi sisse meist KKK

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

küsitud May 06 '10 at 06:56

cioa's gravatar image

cioa
1111

Kas tulemus peaks olema html, tekst või midagi muud?

(May 06 '10 at 17:13) egon ♦♦

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.

(May 07 '10 at 07:19) cioa

Saaksid ehk tuua näite selle massiivi kohta?

(May 07 '10 at 10:43) egon ♦♦

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

link

vastatud May 09 '10 at 13:31

Rene%20Saarsoo's gravatar image

Rene Saarsoo ♦♦
1.1k101121

Kaks linki: jQuery, PhpTliste

link

vastatud May 06 '10 at 17:19

egon's gravatar image

egon ♦♦
771239

Uurin seda PhpTliste koodi hiljem lähemalt, saan ehk sealt vastuse kätte :)

(May 07 '10 at 09:18) cioa

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

vastatud May 25 '10 at 13:07

Arvi's gravatar image

Arvi
41113

Sinu vastus
lülita eelvaade

Jälgi seda küsimust

By Email:

Pärast sisselogimist saad tellida muudatuse teavitusi siit

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *kaldkiri* või __kaldkiri__
  • **paks kiri** või __paks kiri__
  • link:[tekst](http://url.com/ "pealkiri")
  • pilt?![alt tekst](/path/img.jpg "pealkiri")
  • nummerdatud nimekiri: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • põhilised HTML märgendid on samuti toetatud

Pinu tööpakkumised

kõik pakkumised »

Küsimuse sildid:

×22

küsitud: May 06 '10 at 06:56

nähtud: 4,099 korda

viimati uuendatud: May 25 '10 at 13:07

Litsents: Creative Commons Attribution License | Kontakt: info@pinu.ee