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. За работу с древом готов оплатить.