Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony] Wyświetlanie Nested Set Propel 1.3, Jak wyświetlić tylko określoną odnogę?
Ziels
post 29.06.2009, 17:20:29
Post #1





Grupa: Zarejestrowani
Postów: 235
Pomógł: 2
Dołączył: 30.06.2006

Ostrzeżenie: (0%)
-----


Mam zapisaną strukturę NestedSet:
Kod
id | tree_left | tree_right | user_id
----+-----------+------------+---------
10 |         1 |         14 |       3
16 |         2 |          7 |       3
20 |         3 |          4 |       3
24 |         5 |          6 |       3
21 |         8 |          9 |       3
22 |        10 |         11 |       3
23 |        12 |         13 |       3


A więc takie drzewo:

Kod
10
-- 16
-- -- 20
-- -- 24
-- 21
-- 22
-- 23


Gdzie user_id to tree_scope

Posiłkując się dokumentacją stworzyłem iterator:

Kod
class TreeDisplayIterator extends RecursiveIteratorIterator
{
     public function __construct($m){parent::__construct($m, self::SELF_FIRST );}
     public function beginChildren(){echo '<ul>';}
     public function endChildren()  {echo '</ul>';}
}


Wszystko jest w porządku jeśli chcę wyświetlać całe drzewo:
Kod
<ul>
  <?php foreach(new TreeDisplayIterator(TreePeer::retrieveTree(3)) as $elem): ?>
    <li><?php echo $elem->getTitle() ?></li>
  <?php endforeach ?>
</ul>


Lista jest kompletna, elementy dobrze zagnieżdżone a ja bardzo szczęśliwy. Nie wiem tylko jak wyświetlić określoną odnogę. Dla przykładu dla wpisu o ID 16 chciałbym uzyskać coś takiego:
Kod
16
-- 20
-- 24


Ale wszystkie próby zawiodły, próbowałem tak:

Kod
<ul>
  <?php foreach(new TreeDisplayIterator(TreePeer::retrieveByPk(16)) as $elem): ?>
    <li><?php echo $elem->getTitle() ?></li>
  <?php endforeach ?>
</ul>


Ale to nie to. Jak to zrobić bez zbędnego mnożenia zapytań do bazy?
Go to the top of the page
+Quote Post
LBO
post 29.06.2009, 19:10:39
Post #2





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Obsłuż odpowiednio RecursiveIteratorIterator:getDepth()
Go to the top of the page
+Quote Post
Ziels
post 30.06.2009, 12:51:36
Post #3





Grupa: Zarejestrowani
Postów: 235
Pomógł: 2
Dołączył: 30.06.2006

Ostrzeżenie: (0%)
-----


Cytat(LBO @ 29.06.2009, 20:10:39 ) *
Obsłuż odpowiednio RecursiveIteratorIterator:getDepth()


Jest do dobre rozwiązanie, ale nie idealne bo z bazy będzie wyciągnięte i tak całe drzewo.

Rozwiązanie banalne ale nigdzie nie opisane:

  1. <?php
  2. $branch = TreePeer::retrieveBranch($node);
  3. $i = new TreeDisplayIterator($branch[0]);
  4. ?>


Ten post edytował Ziels 30.06.2009, 12:52:03
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 31.07.2025 - 08:49