Diskusný strom v Latte z jednorozmerného poľa
- Cifro
- Člen | 245
Mam nasledujúce „ploché“ pole komentárov a potrebujem z toho urobiť
vnorený strom ale iba za pomoci Latte. Vnorený úplne, t.j. ďalšie
<ul> v <li>. Pole sa už nemôže modifikovať. Okrem
id
a parent
mam k dispozícii ešte aj
depth
u jednotlivých položiek. Nevie niekto ako na to? Už dosť
dlho nad tým sedím :/
// toto
array(
array(id => 1, parent => 0),
array(id => 3, parent => 1),
array(id => 5, parent => 3),
array(id => 4, parent => 1),
array(id => 2, parent => 0),
)
// na niečo také
{id: 1, parent: 0}
{id: 3, parent: 1}
{id: 5, parent: 3}
{id: 4, parent: 1}
{id: 2, parent: 0}
- srigi
- Nette Blogger | 558
Cifro Vyuzi tu premennu depth a pomocou pomocnej premennej urcuj ked spravit nove zanorenie. Skus sa inspirovat.
- Cifro
- Člen | 245
xxxObiWan napsal(a):
Můžeš si napsat nějaký helper? Něco ve stylu{$comments|arrayToTree}
.
To by nepomohlo, potreboval som mať editovateľnú aj samotnú štruktúru komentára, že kde sa vypíše author, datum, content…
HosipLan napsal(a):
Koukni raději na tohle: https://componette.org/search/?… :)
To absolutne neriešilo moj problém :P Data už som mal, len ich trebalo vypisať stromovo v Latte
srigi napsal(a):
Cifro Vyuzi tu premennu depth a pomocou pomocnej premennej urcuj ked spravit nove zanorenie. Skus sa inspirovat.
A Srigi to vyhral :) Diki. Ten topic som kedysi videl a hovoril si, že raz sa mi zíjde a i tak som na neho zabudol.
Takže riešenie:
{var $depth = 1}
<ol class="commentlist">
{foreach $post->comments as $comment}
{if $comment->depth > $depth}
<ul>
{var $depth = $comment->depth}
{elseif ($comment->depth == $depth) and (!$iterator->isFirst())}
</li>
{elseif $comment->depth < $depth}
{!='</li></ul></li>'|repeat:$depth - $comment->depth}
{var $depth = $comment->depth}
{/if}
<li>
bla bla obsah komentu, autor, datum....
{/foreach}
</li>
{!='</li></ul></li>'|repeat:$depth - $comment->depth}
</ol>
Ale je to dosť veľký bordeľ. Asi to zabalim do nejakého makra
commentsStart
a commentsEnd
Editoval Cifro (9. 8. 2011 12:18)