Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Kuidas koostada korralikku kaustapuud? märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
mine lehele eelmine  1, 2
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
keevitaja
AM 10 aastat
keevitaja

liitunud: 05.11.2001




sõnum 14.10.2009 19:44:38 vasta tsitaadiga

vaadasin seda tudiludi linki, kus tal siis see kausta puu olemas on. tundub ikkagi, et tegu on nagu lehel navigeerimise menüüga. väljadeks oleks

id
order
level

sqlist siis võtaks välja: select id, level from tabel order by order
üles alla saaks liigutada lihtsalt vahetades order ära kahe node vahel. paremale vasakule siis levelit 1 võrra suurendad või vähendada
lisada saaks vahel nii, et ennem lisamist teha update table set order=order + 1 where order>order (viimane order siis id alusel mille alla soovid lisada päritud) . ning siis lisada juba insert into tabel andmed orderiks just see päritud order
kustudades siis alumistele orderitele order=order - 1

ja olekski kõik. kui teha selline puu, kus levelid luuakse parent_id järgi, siis läheb ikka täiega keemiaks. order it seal ju kah veel mängib. tohutu piix minu arust

_________________
Hinnavaatlus ei ole koht arvamuse avaldamiseks!
Kommentaarid: 51 loe/lisa Kasutajad arvavad:  :: 1 :: 3 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
LiivaneLord
Sõpradele "Olavi"

liitunud: 20.06.2006




sõnum 21.10.2009 21:32:12 vasta tsitaadiga

Nii, vahepeal tuli tahtmine jälle sisukorda näppida ning selle koodi natuke muudetud inimväärsemaks ... icon_razz.gif

linnumees nõuannet ei oska kasutada ja kommenteerida, sest ma pole nii tark selles asjas veel.
Kuid võtsin kuulda mikk36 nõuannet (niipalju, kui aru sain) ning tulemuseks sai:

php:
  1. <!---Sisukord------------------------------------------------->
  2. <td rowspan="2" width="250" valign="top" bgcolor="#80bafa">
  3.  
  4. <?
  5. $kodu_ikoon="<img src='http://i31.tinypic.com/wbchsn.jpg' width='20' border='0'>";
  6. echo "<a href='index.php'>$kodu_ikoon</a><a href='index.php'>Esileht</a><br>";
  7. function id_aita($id,$rida)
  8. {       
  9. global $rida;   
  10.         ($id==0)?$sql_id_aita=mysql_query("SELECT * FROM artiklid WHERE ülemkausta_id='$id'"):$sql_id_aita=mysql_query("SELECT * FROM artiklid WHERE id='$id'");       
  11.         while ($andmed_id_aita=mysql_fetch_array($sql_id_aita))
  12.         {              
  13.                 $id=array($id);
  14.                 $ülem=$andmed_id_aita[ülemkausta_id];
  15.                 $rida=(!empty($rida))?array_merge($id, $rida):$id;           
  16.                 if ($ülem!="0")
  17.                         {                     
  18.                         id_aita($andmed_id_aita[ülemkausta_id],$rida);
  19.                 }
  20.                 elseif ($ülem=="0")
  21.                 {
  22.                         $ülem=array(0);
  23.                         $rida=array_merge($ülem, $rida);
  24.                 }       
  25.         }
  26. }
  27. id_aita($id,"");
  28.  
  29. function kaustapuu($tühikud,$x,$rida)
  30. {
  31.         $kausta_ikoon="<img src='http://i27.tinypic.com/2mysot1.jpg' width='16' border='0'>";
  32. $teksti_ikoon="<img src='http://i29.tinypic.com/1gtbew.jpg' width='16' border='0'>";
  33.         $tühik="&nbsp;&nbsp;&nbsp;";
  34. if ($x=="")
  35.         {
  36.         $x=0;
  37.         }
  38. $sql=mysql_query("SELECT * FROM artiklid WHERE ülemkausta_id='$rida[$x]' ORDER BY pealkiri, kausta_nimi");
  39. while($andmed=mysql_fetch_array($sql))
  40.         {
  41.         if (empty($andmed[kausta_nimi]))
  42.                 {
  43.                 $kaust=$andmed[pealkiri];
  44.                 $ikoon=$teksti_ikoon;
  45.                 }
  46.                 else
  47.                 {
  48.                         $kaust=$andmed[kausta_nimi];
  49.                         $ikoon=$kausta_ikoon;
  50.                 }
  51.                 $url_kaust=str_replace(' ','_',$kaust);
  52.         echo "$tühikud<a href='?id=$andmed[id]&$url_kaust'>$ikoon</a><a href='?id=$andmed[id]&$url_kaust'>$kaust</a><br>";
  53.         if ($andmed[id]==$rida[$x+1])
  54.                 {
  55.                 $x=$x+1;
  56.                 $xtühikud="$tühikud$tühik";
  57.                 kaustapuu($xtühikud,$x,$rida);
  58.                 }
  59.         }       
  60. }
  61. kaustapuu("","",$rida);
  62. ?>
  63. </td>
  64. <!---/Sisukord----------------------->


Kokkuvõtlikult on funktsioon nimega id_aita(), mis saab id väärtuse, mis on valitud. Kui sellel id-l on ülemkaustu, siis arrayna loob nimekirja kõigist ülemkaustadest, mille nimeks saab siis $rida. Järjestus on arrays nii, et juurkaust on kõige esimene ja iga järgnev alamkaust on peale seda.
Teine funktsioon kaustapuu() leiab $rida ning kuvab vastavalt selle väärtustele kõik alamkaustad.

Päris lihtne oli nüüd, kus sain natuke aru sellest array põhimõttest ja eelkõige, kuidas seda vajalikus osas rakendada. Jamas tükk aega mul ja tuli välja, et oli väike kirjaviga, kus if ($andmed[id]==$rida[$x+1]) jäi puudu üks võrdusmärk ja kaua aega murdsin pead, et mis oli koodis viga ... :S

Kas saab veel paremini? icon_razz.gif
Kommentaarid: 20 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 19
tagasi üles
vaata kasutaja infot saada privaatsõnum
606
HV vaatleja

liitunud: 04.02.2004




sõnum 22.10.2009 09:44:29 vasta tsitaadiga

tervitus.

küsimus baasi struktuuri osas, miks Sa hoiad kõike ühes tabelis? ma ise kasutaks 4 tabelit:
1. kaustad koos pealkirjaga
2. artiklid
3. seosed kaustade vahel (master -> slave)
4. seosed kausta ja artikli vahel

sellisel viisil ei teki sul andmete kordamist nii palju. (kui Sa oma tabelisse tahad lisada nt 10 artiklit sama kausta alla, siis Sul tekib pmt 10 sama rida)
olenevalt kasutade hulgast võib baas minna aeglaseks (ka indexit kasutades)
tagasi üles
vaata kasutaja infot saada privaatsõnum
LiivaneLord
Sõpradele "Olavi"

liitunud: 20.06.2006




sõnum 22.10.2009 15:55:15 vasta tsitaadiga

606 kirjutas:
tervitus.

küsimus baasi struktuuri osas, miks Sa hoiad kõike ühes tabelis? ma ise kasutaks 4 tabelit:
1. kaustad koos pealkirjaga
2. artiklid
3. seosed kaustade vahel (master -> slave)
4. seosed kausta ja artikli vahel

sellisel viisil ei teki sul andmete kordamist nii palju. (kui Sa oma tabelisse tahad lisada nt 10 artiklit sama kausta alla, siis Sul tekib pmt 10 sama rida)
olenevalt kasutade hulgast võib baas minna aeglaseks (ka indexit kasutades)


Kuidas tekib palju andmete kordamist?
Kas sa pead silmas koodis 41.-51.st rida?
Kommentaarid: 20 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 19
tagasi üles
vaata kasutaja infot saada privaatsõnum
raxz
HV Guru

liitunud: 27.07.2003




sõnum 22.11.2009 06:59:16 vasta tsitaadiga

Korrektne oleks teha mitme tabeliga jah ning kasutada üks mitmele seoseid.
Kommentaarid: 46 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 45
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 22.11.2009 11:41:18 vasta tsitaadiga

Tekkis ka huvi ja tegin prooviks klassi menyy.
See on hetkel linkimise menüü erinevatele aadressidele, kuid lingi asemele saab aretada ka mingi andmebaasi päringu, mis võtab sealt andmed ja kuvab. Tahtsin lihtsalt teha kaustapuu, et saab lisada kaustuja alamkaustu.


class menyy {
      
// ***********************************************************************************************************************      
      public function tee_menyy($link_name, $link, $parent_id=0, $table_name){
                                 try{baas::sisse();
                                             $paring="INSERT INTO $table_name ( id , link_name  , link , parent_id) VALUES ( NULL , '".$link_name."' , '".$link."', '".$parent_id."')" ;
                                                   baas::paring($paring);
                                                            baas::sule_baas();
                                       }  catch ( vead1 $e ) {/*  veateate valjastus */ echo $e;}
                                       
                                                                                                                     }
// ***********************************************************************************************************************      
      public function kuva_menyy($pID=0, $table_name){
                        $paring="SELECT * FROM $table_name WHERE parent_id='$pID'";   
                                 try{
                                       baas::sisse();
                                          $tulemus=baas::paring($paring);
                                          echo '<ul>';
                                                   while ($tulem2=mysql_fetch_assoc($tulemus)) {
                                                                                 echo '<li><a href="'.$tulem2['link'].'">'.$tulem2['link_name'].'</a></li>';
                                                                                 $id=$tulem2['id'];
                                                                                 
                                                                                    $paring="SELECT * FROM $table_name WHERE parent_id='$id'";   
                                                                                             $tulemus2=baas::paring($paring);      
                                                                                             
                                                                                          if(   count($tulemus2)>0){echo "<ul>"; $this -> kuva_menyy($tulem2['id'], $table_name);echo '</ul>';}
                                                                                          
                                                                                                                                    }
                                                echo '</ul>';                                                
                                                                                 
                                                                                          }  catch ( vead1 $e ) {/*  veateate valjastus */ echo $e;}
                                                                                          
                                                                  
                                                      }
// ************************************************************************************************************************         
            public function anna_id($table_name, $select_name){
                           $paring="SELECT * FROM $table_name ";   
                                 try{
                                       baas::sisse();
                                          $tulemus=baas::paring($paring);
                                          echo '<select name="'.$select_name.'">';
                                                   while ($tulem2=mysql_fetch_assoc($tulemus)) {
                                                   echo '<option value="'.$tulem2['id'].'">'.$tulem2['link_name'].'</option>';
                                                   }      
                                                   echo '</select>';      
                                                   baas::sule_baas();
                                                      }  catch ( vead1 $e ) {/*  veateate valjastus */ echo $e;}      
                                                               }                                                                                                                                          

}


Kogu selle klassi saate vaadata siit.
Kogu menyy klass

_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Kuidas koostada korralikku kaustapuud? mine lehele eelmine  1, 2
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.