Вывод данных в шаблоне комментариев

3dben

Новичок
Здравствуйте я велосипедист =)

Пишу блог. В данный момент реализовал блок комментариев, но есть некоторые нюансы и вопросы.

За основу был взят этот урок: https://bezramok-tlt.ru/?mode=2&post=21

Всё работает, комментарии выводятся и добавляются. Пусть я и не до конца реализовал некоторые моменты.

Суть в чём. Есть метод public static function tplComments($comment) это шаблон комментария состоящий из HTML кода.

PHP:
/**
     * Шаблон для вывода комментарие в виде дерева
     */
    public static function tplComments($comment)
    {
        $lavel  = '<li class="comment-item">
                    <a class="pull-left" href="#">
                    <img class="media-object comment-avatar" src="/images/user-avatar.png" alt="" width="50" height="50"></a>
                    <div class="comm-body">
                        <div class="comment-item-data">
                            <div class="comment-author">
                               <a href="#">John Doe</a>
                            </div>
                            Feb 9, 2014, at 10:23
                            <span class="separator">&mdash;</span>
                            <a href="#"><i class="fa fa-comment"></i>&nbsp;Reply</a>
                            </div>
          
        
                            <p>'. $comment['comment'] .'</p>
                          
                    </div>
                    ';

        if (isset($comment['childs'])) {
            $lavel .= '<ul>' . self::showLvl($comment['childs']) . '</ul>';
        }
        $lavel  .= '</li>';

        return $lavel ;
    }
Дело в том что я не могу прописать путь к аватару по типу <?php ROOT . /public .?> скорее всего потому что весь этот шаблон находится в одинарных кавычках.

Вытянуть данные из БД и вывести их возможно таким образом '. $comment['comment'] .'

Как правильно реализовать данную часть кода? Самостоятельно не смогу решить эту задачу. У вас больше опыта. Помогите сделать всё правильно.

Комментарии я решил реализовать в виде отдельного компонента:

PHP:
class Comment
{

    public static function getComments(){

        //Поключаюсь в базе данных
        $db = DB::getConnection();

        //выбираю все поля из таблицы комментариев
        $sql = 'SELECT * FROM comments';

        // подготовливаю запрос к выполнению
        $result = $db->prepare($sql);

        // выполняю
        $result->execute();

        //создаю массив где ключ массива является ID комментария
        $item = array();
        $i = 0;
        while($row = $result->fetch(PDO::PARAM_STR)){
            $item[$row['id']] = $row;
            $i++;
        }
        return $item ;
    }


    public static function getTree() {

        $dataset = self::getComments();

        $tree = array();

        foreach ($dataset as $id => &$node) {
            //Если нет вложений
            if (!$node['parent_id']){
                $tree[$id] = &$node;
            }else{
                //Если есть потомки то перебераем массив
                $dataset[$node['parent_id']]['childs'][$id] = &$node;
            }
        }
        return $tree;
    }


    /**
     * Шаблон для вывода комментарие в виде дерева
     */
    public static function tplComments($comment)
    {
        $lavel  = '<li class="comment-item">
                    <a class="pull-left" href="#">
                    <img class="media-object comment-avatar" src="/images/user-avatar.png" alt="" width="50" height="50"></a>
                    <div class="comm-body">
                        <div class="comment-item-data">
                            <div class="comment-author">
                               <a href="#">John Doe</a>
                            </div>
                            Feb 9, 2014, at 10:23
                            <span class="separator">&mdash;</span>
                            <a href="#"><i class="fa fa-comment"></i>&nbsp;Reply</a>
                            </div>
           
         
                            <p>'. $comment['comment'] .'</p>
                           
                    </div>
                    ';

        if (isset($comment['childs'])) {
            $lavel .= '<ul>' . self::showLvl($comment['childs']) . '</ul>';
        }
        $lavel  .= '</li>';

        return $lavel ;
    }

    /**
     * Рекурсивно считываем наш шаблон
     **/
    public static function showLvl($data){
        $string = '';
        foreach($data as $item){
            $string .= self::tplComments($item);
        }
        return $string;
    }


    public static function checkComment($text){
        if (strlen($text) >= 10) {
            return true;
        }
        return false;
    }


    public static function setComment($comment){

        //Поключаюсь в базе данных
        $db = DB::getConnection();

        // Текст запроса к БД
        $sql = 'INSERT INTO comments(comment) VALUES (:comment)';

        $result = $db->prepare($sql);
        $result->bindParam(':comment', $comment, PDO::PARAM_STR);

        return $result->execute();
    }

}
Контроллер:

PHP:
class PostController
{
    public function actionArticle($postId){


        //получаю пост из БД по id
        $single = Post::getPostById($postId);

        // вывожу кооментарии(передаю комментарии ввиде дерева)
        $list = Comment::showLvl(Comment::getTree());

       //Проверка и добавление комментария пока что выглядит так
        if (isset($_POST['id'])){
            $message = $_POST['text'];

            // Флаг ошибок
            $errors = false;

            if(!Comment::checkComment($message)){
                $errors[] = 'Сообщение должно содержать не менее 10 символов';
            }

            if ($errors == false){

                Comment::setComment($message);
            }

        }

        //вьюшка
        require_once(VIEW . '/post/article.php');

        return true;
    }


}
 
Последнее редактирование:

Фанат

oncle terrible
Команда форума
Попробуй подумать, что ты делаешь.
Просто остановись на мгновение от бешеной копипасты и подумай, что делает код <?php ROOT . /public .?> (ну или его рабочий вариант). Что означают различные его элементы и для чего он вообще служит?
 

3dben

Новичок
Попробуй подумать, что ты делаешь.
Просто остановись на мгновение от бешеной копипасты и подумай, что делает код <?php ROOT . /public .?> (ну или его рабочий вариант). Что означают различные его элементы и для чего он вообще служит?
Серьёзно есть тут те кто может помочь и не будет задавать таких тупых вопросов?
 

Фанат

oncle terrible
Команда форума
Во-первых, здесь могут помочь, но вот кормить манной кашей с ложечки точно не будут.
Во-вторых, почему ты считаешь, что этот вопрос тупой?
 

3dben

Новичок
Во-первых, здесь могут помочь, но вот кормить манной кашей с ложечки точно не будут.
Во-вторых, почему ты считаешь, что этот вопрос тупой?
Во-первых я не написал одну строчку как большинство. Я расписал всё насколько можно подробно и понятно.

Во-вторых я не спрашивал зачем нужно это <?php ROOT . /public .?> и что оно делает. Я задал конкретный вопрос, описал ситуацию и не нужно мне писать всякую чушь.

Если вывести данные из таблицы получается то указать конкретный путь для аватара <?php ROOT . /public .?> не выйдет. тоже касается даты/времени. Нужна функция которая будет преобразовывать дату к нужному формату как в шаблоне, но не выйдет. Придётся разрывать одинарные кавычки и в этой же переменной реализовать код который будет преобразовывать дату к нужному виду.

Не можешь помочь. Не флуди!
 

Фанат

oncle terrible
Команда форума
Все верно. Ты не спрашивал. Это я спросил тебя, зачем нужно <?php ROOT . /public .?>
Ответив себе на этот вопрос, ты разберешься, как решить свою задачу.
Дело в том, что это базовый синтаксис РНР, и тебе, как велосипедисту, необходимо его освоить.

А всё твое подробное описание не имеет к вопросу никакого отношения в данном случае.

Итак, что означает <?php в приведенном тобой примере?
Как ты считаешь, нужна ли эта команда в твоем коде? Если да - то почему?
 
Сверху