3dben
Новичок
Здравствуйте я велосипедист =)
Пишу блог. В данный момент реализовал блок комментариев, но есть некоторые нюансы и вопросы.
За основу был взят этот урок: https://bezramok-tlt.ru/?mode=2&post=21
Всё работает, комментарии выводятся и добавляются. Пусть я и не до конца реализовал некоторые моменты.
Суть в чём. Есть метод public static function tplComments($comment) это шаблон комментария состоящий из HTML кода.
Дело в том что я не могу прописать путь к аватару по типу <?php ROOT . /public .?> скорее всего потому что весь этот шаблон находится в одинарных кавычках.
Вытянуть данные из БД и вывести их возможно таким образом '. $comment['comment'] .'
Как правильно реализовать данную часть кода? Самостоятельно не смогу решить эту задачу. У вас больше опыта. Помогите сделать всё правильно.
Комментарии я решил реализовать в виде отдельного компонента:
Контроллер:
Пишу блог. В данный момент реализовал блок комментариев, но есть некоторые нюансы и вопросы.
За основу был взят этот урок: 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">—</span>
<a href="#"><i class="fa fa-comment"></i> Reply</a>
</div>
<p>'. $comment['comment'] .'</p>
</div>
';
if (isset($comment['childs'])) {
$lavel .= '<ul>' . self::showLvl($comment['childs']) . '</ul>';
}
$lavel .= '</li>';
return $lavel ;
}
Вытянуть данные из БД и вывести их возможно таким образом '. $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">—</span>
<a href="#"><i class="fa fa-comment"></i> 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;
}
}
Последнее редактирование: