Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

Sınırsız Kategori Listeleme aspnet

Merhabalar,
Sınırsız kategori listeleme yapmak istiyorum.Normalde Ana Kategori>1.Alt Kategori > 1.1 Alt Kategori yapmak için ilk önce 3 repeater ile yapmaya çalıştım. 2 repeater ile 1 ana kategori ve 1 alt kategori sorunsuz listeliyorum. 3. repeateri eklediğimde ana kategoriler geliyor alt kategorilerden sadece ilk sıradaki olan geliyor 3 alt kategori varken 1 adet listeleniyor. 1.alt kategori>1.1 alt kategori de de ilk sıradaki listeleniyor. bu problemi gideremedim.

Bu problemi gideremeyince repeatersız bu işlemi yapmaya çalıştım ordada şu şekilde bir problem ile karşılaştım.

<li>ana kategori</li>

<ul><li>alt kategori</li></ul>

<li>ana kategori</li>

şeklinde geldiği için alt kategoriler listelenmiyor

aşağıdaki gibi nasıl yapabilirim.

<li>ana kategori<ul><li>alt kategori</li></ul></li>

repeatersiz kodlar aşağıdaki gibidir.

Bu iki problem hakknda yardımcı olabilirmisiniz.Teşekkürler.

kategori tablom

id

kategoriadi

anaKategori



Repeater ile Kategori Listeleme Kodları------------

2.Repeater itemdatabound olayına

int cat = Int32.Parse(DataBinder.Eval(e.Item.DataItem, "id").ToString());
Repeater rp = (Repeater)e.Item.FindControl("Repeater3");
SqlCommand cmd = new SqlCommand("select * from kategoriler where anaKategori='" + cat + "'", baglan);
rp.DataSource = cmd.ExecuteReader();
rp.DataBind();
cmd.Dispose();

Repeatersız KategorListeleme Kodları--------------------

private void doldur()
{
if (baglan.State == ConnectionState.Closed)
{
baglan.Open();
}
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Kategoriler", baglan);
da.Fill(ds);
DataRow[] anaKategoriler = ds.Tables[0].Select("anaKategori = 0");
foreach (DataRow anaKategori in anaKategoriler)
{
HtmlGenericControl li = new HtmlGenericControl("li");
li.Controls.Add(new LiteralControl("<a href=<%#Eval('kategoriID')%>" + anaKategori["kategoriAdi"].ToString() + "</a>"));

Menu1.Controls.Add(li);
altmenu(Convert.ToInt32(anaKategori["kategoriID"]));

}
}
private void altmenu(int kategoriId)
{
DataRow[] kategoriler = ds.Tables[0].Select("anaKategori=" + kategoriId);
if (kategoriler.Length == 0)
{
}
else
{

Menu1.Controls.Add(new LiteralControl("<ul>"));
foreach (DataRow kategori in kategoriler)
{
HtmlGenericControl li1 = new HtmlGenericControl("li");
li1.Controls.Add(new LiteralControl("<a href=#>" + kategori["kategoriAdi"].ToString() + "</a>"));

Menu1.Controls.Add(li1);
altmenu(Convert.ToInt32(kategori["kategoriID"]));
}
Menu1.Controls.Add(new LiteralControl("</ul>"));

}

}
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Cevaplar

  • max1299 adlı üyenin fotoğrafı
    2 yıl önce yazılmış
    28 cevap - 30 soru
    Yardımcı olması açısından php kodu veriyorum incelerseniz özyineleme (recurcive) yöntemi ile halledebilirsiniz

    <?php
    
    	/*RECURSIVE İLE MENU CLASSI YAZALIM*/
    
    	
    
    class recursiveMenu{
    
    	public $conn;
    	public $host = "localhost";
    	public $user = "root";
    	public $pass = "";
    	public $data = "menu";
    
    	public function __construct(){
    		
    		$this->conn = new mysqli($this->host, $this->user, $this->pass, $this->data);	
    		
    		if($this->conn->connect_error){
    			
    			sprintf("BAĞLANTI HATASI : %s", $this->conn->connect_error);
    			
    		}
    		
    	}
     
     
    	public $tablename;
     
    	public function getter($parentValue){
     
        $query = $this->conn->query("SELECT * FROM ".$this->tablename." ORDER BY id ASC");
    
        while($row = $query->fetch_object()) {
    
             $storage[$row->id] = array('title' => $row->title, 'href' => $row->href, 'parent' => $row->parentID);
    
        }
    
     
        $hasChildren = (boolean) false;
    
     
        foreach($storage as $key => $val)  {
    	
    			extract($val);
    	
                if ($parent == $parentValue) {       
    
     
                        if ($hasChildren === false){
    
                                $hasChildren = true;
    
                                echo "\n<ul>\n";
    
                        }
     
                        echo "<li>\n<a href=\"".$href." title=".$title."\">".$title."</a>\n";
    
                        $this->getter($key);
    
                        echo "</li>\n";
    
                }
    
        }
    
     
        if ($hasChildren === true){
    			
    			echo "</ul>\n";
    			
    			}
    
    	
    	}
     
    }
    
    	$getMenu = new recursiveMenu(); //call our class
    	$getMenu->tablename = "navi";
    	$getMenu->getter($firstParentValue = 0); //call getter method for get our menu
    
     
    ?>
    	
    
    
    • max1299 adlı üyenin fotoğrafı max1299
      aslında sınırsız kategori ya da sınırsız matematiksel sei işlemleri ya da alt alta dallanmış veriler ağaç gibi veya matematikte ki faktöryel,kombinasyon,permütasyon işlemi gibi kodlar için öz yineleme kullanılır
      aşağıda class ın fonksiyon hali var daha iyi anlaman için kendi class ya da fonksiyonunu yazabilirsin

      <?php
      
      	/*NESTED SORTABLE İLE MENU CLASSI YAZALIM*/
      
      	
      
      function sinirsiz_kategori($parent) {
      
       
      	$conn = new mysqli("localhost","root","","menu");	
       
          $sql = $conn->query("SELECT * FROM nav ORDER BY id DESC");
      
       
          while($row = $sql->fetch_object()) {
      
               $diziler[$row->id] = array('baslik' => $row->link,'parent' => $row->parentID);
      
          }
      
       
          $has_childs = false;
      
       
          foreach($diziler as $key => $value)  {
      
                  if ($value['parent'] == $parent) {       
      
       
                          if ($has_childs === false){
      
                                  $has_childs = true;
      
                                  echo "\t<ul>";
      
                          }
      
       
                          echo "<li><a href=\"".$value['baslik'].".html\">".$value['baslik']."</a>";
      
                          sinirsiz_kategori($key);
      
                          echo "</li>\n";
      
                  }
      
          }
      
       
          if ($has_childs === true) echo "</ul>";
      
       
      }
      
      	sinirsiz_kategori($parent = 0);
      
       
      ?>
      
      2 yıl önce yazılmış
  • ontedi adlı üyenin fotoğrafı
    2 yıl önce yazılmış
    39 cevap - 2 soru
  • ecsw adlı üyenin fotoğrafı
    2 yıl önce yazılmış
    1 cevap - 8 soru
    Merhaba
    Problemi çözdüm.ilginiz için teşekkürler 3.repeatar ın itemdatabound unda ki bir hatadan dolayı problem oluşmuş.