1

こんにちは一日中私は解決策を見つけようとしてきました。このネストされた配列を試しまし た。第3レベルは消えつつ あり、これはPHPや他の多くの方法でスレッド化/ネストされたコメントを取得しようとしていますが、知識不足が原因で、必要な結果を得ることができませんでした。そしてそれが私が助けを求めている理由です。ニュースWebサイトにネストコメントを作成したいと思います。

CommentIDとParentIDを持つmySQLのテーブルがあります

割り当てられたすべてのコメントを取得するクラス投稿があります

case Comments:
    if ($this->iPostID != 0) {
        $sSQL = "SELECT CommentID, ParentID FROM Comment WHERE PostID=" . $this->iPostID;

        $rsComment = $this->dDatabase->query($sSQL);

        while ($aComment = $this->dDatabase->fetch_array($rsComment)) {
            $sComment = new comment();
            $sComment->load($aComment['CommentID']);
            $this->aComments[] = $sComment;
        }

    }
    return $this->aComments;
    break;

これは、$this->aCommentsから取得している配列です。

Array
(
    [0] => comment Object
        (
            [iCommentID:comment:private] => 1
            [iDatePosted:comment:private] => 17 July 2012
            [sContent:comment:private] => Very nice it works now
            [iUserID:comment:private] => 1
            [iPostID:comment:private] => 1
            [iParentID:comment:private] => 0
            [dDatabase:comment:private] => database Object
                (
                    [sqliConnection:database:private] => mysqli Object
                        (
                            [affected_rows] => 1
                            [client_info] => 5.5.9
                            [client_version] => 50509
                            [connect_errno] => 0
                            [connect_error] => 
                            [errno] => 0
                            [error] => 
                            [field_count] => 6
                            [host_info] => Localhost via UNIX socket
                            [info] => 
                            [insert_id] => 0
                            [server_info] => 5.5.9
                            [server_version] => 50509
                            [sqlstate] => 00000
                            [protocol_version] => 10
                            [thread_id] => 2929
                            [warning_count] => 0
                        )

                )

        )

...
    [3] => comment Object
    (
        [iCommentID:comment:private] => 4
        [iDatePosted:comment:private] => 22 July 2012
        [sContent:comment:private] => thies is the first reply for a comment
        [iUserID:comment:private] => 4
        [iPostID:comment:private] => 1
        [iParentID:comment:private] => 1
        [dDatabase:comment:private] => database Object
            (
                [sqliConnection:database:private] => mysqli Object
                    (
                        [affected_rows] => 1
                        [client_info] => 5.5.9
                        [client_version] => 50509
                        [connect_errno] => 0
                        [connect_error] => 
                        [errno] => 0
                        [error] => 
                        [field_count] => 6
                        [host_info] => Localhost via UNIX socket
                        [info] => 
                        [insert_id] => 0
                        [server_info] => 5.5.9
                        [server_version] => 50509
                        [sqlstate] => 00000
                        [protocol_version] => 10
                        [thread_id] => 2929
                        [warning_count] => 0
                    )

            )

    )

そして、これは私がこの配列で何かをしようとするたびに私が得るエラーです

致命的なエラー:15行目の/Applications/MAMP/htdocs/News/includes/thread.phpで、コメントタイプのオブジェクトを配列として使用できません

Thread.PHPは、http://www.jongales.com/blog/2009/01/27/php-class-for-threaded-comments/の正確なコピーです。

誰か助けてくれませんか。

ありがとうございました。

4

2 に答える 2

0

あなたの助けと返事をみんなに感謝します、あなたは私をたくさん助けてくれました。コメントシステムを少し変更しましたが、最後に結果が表示されます

PHP:

public function load($iCommID)
{
    $sSQL = "SELECT CommentID, DATE_FORMAT(DatePosted, '%d %M %Y') as DatePosted, Content, UserID, PostID, ParentID FROM Comment WHERE CommentID=" .$iCommID;

    $aComment = $this->dDatabase->query($sSQL);

    $rsComment = $this->dDatabase->fetch_array($aComment);
    $this->iCommentID = $rsComment['CommentID'];
    $this->iDatePosted = $rsComment['DatePosted'];
    $this->sContent = $rsComment['Content'];
    $this->iUserID = $rsComment['UserID'];
    $this->iPostID = $rsComment['PostID'];
    $this->iParentID = $rsComment['ParentID'];

    $sSQL = "SELECT CommentID FROM Comment WHERE ParentID=" .$iCommID;

            $resParent = $this->dDatabase->query($sSQL);

            while($aReply = $this->dDatabase->fetch_array($resParent))
            {

                $oReply = new comment();
                $oReply->load($aReply['CommentID']);

                $this->aReply[] = $oReply;
            }

}

与える:

public static function renderSingleComment($comComment)
{
    $aReplies = $comComment->Replies;
    $sHTML = "";
    $sHTML .= '<li class="comment">
                        <a id="'.$comComment->CommentID.'"></a>
                        <div class="comm-container">
                            <div class="comm-container-header">
                                <img src="img/avatar1.jpg" alt="avatar1" width="55" height="60" class="avatar"/>
                                <span class="commentator">Igor Revenko</span>
                                <br/>
                                <span class="date">'.$comComment->DatePosted.'</span>
                                <span><a href="#'.$comComment->ParentID.'">#</a></span>
                                <div class="clear"></div>
                            </div>
                            <div class="comm-container-entry" id="rev">
                                <p>'.$comComment->Content.'</p>

                                    <a class="comment-reply-link" id="replyLink-'.$comComment->CommentID.'" href="#'.$comComment->CommentID.'" onclick="javascript:moveForm(this); findID(\'replyLink-'.$comComment->CommentID.'\')"></a>

                            </div>
                        </div>';
                    for($i=0;$i<count($aReplies); $i++)
                    {
                        $sHTML .= '<ul class="children">';
                        $sHTML .= PageView::renderSingleComment($aReplies[$i]);
                        $sHTML .= '</ul>';
                    }
    $sHTML .= ' </li>';


    return $sHTML;
}


public static function renderComment ($pvPostID){


    $sHTML = "";

    $aComments = $pvPostID->Comments;

    $sHTML .= '<div class="clear"></div>
            <div id="comments">
                <h3>COMMENTS TO "'.$pvPostID->PostName.'"</h3>
                <ol class="comments-list">';

    for($i=0; $i<count($aComments); $i++)
    {
        $sHTML .= PageView::renderSingleComment($aComments[$i]);
    }

助けてくれてありがとう。

于 2012-07-25T07:18:46.310 に答える
0

エラーは十分に冗長であり、それが次のキーを含む配列であるthread.phpと想定しています、...あなたの場合はオブジェクトです。$commmentparent_idid

したがって、2つのオプションがあります

  • コードを変更して、thread.php(非常に推奨されない)と互換性を持たせるようにします
  • またはthread.php、オブジェクトを処理するように変更します。

thread.php再度変更するには、2つのオプションがあります。これは、Commentクラス属性privateを使用できるためです。

次に、どこにでもそれを作る(またはゲッターを使用した場合)などthread.phpのようなものが表示されます$comment['parent_id']$comment->parent_id$comment-getParentId

于 2012-07-22T08:05:09.960 に答える