Diskusný strom v Latte z jednorozmerného poľa

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Cifro
Člen | 245
+
0
-

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}
nanuqcz
Člen | 822
+
0
-

Můžeš si napsat nějaký helper? Něco ve stylu {$comments|arrayToTree}.

srigi
Nette Blogger | 558
+
0
-

Cifro Vyuzi tu premennu depth a pomocou pomocnej premennej urcuj ked spravit nove zanorenie. Skus sa inspirovat.

Filip Procházka
Moderator | 4668
+
0
-

Koukni raději na tohle: https://componette.org/search/?… :)

Cifro
Člen | 245
+
0
-

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 commentsStartcommentsEnd

Editoval Cifro (9. 8. 2011 12:18)