Quantcast
Channel: Tópicos
Viewing all articles
Browse latest Browse all 14700

Sort Array, retornar comentarios de forma hierarquica

$
0
0
Bem malta, venho pedir aqui ajuda aos gurus que dominam ai a cenas das arrays :D

ora bem, ando para aqui a desenvolver um sistema de comentarios, de forma a permitir respostas a comentario (child comments por assim dizer)

Ora, eu ate de certa forma, ja consegui meter isso a dar, o problema é que tou a usar a Yii framework e aquele codigo está um pouco
errado... o dito cujo é este:
Código (PHP):
public function commentsRender($row,$level=1) {
$command = Yii::app()->db->createCommand()
        ->setFetchMode(PDO::FETCH_OBJ)
        ->select('*')
        ->from('comentario')
        ->where('parentID = :id', array(':id'=>$row['commentID'])); //isto é apenas o select

         echo "<li class='comment '>";
         echo "<div class='aut'>".$row['userID']."</div>";
         echo "<div class='comment-body'>".$row['texto']."</div>";
         echo "<div class='timestamp'>".$row['data']."</div>";
         echo "<a href='#comment_form' class='reply' id='".$row['commentID']."'>Reply</a>";

         $dataReader = $command->query(); //aqui basicamente faz a query
         if($dataReader->rowCount > 0){ // aqui testa se o comentario tem childs
                if ($level == 1) $level++;
                  while(($row = $dataReader->read())!==false) { //isto é como o tipico fetch_array
                                        echo "<li class='well well-small' style='padding-left: " . (($level - 1) * 20) . "px;'>";
                           $this->commentsRender($row,$level+1);
                  }
                  echo "</div>";
          }
         echo "</li>";
}
(basei-me neste codigo: http://www.technabled.com/2009/06/how-to-multi-level-comments-in-php.html )

nao se aflijam por nao conhecerem a framework, se eu conseguir um exemplo em php puro eu acho que ja me consigo safar!

ora isto renderiza uma lista ordenada html do genero:
Código (HTML):
<ul>
    <li class="comment ">
        <div class="aut">1</div>
        <div class="comment-body">comment3</div>
        <div class="timestamp">1384447010</div><a id="10" class="reply" href="#comment_form">Reply</a>
        <ul style="padding-left: 20px;">
            <li class="comment ">
                <div class="aut">1</div>
                <div class="comment-body">comment3.1</div>
                <div class="timestamp">1384447035</div><a id="11" class="reply" href="#comment_form">Reply</a>
                <ul style="padding-left: 40px;">
                    <li class="comment ">
                        <div class="aut">1</div>
                        <div class="comment-body">comment3.1.1</div>
                        <div class="timestamp">1384449678</div><a id="12" class="reply" href="#comment_form">Reply</a>
                    </li>
                </ul>
            </li>
        </ul>
    </li>
    <li class="comment ">
        <div class="aut">1</div>
        <div class="comment-body">comment2</div>
        <div class="timestamp">1384433970</div><a id="8" class="reply" href="#comment_form">Reply</a>
    </li>
    <li class="comment ">
        <div class="aut">1</div>
        <div class="comment-body">comment1</div>
        <div class="timestamp">1384433970</div><a id="9" class="reply" href="#comment_form">Reply</a>
    </li>
</ul>

o problema é que eu em vez de tar a returnar logo com os echos todos, eu queria retornar uma array, do genero:
Imagem Colocada
Alguem me pode ajudar? sugerir algum codigo se possivel, ou uns tutoriais...
funçoes recursivas é uma area pouco explorada para mim, entao com arrays... da-me a volta a mioleira!
espero ter sido suficentemente explicito, e que me consigam ajudar :confused:

Viewing all articles
Browse latest Browse all 14700