Zdravím,
snažím se udělat funkci která bude vracet hlavní komentáře + odpovědi k danému komentáři ale nastal problém...
Maximum function nesting level of '256' reached, aborting!
Tady přikládám funkci
public function getComments($article_id, $parent_id = null){
$comments = null;
if ($parent_id === null) {
$comments = $this->database->table(self::TABLE_COMMENTS)->where(self::COLUMN_COM_ARTICLE_ID, $article_id)->order('created_at')->fetchAll();
} else {
$comments = $this->database->table(self::TABLE_COMMENTS)->where(self::COLUMN_COM_ARTICLE_ID ,$article_id)->where(self::COLUMN_COM_PARENT_ID, $parent_id)->fetchAll();
}
$_comments = [];
foreach ($comments as $comm) {
// zpracování komentáře
$_comment = [
'comment_id' => $comm->comment_id,
'user_id' => $comm->user_id,
'created_at' => $comm->created_at,
'content' => $comm->content,
];
}
if ($parent_id === null) { // pokud je to hlacní komentář zjistit pod-komentáře
$_comment['comments'] = $this->getComments($article_id, $parent_id);
}
$_comments[] = $_comment;
return $_comments; // vrátit komentáře
}
A jak to mám v šabloně..
{snippet comments}
<div n:foreach="$comments as $comment" class="media">
<a class="media-left" href="#">
<img src="{$basePath}/images/user/avatar3.jpg" alt="" />
</a>
<div class="media-body">
<div class="media-content">
<a href="#" class="media-heading"></a>
<a n:if="$user->isLoggedIn()" n:href="reply! $comment['comment_id']" id="reply" class="btn btn-sm btn-primary pull-right ajax">reply</a>
<span class="date">{$comment['created_at']|date:'j. n. Y H.i'}</span>
<p>{$comment['content']}</p>
</div>
<div n:foreach="$comment['comments'] as $comm" class="media">
<a class="media-left" href="#">
<img src="{$basePath}/images/user/avatar.jpg" alt="" />
</a>
<div class="media-body">
<div class="media-content">
<a href="#" class="media-heading">YAKUZI</a>
<a href="#" class="btn btn-sm btn-primary pull-right">reply</a>
<span class="date">{$comm['created_at']|date:'j. n. Y H.i'}</span>
<p>{$comm['content']}</p></div>
</div>
</div>
</div>
</div>
{/snippet}
Co dělám blbě?
Chtěl sem něco jako foreach na hlavní komentáře a pak druhý foreach na odpovědi. tak jak mám v šabloně..
Starý kód ze kterého sem vycházel
$pocetKomentaru = 0;
function processComments($clanek_id, $parent_id = NULL) {
global $pocetKomentaru;
$komentare = NULL;
if ($parent_id === NULL) {
$komentare = dibi::query("
SELECT k.*, a.nick, a.avatar FROM komentare k
LEFT JOIN accounts a ON k.author_id = a.id
WHERE k.clanek_id = %i AND k.parent_id IS NULL", $clanek_id);
} else {
$komentare = dibi::query("
SELECT k.*, a.nick, a.avatar FROM komentare k
LEFT JOIN accounts a ON k.author_id = a.id
WHERE k.clanek_id = %i AND k.parent_id
", $clanek_id, " = %i", $parent_id);
}
$_komentare = [];
foreach ($komentare as $komentar) {
// zpracování komentáře
$_komentar = [
'id' => $komentar->id,
'avatar' => $komentar->avatar,
'komentar' => $komentar->komentar,
'pridano' => $komentar->pridano,
'nick' => $komentar->nick,
];
if ($parent_id === NULL) { // pokud je to hlacní komentář zjistit pod-komentáře
$_komentar['komentare'] = processComments($clanek_id, $komentar->id);
}
$pocetKomentaru++;
$_komentare[] = $_komentar; // přidat zpracovaný komentář do pole komentářů
}
return $_komentare; // vrátit komentáře
}
Díky všem za pomoc :)