Jump to content
Prosíme všetkých užívateľov, ktorý sa chcú opätovne pripojiť na discord aby znovu spárovali svoje účty kliknutím na "Discord" v navigácií a pripojili sa na server Read more... ×
jAk3r

ostatní Comments and reply function

Recommended Posts

Čau, 

dělám si komentáře ke článkům a vše mi funguje ale narazil jsem na to že nemám absolutně nápad jak udělat výpis komentářů a odpovědi k daným komentářům.

Představoval bych si to něco jako:

Foreach na komentáře a v něm vnořený další foreach na odpovědi.

Můj aktuální pokus :)

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

    }

ALe to mi háže Maximum function nesting level of '256' reached, aborting! 

Tudíž tam mám nějaké blbé zacyklení...

Tady mám starý kód který mě dělal Ewwe 😄

$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ěkuji všem za rady a pomoc :)

Edited by jAk3r

Sdílet tento příspěvek


Link to post
Share on other sites
před 8 minutami, Ewwe said:

Nejspíš neumí, ale kdyby jsi si udělal relace v dabázi tak ti je bude nette tahat najednou viz

 

https://doc.nette.org/en/2.3/database-explorer

https://doc.nette.org/cs/2.4/database-explorer no ale já mám ty komentáře ve stejné tabulce i reply a to určuje parent_id.

Sdílet tento příspěvek


Link to post
Share on other sites
před 14 minutami, Ewwe said:

tak relace ti nepomůže ale INNER JOIN by měl

Můžu nějakou ukázku jak to myslíš abych to z toho líp pochopil 😄

 

takhle nějak mám šablonu 

 

                  {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}

 

Edited by jAk3r

Sdílet tento příspěvek


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×