podmíněné zobrazení v šabloně

adferg
Člen | 31
+
0
-

Ahoj, rád bych zobrazoval blok s komentáři až na základě toho, jestli nějaké existují. Zkusil jsem

{* Comments *}
{if isset($comments) && !empty($comments)}
    <div class="w3-content">
        <h2>Komentáře</h2>
        <div class="comments">
            {foreach $comments as $comment}
                <p><b>{$comment->name}</b> napsal:</p>
                <div>{$comment->content}</div>
            {/foreach}
        </div>
    </div>
{/if}

Ale v šabloně se nadpis „Komentáře“ zobrazuje, i když pod článkem žádný komentář není. Prosím, nevíte, kde dělám chybu?

romanm
Člen | 27
+
0
-

Jenom toto by nefungovalo?

{if $comments}
adferg
Člen | 31
+
0
-

Bohužel, zkusil jsem:

{* Comments *}

{if $comments}
    <div class="w3-content">
        <h2>Komentáře</h2>
        <div class="comments">
            {foreach $comments as $comment}
                <p><b>{$comment->name}</b> napsal:</p>
                <div>{$comment->content}</div>
            {/foreach}
        </div>
    </div>
{/if}
kachna96
Člen | 9
+
+1
-

V $comments je nejspíš nějáké pole, když nad ním potom iteruješ, takže kontrolovat počet prvků by mělo stačit.

{if count($comments) > 0}
	...
{/if}

Editoval kachna96 (5. 11. 2020 9:52)

adferg
Člen | 31
+
0
-

Jop, je to tak. To by mě nenapadlo. Zas jsem chytřejší. Díky!

filsedla
Člen | 101
+
-1
-

Toto je nejspíš případ, kdy se projevuje podivnost PHP. empty() se nechová tak, jak by člověk čekal.

nightfish
Člen | 472
+
+4
-

Tipuju, že v tom $comments totiž není pole, nýbrž objekt třídy Nette\Database\Table\Selection – takže na něm empty() celkem pochopitelně vrací false, protože se jedná o ne-NULLový objekt. A zároveň objekt této třídy implementuje rozhraní Countable, takže nad ním lze bez problémů zavolat count() pro ověření počtu prvků.

Šaman
Člen | 2635
+
+2
-

Jak píše @nightfish. Když se něco chová podivně, vždycky si to dumpni, většinou tě to hned trkne.
V kódu

bdump($comments);
bdump(empty($comments));
bdump(count($comments));

v šabloně

{dump $comments}

Editoval Šaman (5. 11. 2020 14:27)