Zobrazení počtu komentářů a v jaké je kategorii
- jAkErCZ
- Člen | 322
Č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
Vytvor pole, kde jako klic budes mit ID clanku a jako hodnotu pocet komentaru
- jAkErCZ
- Člen | 322
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í? :)
- jAkErCZ
- Člen | 322
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
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)
- jAkErCZ
- Člen | 322
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)
- Alsatian
- Člen | 175
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)