Zobrazení počtu komentářů a v jaké je kategorii

jAkErCZ
Člen | 322
+
0
-

Čau,
Mám takový dotaz mám hlavní stránku na které si vypisuji příspěvky. A nějak nemohu přijít na to jak si vypíšu u toho daného článku počet komentářů a ve které kategorii je.

Mám to nějak takto:

public function renderDefault()
{
    /* Načítání funkcí */
    $articles = $this->articleManager->getArticles();
    $lastComments = $this->articleManager->getLastComments();
    foreach ($articles as $article) {
        $commentsCount = $this->articleManager->getCountComments($article->article_id);
        $this->template->commentsCount = $commentsCount;
    }
    /* Předání do šablony */
    $this->template->articles = $articles;
    $this->template->lastArticles = $articles->order('date')->limit('5');
    $this->template->lastComments = $lastComments;
}

Kde jsem se pokoušel foreach udělat to aby mi to vrátilo počet článků u každého příspěvku ale vždy mi to v latte vypíše jen počet toho posledního :D

Jak co nejlépe a jednoduše vypsat u každého článku teda počet komentářů kolik jich má a ve které je kategorii.

latte:

<div n:foreach="$articles as $article" class="post post-lg">
                        <div class="post-header post-author">
                            <a href="#" class="author" data-toggle="tooltip" title="{$article->user->username}"><img src="{$basePath}/images/user/avatar2.jpg" alt="" /></a>
                            <div class="post-title">
                                <h2><a n:href="Article: $article->url">{$article->title}</a></h2>
                                <ul class="post-meta">
                                    <li><a href="#"><i class="fa fa-user"></i> {$article->user->username}</a></li>
                                    <li><i class="fa fa-calendar-o"></i> {$article->date|date:'j. n. Y H.i'}</li>
                                    <li><a href="#"><i class="fa fa-bookmark"></i> </a></li>
                                    <li><a href="#"><i class="fa fa-comments"></i> {$commentsCount} <span class="hidden-xs">Comments</span></a></li>
                                    {dump $commentsCount}
                                </ul>
                            </div>
                        </div>
                        <div class="post-thumbnail">
                            {if $article->images_count}
                                <a href="#"><img src="{$basePath}/images/blog/{$article->article_id}/{$article->article_id}_0.png" alt="{$article->title}"></a>
                                <div class="post-caption">{$article->image_desc}</div>
                            {else}
                                <img src="{$basePath}/images/blog/no_image.png" alt="Obrázek není k dispozici">
                            {/if}
                        </div>
                        <p>{$article->content|noescape|truncate:220}</p> <br /><a n:href="Article: $article->url">Číst dále...</a>
                    </div>

v detailu toho článku jeto jednoduché tam už to mám ale takto nějak nemohu najít vhodné řešení :)

Díky za rady :)

David Matějka
Moderator | 6445
+
0
-

Vytvor pole, kde jako klic budes mit ID clanku a jako hodnotu pocet komentaru

jAkErCZ
Člen | 322
+
0
-

David Matějka napsal(a):

Vytvor pole, kde jako klic budes mit ID clanku a jako hodnotu pocet komentaru

Myslel si nějak takto?

  foreach ($articles as $article) {
            $data = $this->articleManager->getCountComments($article->article_id);
            $commentsCount = array(
                'article_id' => $article->article_id,
                'comments' => $data
            );
            bdump($commentsCount);
        }
$this->template->commentsCount = $commentsCount;

Ale když je dump ve foreach vrací to

array (2)
	article_id => 1
	comments => 1
array (2)
	article_id => 2
	comments => 1

ale jakmile to hodím do šablony píše mi to Array to string conversion error

Můžu poprosit o další nakopnutí? :)

Kcko
Člen | 470
+
0
-

bdump presun pod foreach a $commentsCount změn na $commentsCount[]

jAkErCZ
Člen | 322
+
0
-

Kcko napsal(a):

bdump presun pod foreach a $commentsCount změn na $commentsCount[]

Super teď to vrací …

array (2)
0 => array (2)
	article_id => 1
	comments => 1
1 => array (2)
	article_id => 2
	comments => 1

Ale jak to vypíšu v šabloně aby se to zobrazovalo u každého toho článku ten **comments **

nightfish
Člen | 519
+
0
-

Spíš chceš ve foreachi:

$commentsCount[$article->article_id] = $data;

a v šabloně

{$commentsCount[$article->article_id]}

A úplně nejlepší by bylo mít funkci, do které pošleš pole IDček článků a ona provede jeden dotaz do databáze a vrátí ti pole indexované ID článku, kde hodnota bude počet komentářů. (Získáš tedy stejné pole, jako je $commentsCount výše, ale jedním dotazem místo desítek…).

Editoval nightfish (2. 11. 2018 18:47)

Kcko
Člen | 470
+
0
-

Coz je related v NDTB

jAkErCZ
Člen | 322
+
0
-

nightfish napsal(a):

Spíš chceš ve foreachi:

$commentsCount[$article->article_id] = $data;

a v šabloně

{$commentsCount[$article->article_id]}

A úplně nejlepší by bylo mít funkci, do které pošleš pole IDček článků a ona provede jeden dotaz do databáze a vrátí ti pole indexované ID článku, kde hodnota bude počet komentářů. (Získáš tedy stejné pole, jako je $commentsCount výše, ale jedním dotazem místo desítek…).

Když použiji tvé řešení tak šablona mi háže

Array to string conversion

Kcko napsal(a):

Coz je related v NDTB

To sice ano ale related můžeš použít jen pokud máš tabulku article navázanou na comments což mám opačně.

Editoval jAkErCZ (3. 11. 2018 12:13)

Mysteria
Člen | 797
+
0
-

Tak si prostě o řádek výše udělej bdump toho, co se snažíš vypisovat a uprav ten výpis tak, aby jsi nevypisoval pole, ale to, co potřebuješ.

Alsatian
Člen | 175
+
0
-

Dost možná na to jdu úplně špatně (samotného by mě to zajímalo), ale podobný count něčeho při procházení foreach řeším až v šabloně pomocí „related“

<div n:foreach="$articles as $article">
	{var $commentsCount = $article->related($nazevTabukkySKomentari.'.article_id')->count('*')}
	{$commentsCount|sklonuj:'komentář':'komentáře':'komentářů'}
	...
</div>

Kde „skloňuj“ je vlastní makro.

Editoval Alsatian (6. 11. 2018 10:13)