<?php
namespace engine\components;
use engine\components\DB;
use PDO;
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) {
$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>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque at magna ut ante eleifend eleifend.</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
namespace engine\app\controllers;
use engine\components\Comment;
use engine\app\models\Post;
class PostController
{
public function actionArticle($postId){
$single = Post::getPostById($postId);
$commnent = Comment::getComments();
$tree = Comment::getTree($commnent);
$lvl = Comment::showLvl($tree);
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;
}
<?php echo '<ul class="media-list text comment-list clearlist">'. $lvl .'</ul>';?>
if (isset($POST['submit'])){
$message = $POST['text'];
public static function actionSaveComment()
{
if (isset($_POST['id'])) { // а передать id записи можно например через input в форме
.. // сохранение в базу
}
}
$('.section-scroll').bind('click', function(e) {
var anchor = $(this);
$('html, body').stop().animate({
scrollTop: $(anchor.attr('href')).offset().top - 50
}, 1000);
e.preventDefault();
});
$('a[href="#totop"]').click(function() {
$('html, body').animate({ scrollTop: 0 }, 'slow');
return false;
});
<div class="collapse navbar-collapse" id="custom-collapse">
<ul class="nav navbar-nav navbar-right">
<li><a href="#totop">Home</a></li>
<li><a class="section-scroll" href="#services">Services</a></li>
<li><a class="section-scroll" href="#works">Works</a></li>
<li><a class="section-scroll" href="#alt-features">Features</a></li>
<li><a class="section-scroll" href="#team">Team</a></li>
<li><a class="section-scroll" href="#pricing">Prices</a></li>
<li><a class="section-scroll" href="#news">News</a></li>
<li><a class="section-scroll" href="#contact">Contact</a></li>
</ul>
</div>
<?php
wp_nav_menu( array(
'theme_location' => 'menu-1',
'container' => 'div',
'container_class' => 'collapse navbar-collapse',
'container_id' => 'custom-collapse',
'menu_class' => 'nav navbar-nav navbar-right',
) );
?>