aslında sıkıntı left , right değerleri sanırım . Örneğin ;
Elektronik
--Bilgisayar
--Telefon
----Iphone
Beyaz Eşyalar
diye kategoriler olduğunu düşünelim , ben yeni bir kategori ekliyorum örneğin "Acer" . Bunu taşıyıp bilgisayarın içine bıraktığımda parent_id'si bilgisayarın id'sini alıyor evet ama gösterirken Telefon kategorisinin altında gösteriyor. Ama I-phone kategorisini Beyaz Eşyalar kategorisine taşıdığım zaman sorun yok. Anlamadığım nokta kaydettikten sonra fixTree yapıyorum fakat lft,rgt değerlerini yanlış ayarlıyor sanırım anlayamadım
Drop işleminde kaydederken kullandığım kod ;
$kategori = $this->kategori->find($key);
$kategori->parent_id = $parent_id;
$kategori->save();
$this->kategori->fixTree();
Listeleme işleminde kullandığım kod ;
$i = 0;
$nb_open = 0;
$current_level = '';
$cats = $this ->withDepth()->get();
echo "[{";
foreach($cats as $cat)
{
if($cat->parent_id!=null)
{
if ($current_level == '')
{
$current_level = $cat->depth;
}
if ($current_level == $cat->depth)
{
if ($i > 0)
{
echo " }, {";
}
} elseif ($current_level < $cat->depth)
{
echo ', "children": [ { ';
$nb_open = $nb_open + 1;
} elseif ($current_level > $cat->depth)
{
$nb_to_close = $current_level - $cat->depth;
for ($j = 1 ; $j <= $nb_to_close ; $j ++)
{
$nb_open = $nb_open - 1;
echo " }]";
}
echo "}, {";
}
echo ' "title": "' . $cat->name. '", "key": "' . $cat->id . '", "expanded": true';
$current_level = $cat->depth;
$i ++;
}
}
if ($nb_open>0) { for ($i = 1; $i <= $nb_open; $i++) { echo "}]"; } }
echo "}]";
Çıktısı
[{ "title": "Elektronik", "key": "39", "expanded": true, "children": [ { "title": "Bilgisayar", "key": "40", "expanded": true }, { "title": "Telefon", "key": "42", "expanded": true }, { "title": "Televizyon", "key": "41", "expanded": true, "children": [ { "title": "Diz Üstü Bilgisayar", "key": "44", "expanded": true}]}]}]
veritabanı ;
| id | name | _lft | _rgt | parent_id | depth |
| 38 | Ana Kategori | 1 | 12 | null | 0 |
| 39 | Elektronik | 2 | 11 | 38 | 1 |
| 40 | Bilgisayar | 3 | 6 | 39 | 2 |
| 42 | Telefon | 9 | 10 | 39 | 2 |
| 41 | Televizyon | 7 | 8 | 39 | 2 |
| 44 | Diz Üstü Bilgisayar | 4 | 5 | 40 | 3 |
Diz üstü bilgisayar , parent id =40( Bilgisayar ) olmasına rağmen , Televizyonun altında listeleniyor . sanırım listelediğim yerde yanlış var fakat kodu çözemedim