ASP Treeview Döngü Sorunsalı :|
-
şöyle birşey yapmaya çalışıyorum.
ana_kategori
--alt_kategori
----alt_kategorinin_alt_kategorisi
------onunda_alt_kategorisi
ana_kategori2
--alt_kategorifalan diye uzuyor işte. tablo yapım;
id | ad | ustkategoriid
şeklinde. 3 alt kategori olsa içiçe 3 sorgu ile olayı kapatırım ama 20-30 da olabilir :D yapmak istediğim sınırsız alt kategoriyi listeletmek. ağaç menü mantığı. basit göründü ama yapmaya çalışınca tıkandım :| zoque'de böyle birşey buldum o da aşırı uzun ve tabloda ekstra alanlar var. yardımcı olabilecek olan ?
-
-
hocam oraya baktım onu zaten biliyorum :) burda kategorileri birbirine bağlamayı anlatmış. burdaki mantıkla 20 alt kategori için 20 sorgu ve döngü yapmak lazım. treeview bundan daha kapsamlı bişi ama bulamadım onu :/
-
yazdığın yapının adı adjacency list model
asp ile dediğin şeyi recursive (kendi kendini çağıran) fonksiyonlarla yapabilirsin.
örnek veriyorum
function katlistele(katId)
set kategoriler = baglanti.execute("select * from Kategoriler where UstId=" & katId)
while not kategoriler.eof
response.write "<li>"
response.write kategoriler("KategoriAdi")
response.write "</li>"
katlistele(kategoriler("KatId"))
response.write chr(13)
kategoriler.movenext:wend
response.write "</ul>"
kategoriler.close
end function
katlistele(0)
burdaki sıfır en ana kategori. bu şekilde bütün kategoriler-altkategoriler listelenir.
sen bi kategorinin altındakileri listeyeceksen oraya o kategorinin idsini yazman gerek.
asp ile böyle fonksiyonlarla girmeden yapabilcegin bi model daha var nested set model ama onun yapısı sql kısmında daha zor -
Teşekkür ederim hocam :) Sql kısmını gördüm union ve join kullanarak yapılmıştı sanırım ama bu fonksiyon işimi görür :)
-
Peki buna ağaç menü görüntüsü nasıl verebiliriz ?
yani;
anakategori
--alt
----ona bagli alt
vs. gibi ?
-
Fiko bende bi benzerini yapmaya calısmıstım
böyle birşey oldu--------------------------------------------------------------------------function alt_kat($liste,$carpan=1){
$t=count($liste);
$sp="|- ";
for($i=0;$i<$t;$i++){
if(gettype($liste[$i][0]) == "array"){
echo ' |- ';
for($s=0;$s<$carpan;$s++){
echo $sp;
}
echo $liste[$i][0][2].'';
alt_kat($liste[$i][1],$carpan+1);
}else{
echo ' |- ';
for($s=0;$s<$carpan;$s++){
echo $sp;
}
echo $liste[$i][2].'';
}
}
}
$liste=kategori_listesi();
$t=count($liste);
for($i=0;$i<$t;$i++){
if(gettype($liste[$i][0]) == "array"){
echo ' |- '.$liste[$i][0][2].'';
alt_kat($liste[$i][1]);
}else{
echo ' |- '.$liste[$i][2].'';
}
}--------------------------------------------------------------------------
listeyi alan fonksiyondafunction kategori_listesi($id=0){$k=mysql_query("select * from kategoriler where kid = '$id' order by isim asc;");if(mysql_num_rows($k) < 1){return false;}while($z=mysql_fetch_row($k)){$alt=kategori_listesi($z[0]);if($alt == false){$sonuc[]=$z;}else{$n[]=$z;$n[]=$alt;$sonuc[]=$n;}}return $sonuc;}
söyle birşey seninle phpce anlaşabildiğimiz ve tek satır asp bilmediğim için başka ne desem bilemiyorum ama mantık olarak acıklamak gerekirse array temelli bir işlem eger alt ketegorisi varsa bunları bir dizi halınde saklıyor degıskenın ıcerıgının turune bakıp string ise yazıyor array ise ilk elemanını (bu ana kategorisi oluyor) yazıp alt kat fonksiyonunu cagırıyor oda bunun benzerını yapıyor zaten. -
bro pek bişi anlamadım diyebilirim :D ama araştırmaya devam ediyorum bulcam bi yolunu :p
edit:
Function KategoriListele(ID)
Set Kategoriler=Baglanti.Execute("Select * From Tbl_Kategoriler Where UstKategoriID="&ID)
Response.Write "<ul>"
Do Until Kategoriler.EOF
Response.Write "<li>"&Kategoriler("Ad")
KategoriListele(Kategoriler("ID"))
Kategoriler.MoveNext
Response.Write "</li>"
Loop
Response.Write "</ul>"
Kategoriler.Close
End Functionbu şekilde list ile hallettim ama list yerine "--" koysam daha iyi olcak :) onu yapıcam olursa editler koyarım burayada.
-
up :/
1
--2
----3
--4
vs. şeklinde yapmak istiyorum çözemedim :/ uplym bari. -
hocam id isim aid sira diye sütunlar aç
ana başlığın aid sütunu 0 olsun diğerlerinde aid hangisinin idsi ise olsun sirada tek tek gitsin
-
tolgasen bunu yazdı:
-----------------------------hocam id isim aid sira diye sütunlar aç
ana başlığın aid sütunu 0 olsun diğerlerinde aid hangisinin idsi ise olsun sirada tek tek gitsin
-----------------------------hocam öyle zaten ama 3-5 alt kategori olmayacakki :) tablo yapım dediğin gibi zaten. adam 30 kategori daha eklese altalta bunu tek fonksiyonla listelemem gerek. yazdığım fonksiyon bunu yapıyor fakar list ile değilde ağaç mantığıyla olsun istiyorum.