Перед созданием новой темы, пожалуйста, ознакомьтесь с FAQ по LinkorCMS

Древовидность комментариев

Уважаемый пользователь
Сообщений: 22

private function RenderComment($ObjectId, &$Comments, $BlockName, $Level)
{
if (count($Comments) == 0) return false;
foreach ($Comments as $comment) {
$comment_id = SafeDB($comment['comment_id'], 11, int);
$user_id = SafeDB($comment['user_id'], 11, int);

$vars = [];
$vars['level'] = $Level;
$vars['text'] = HtmlChars($comment['text']);
SmiliesReplace($vars['text']);
$vars['text'] = nl2br($vars['text']);
$vars['text'] = BbCodePrepare($vars['text']);

if ($user_id != 0) { // Зарегистрированный пользователь
$userinfo = GetUserInfo($user_id);
$vars['user_link'] = Ufu("index.php?name=user&op=userinfo&user=$user_id", 'user/{user}/info');
$vars['name'] = '<a href="' . $vars['user_link'] . '">' . $userinfo['name'] . '</a>';
$vars['email'] = AntispamEmail($userinfo['email']);
if ($userinfo['online']) {
$vars['user_status'] = 'Сейчас на сайте.';
} else {
$vars['user_status'] = '';
}
$vars['user_rank_image'] = $userinfo['rank_image'];
$vars['user_rank_name'] = $userinfo['rank_name'];
$vars['user_avatar'] = $userinfo['avatar_file'];
$vars['user_avatar_small'] = $userinfo['avatar_file_small'];
$vars['user_avatar_smallest'] = $userinfo['avatar_file_smallest'];
} else {
$vars['name'] = SafeDB($comment['name'], 32, str);
$vars['email'] = AntispamEmail(SafeDB($comment['email'], 64, str));
$vars['user_status'] = '';
$vars['user_rank_image'] = '';
$vars['user_rank_name'] = '';
$vars['user_avatar'] = GetPersonalAvatar(0);
$vars['user_avatar_small'] = GetSmallUserAvatar(0, $vars['user_avatar']);
$vars['user_avatar_smallest'] = GetSmallestUserAvatar(0, $vars['user_avatar']);
}

$vars['comment_id'] = $comment_id;
$vars['parent_id'] = SafeDB($comment['parent_id'], 11, int);
$vars['object_id'] = $ObjectId;
$vars['user_id'] = SafeDB($comment['user_id'], 11, int);
$vars['ip'] = SafeDB($comment['ip'], 39, str);

$date_added = strtotime(SafeDB($comment['date_added'], 0, str));
$vars['date'] = date('Y-m-d', $date_added);
$vars['time'] = date('H:i', $date_added);
$vars['day'] = date('d', $date_added);
$vars['month'] = date('m', $date_added);
$vars['year'] = date('Y', $date_added);

if (System::user()->Auth) {
$vars['editing'] = (System::user()->Get('u_id') == $user_id || System::user()->isAdmin());
} else {
$vars['editing'] = ($user_id == '0' && $vars['ip'] == getip());
}

$vars['answers'] = $this->Answers != '0' || System::user()->isAdmin();
if (!System::user()->Auth && !$this->GuestComment) $vars['answers'] = false;
if (!$this->AlloyComments) $vars['answers'] = false;
$vars['no_answers'] = !$vars['answers'];

$back = SaveRefererUrl();
$vars['edit_url'] = $this->EditPageUrl . '&comment_id=' . $comment_id . '&back=' . $back;
$vars['delete_url'] = $this->DeletePageUrl . '&comment_id=' . $comment_id . '&back=' . $back;
$vars['parent_comment_url'] = $_SERVER['REQUEST_URI'] . '#comment_' . SafeDB($comment['parent_id'], 11, int);
$vars['comment_url'] = $_SERVER['REQUEST_URI'] . '#comment_' . $comment_id;
System::site()->AddSubBlock($BlockName, true, $vars, [], $this->CommentTemplate);
if (isset($this->CommentsTree[$comment_id])) {
if ($this->MaxTreeLevel > $Level) {
$newLevel = $Level + 1;
} else {
$newLevel = $Level;
}
$this->RenderComment($ObjectId, $this->CommentsTree[$comment_id], $BlockName, $newLevel);
}
}
return true;
}


Помогите из этого сделать нормальные древовидные комментарии. Чтобы подходили под такую верстку:

// Древовидность
<ol class="comments_list clearfix">
<li class="comment single_comment">
....
</li>
// Если родитель id1
<ol class="children">
<li class="comment single_comment">
....
</li>
// Если родитель id2
<ol class="children">
<li class="comment single_comment">
....
</li>
</ol>
</ol>
</ol>


Буду рад помощи, а так же был бы рад посмотреть как реализованы комментарии в 1.5.2. За работу с древом готов оплатить.
Разработчик
Сообщений: 287
Используйте дочерние множественные блоки с подключаемым шаблоном.
Например:
{comments}{/comments} -> comments.html

В comments.html:
{com.text}
{child_comments}{/child_comments} -> comments.html

1. Создается субблок комментария.
2. Если есть ответные комментарии, в этот субблок добавляется дочерний блок child_comments у которого уже задается шаблон comments.html. Далее рекурсия, шаг 1.
3. Если ответных комментариев нет, добавляется выключенный дочерний блок child_comments.
4. Субблок добавляется в блок комментариев {comments}.
Уважаемый пользователь
Сообщений: 22
Агний, можешь дать скайп или аську? Либо наглядно расписать все? Я не понимаю как сделать два подблока?

-- Изменено "Int3": 23.07.2017 05:24 --
Гости не могут отвечать на темы. Войдите или Зарегистрируйтесь.
Здесь присутствуют
(пользователей: 0, гостей: 1)
Быстрый переход: