После создания комментарии располагаются не там где нужно
Дело в том, что в шаблоне существует следующий баг: При написании комментария, как ответа на другой комментарий, и его отправки, он уходит в самый низ страницы (как будто вы пишите комментарий к контенту, а не ответ на другой комментарий). При этом, если обновить страницу, комментарий становиться куда надо.
Наверно здесь нужен аякс, но как его подключить? Заранее спасибо.
В файле \templates\default\controllers\comments\list.tpl.php в самом верху есть какое-то подключение скриптов:
<?php $this->addJS('templates/default/js/jquery-scroll.js'); ?> <?php $this->addJS('templates/default/js/comments.js'); ?>
На всякий случай пересылаю указанный файл шаблона
<?php // Шаблон списка комментариев и формы добавления // ?>
<?php $this->addJS('templates/default/js/jquery-scroll.js'); ?>
<?php $this->addJS('templates/default/js/comments.js'); ?>
<?php $is_guests_allowed = !empty($this->controller->options['is_guests']); ?>
<?php $is_karma_allowed = $user->is_logged && !cmsUser::isPermittedLimitHigher('comments', 'karma', $user->karma); ?>
<div id="comments_widget">
<div class="title">
<a name="comments"></a>
<h2><?php echo $comments? html_spellcount(sizeof($comments), LANG_COMMENT1, LANG_COMMENT2, LANG_COMMENT10): LANG_COMMENTS; ?></h2>
<?php if ($user->is_logged){ ?>
<div class="track">
<input type="checkbox" id="is_track" name="is_track" value="1" <?php if($is_tracking){ ?>checked="checked"<?php } ?> />
<label for="is_track"><?php echo LANG_COMMENTS_TRACK; ?></label>
</div>
<?php } ?>
</div>
<?php if ($user->is_logged){ ?>
<div id="comments_refresh_panel">
<a href="#refresh" class="refresh_btn" onclick="return icms.comments.refresh()" title="<?php echo LANG_COMMENTS_REFRESH; ?>"></a>
</div>
<?php } ?>
<div id="comments_list">
<?php if (!$comments){ ?>
<div class="no_comments">
<?php echo LANG_COMMENTS_NONE; ?>
</div>
<?php if (!$user->is_logged && !$is_guests_allowed) { ?>
<div class="login_to_comment">
<?php
$reg_url = href_to('auth', 'register');
$log_url = href_to('auth', 'login');
printf(LANG_COMMENTS_LOGIN, $log_url, $reg_url);
?>
</div>
<?php } ?>
<?php } ?>
<?php if ($comments){ ?>
<?php echo $this->renderChild('comment', array('comments'=>$comments, 'target_user_id'=>$target_user_id, 'user'=>$user, 'is_highlight_new'=>$is_highlight_new, 'is_can_rate' => $is_can_rate)); ?>
<?php } ?>
</div>
<div id="comments_urls" style="display: none"
data-get-url="<?php echo $this->href_to('get'); ?>"
data-delete-url="<?php echo $this->href_to('delete'); ?>"
data-refresh-url="<?php echo $this->href_to('refresh'); ?>"
data-track-url="<?php echo $this->href_to('track'); ?>"
data-rate-url="<?php echo $this->href_to('rate'); ?>"
></div>
<?php if (($user->is_logged && cmsUser::isAllowed('comments', 'add')) || (!$user->is_logged && $is_guests_allowed)){ ?>
<div id="comments_add_link">
<a href="#reply" class="ajaxlink" onclick="return icms.comments.add()"><?php echo LANG_COMMENT_ADD; ?></a>
</div>
<div id="comments_add_form">
<?php if ($is_karma_allowed || $is_guests_allowed){ ?>
<div class="preview_box"></div>
<form action="<?php echo $this->href_to('submit'); ?>" method="post">
<?php echo html_csrf_token($csrf_token_seed); ?>
<?php echo html_input('hidden', 'action', 'add'); ?>
<?php echo html_input('hidden', 'id', 0); ?>
<?php echo html_input('hidden', 'parent_id', 0); ?>
<?php echo html_input('hidden', 'tc', $target_controller); ?>
<?php echo html_input('hidden', 'ts', $target_subject); ?>
<?php echo html_input('hidden', 'ti', $target_id); ?>
<?php echo html_input('hidden', 'tud', $target_user_id); ?>
<?php echo html_input('hidden', 'timestamp', time()); ?>
<?php if (!$user->is_logged) { ?>
<?php
$this->addJS('templates/default/js/jquery-cookie.js');
$name = cmsUser::getCookie('comments_guest_name');
$email = cmsUser::getCookie('comments_guest_email');
?>
<div class="author_data">
<div class="name field">
<label><?php echo LANG_COMMENTS_AUTHOR_NAME; ?>:</label> <?php echo html_input('text', 'author_name', $name); ?>
</div>
<div class="email field">
<label><?php echo LANG_COMMENTS_AUTHOR_EMAIL; ?>:</label> <?php echo html_input('text', 'author_email', $email); ?>
</div>
</div>
<?php } ?>
<?php echo $user->is_logged? html_editor('content'): html_textarea('content'); ?>
<div class="buttons">
<?php echo html_button(LANG_PREVIEW, 'preview', 'icms.comments.preview()'); ?>
<?php echo html_button(LANG_SEND, 'submit', 'icms.comments.submit()'); ?>
</div>
<div class="loading">
<?php echo LANG_LOADING; ?>
</div>
</form>
<?php } else { ?>
<p><?php printf(LANG_COMMENTS_LOW_KARMA, cmsUser::getPermissionValue('comments', 'karma')); ?></p>
<?php } ?>
</div>
<?php } ?>
<script>
<?php echo $this->getLangJS('LANG_SEND', 'LANG_SAVE', 'LANG_COMMENT_DELETED', 'LANG_COMMENT_DELETE_CONFIRM'); ?>
<?php if ($is_highlight_new){ ?>icms.comments.showFirstSelected();<?php } ?>
</script>
</div>
У меня есть этот файл, зачем мне его код?
Меня интересует ваш файл \templates\MTheme\controllers\comments\list.tpl.php
И я умоляю, убирайте длинные тексты под спойлер!
Шаблон сделан на Bootstrap. вот ссылка на шаблон, может поможет:
На демо сайте разработчика комментарии тоже уходят вниз при добавлении. И браузер ругается на яваскрипт:
Код действительно прислал из стандартного шаблона. Посмотрел код из нужного шаблона и сравнил со стандартным, код вроде такой же. Код присылаю в сплойлере.
<?php $this->addJS('templates/MTheme/js/jquery-scroll.js'); ?>
<?php $this->addJS('templates/MTheme/js/comments.js'); ?>
<?php $is_guests_allowed = !empty($this->controller->options['is_guests']); ?>
<?php $is_karma_allowed = $user->is_logged && !cmsUser::isPermittedLimitHigher('comments', 'karma', $user->karma); ?>
<div id="comments_widget">
<div class="title">
<a name="comments"></a>
<h2><?php echo $comments? html_spellcount(sizeof($comments), LANG_COMMENT1, LANG_COMMENT2, LANG_COMMENT10): LANG_COMMENTS; ?></h2>
<?php if ($user->is_logged){ ?>
<div class="track">
<input type="checkbox" id="is_track" name="is_track" value="1" <?php if($is_tracking){ ?>checked="checked"<?php } ?> />
<label for="is_track"><?php echo LANG_COMMENTS_TRACK; ?></label>
</div>
<?php } ?>
</div>
<?php if ($user->is_logged){ ?>
<div id="comments_refresh_panel">
<a href="#refresh" class="refresh_btn" onclick="return icms.comments.refresh()" title="<?php echo LANG_COMMENTS_REFRESH; ?>"></a>
</div>
<?php } ?>
<div id="comments_list">
<?php if (!$comments){ ?>
<div class="no_comments">
<?php echo LANG_COMMENTS_NONE; ?>
</div>
<?php if (!$user->is_logged && !$is_guests_allowed) { ?>
<div class="login_to_comment">
<?php
$reg_url = href_to('auth', 'register');
$log_url = href_to('auth', 'login');
printf(LANG_COMMENTS_LOGIN, $log_url, $reg_url);
?>
</div>
<?php } ?>
<?php } ?>
<?php if ($comments){ ?>
<?php echo $this->renderChild('comment', array('comments'=>$comments, 'target_user_id'=>$target_user_id, 'user'=>$user, 'is_highlight_new'=>$is_highlight_new, 'is_can_rate' => $is_can_rate)); ?>
<?php } ?>
</div>
<div id="comments_urls" style="display: none"
data-get-url="<?php echo $this->href_to('get'); ?>"
data-delete-url="<?php echo $this->href_to('delete'); ?>"
data-refresh-url="<?php echo $this->href_to('refresh'); ?>"
data-track-url="<?php echo $this->href_to('track'); ?>"
data-rate-url="<?php echo $this->href_to('rate'); ?>"
></div>
<?php if (($user->is_logged && cmsUser::isAllowed('comments', 'add')) || (!$user->is_logged && $is_guests_allowed)){ ?>
<div id="comments_add_link">
<a href="#reply" class="ajaxlink" onclick="return icms.comments.add()"><?php echo LANG_COMMENT_ADD; ?></a>
</div>
<div id="comments_add_form">
<?php if ($is_karma_allowed || $is_guests_allowed){ ?>
<div class="preview_box"></div>
<form action="<?php echo $this->href_to('submit'); ?>" method="post">
<?php echo html_csrf_token($csrf_token_seed); ?>
<?php echo html_input('hidden', 'action', 'add'); ?>
<?php echo html_input('hidden', 'id', 0); ?>
<?php echo html_input('hidden', 'parent_id', 0); ?>
<?php echo html_input('hidden', 'tc', $target_controller); ?>
<?php echo html_input('hidden', 'ts', $target_subject); ?>
<?php echo html_input('hidden', 'ti', $target_id); ?>
<?php echo html_input('hidden', 'tud', $target_user_id); ?>
<?php echo html_input('hidden', 'timestamp', time()); ?>
<?php if (!$user->is_logged) { ?>
<?php
$this->addJS('templates/MTheme/js/jquery-cookie.js');
$name = cmsUser::getCookie('comments_guest_name');
$email = cmsUser::getCookie('comments_guest_email');
?>
<div class="author_data">
<div class="name field">
<label><?php echo LANG_COMMENTS_AUTHOR_NAME; ?>:</label> <?php echo html_input('text', 'author_name', $name); ?>
</div>
<div class="email field">
<label><?php echo LANG_COMMENTS_AUTHOR_EMAIL; ?>:</label> <?php echo html_input('text', 'author_email', $email); ?>
</div>
</div>
<?php } ?>
<?php echo $user->is_logged? html_editor('content'): html_textarea('content'); ?>
<div class="buttons">
<?php echo html_button(LANG_PREVIEW, 'preview', 'icms.comments.preview()'); ?>
<?php echo html_button(LANG_SEND, 'submit', 'icms.comments.submit()'); ?>
</div>
<div class="loading">
<?php echo LANG_LOADING; ?>
</div>
</form>
<?php } else { ?>
<p><?php printf(LANG_COMMENTS_LOW_KARMA, cmsUser::getPermissionValue('comments', 'karma')); ?></p>
<?php } ?>
</div>
<?php } ?>
<script>
<?php echo $this->getLangJS('LANG_SEND', 'LANG_SAVE', 'LANG_COMMENT_DELETED', 'LANG_COMMENT_DELETE_CONFIRM'); ?>
<?php if ($is_highlight_new){ ?>icms.comments.showFirstSelected();<?php } ?>
</script>
</div>
Простите за глупый вопрос, что то не так с яваскриптом?
А хрен его знает, что с яваскриптом. Я в яваскриптах не разбираюсь. Подождем, может кто знающий расскажет.
А пока в вашем файле вместо
<?php $this->addJS('templates/MTheme/js/jquery-scroll.js'); ?>
<?php $this->addJS('templates/MTheme/js/comments.js'); ?>
подключите скрипты из дефолта
<?php $this->addJS('templates/default/js/jquery-scroll.js'); ?>
<?php $this->addJS('templates/default/js/comments.js'); ?>
Вдруг заработает…
Может есть другие мысли, в чем здесь может быть дело?
Мысль такая, что раз новый комментарий появляется на странице (неважно где), значит обновление списка комментариев яваскриптом всё же происходит. И появляется он снизу, но в середине, значит level его определяется, но почему-то не определяется до перезагрузки ordering.
Почему такое может происходить — надо подумать.