Редактор добавления комментария над списком комментариев

InstantCMS 2.X
#1 26 апреля 2018 в 21:59
Решил переработать вывод комментариев, по сути как сделано сейчас выглядит не очень удобно, так как если на сайте к примеру много комментариев то форма добавления комментария (редактор) оказывается в самом низу, под списком комментариев, что заставляет пользователя прокрутить добавленные комментарии и только уже потом добавлять самому.

И все бы было бы просто, если б поменять в фаиле templates/default/controllers/comments/list.tpl.php немного местами и редактор у нас уже над комментариями
  1.  
  2. <?php // Шаблон списка комментариев и формы добавления //
  3.  
  4. $this->addJS('templates/default/js/jquery-scroll.js');
  5. $this->addJS('templates/default/js/comments.js');
  6. $is_guests_allowed = !empty($this->controller->options['is_guests']);
  7. $is_karma_allowed = $user->is_logged && !cmsUser::isPermittedLimitHigher('comments', 'karma', $user->karma);
  8.  
  9. ?>
  10. <?php if ($rss_link){ ?>
  11. <div class="content_list_rss_icon">
  12. <a href="<?php echo $rss_link; ?>">RSS</a>
  13. </div>
  14. <?php } ?>
  15. <?php if ($user->is_logged){ ?>
  16. <?php if ($is_karma_allowed){ ?>
  17. <div class="track">
  18. <label><input type="checkbox" id="is_track" name="is_track" value="1" <?php if($is_tracking){ ?>checked="checked"<?php } ?> /> <?php echo LANG_COMMENTS_TRACK; ?></label>
  19. </div>
  20. <?php } ?>
  21.  
  22.  
  23. <?php if (($user->is_logged && cmsUser::isAllowed('comments', 'add')) || (!$user->is_logged && $is_guests_allowed)){ ?>
  24. <div id="comments_add_link">
  25. <a href="#reply" class="ajaxlink" onclick="return icms.comments.add()"><?php echo LANG_COMMENT_ADD; ?></a>
  26. </div>
  27.  
  28. <div id="comments_add_form">
  29. <?php if ($is_karma_allowed || $is_guests_allowed){ ?>
  30. <div class="preview_box"></div>
  31. <form action="<?php echo $this->href_to('submit'); ?>" method="post">
  32. <?php echo html_csrf_token($csrf_token_seed); ?>
  33. <?php echo html_input('hidden', 'action', 'add'); ?>
  34. <?php echo html_input('hidden', 'id', 0); ?>
  35. <?php echo html_input('hidden', 'parent_id', 0); ?>
  36. <?php echo html_input('hidden', 'tc', $target_controller); ?>
  37. <?php echo html_input('hidden', 'ts', $target_subject); ?>
  38. <?php echo html_input('hidden', 'ti', $target_id); ?>
  39. <?php echo html_input('hidden', 'tud', $target_user_id); ?>
  40. <?php echo html_input('hidden', 'timestamp', time()); ?>
  41. <?php if (!$user->is_logged) { ?>
  42. <?php
  43. $this->addJS('templates/default/js/jquery-cookie.js');
  44. $name = cmsUser::getCookie('comments_guest_name');
  45. $email = cmsUser::getCookie('comments_guest_email');
  46. ?>
  47. <div class="author_data">
  48. <div class="name field">
  49. <label><?php echo LANG_COMMENTS_AUTHOR_NAME; ?>:</label> <?php echo html_input('text', 'author_name', $name); ?>
  50. </div>
  51. <div class="email field">
  52. <label><?php echo LANG_COMMENTS_AUTHOR_EMAIL; ?>:</label> <?php echo html_input('text', 'author_email', $email); ?>
  53. </div>
  54. </div>
  55. <?php } ?>
  56. <?php echo $user->is_logged ? html_editor('content') : html_textarea('content'); ?>
  57. <div class="buttons">
  58. <?php echo html_button(LANG_PREVIEW, 'preview', 'icms.comments.preview()'); ?>
  59. <?php echo html_button(LANG_SEND, 'submit', 'icms.comments.submit()'); ?>
  60. <?php echo html_button(LANG_CANCEL, 'cancel', 'icms.comments.restoreForm()', array('class'=>'button-cancel')); ?>
  61. </div>
  62. <div class="loading">
  63. <?php echo LANG_LOADING; ?>
  64. </div>
  65. </form>
  66. <?php } else { ?>
  67. <p><?php printf(LANG_COMMENTS_LOW_KARMA, cmsUser::getPermissionValue('comments', 'karma')); ?></p>
  68. <?php } ?>
  69. </div>
  70. <?php } ?>
  71.  
  72. <script type="text/javascript">
  73. <?php echo $this->getLangJS('LANG_SEND', 'LANG_SAVE', 'LANG_COMMENT_DELETED', 'LANG_COMMENT_DELETE_CONFIRM'); ?>
  74. <?php if ($is_highlight_new){ ?>icms.comments.showFirstSelected();<?php } ?>
  75. </script>
  76.  
  77.  
  78. <div id="comments_refresh_panel">
  79. <a href="#refresh" class="refresh_btn" onclick="return icms.comments.refresh()" title="<?php echo LANG_COMMENTS_REFRESH; ?>"></a>
  80. </div>
  81. <?php } ?>
  82.  
  83. <div id="comments_list">
  84.  
  85. <?php if (!$comments){ ?>
  86.  
  87. <div class="no_comments">
  88. <?php echo LANG_COMMENTS_NONE; ?>
  89. </div>
  90.  
  91. <?php if (!$user->is_logged && !$is_guests_allowed) { ?>
  92. <div class="login_to_comment">
  93. <?php
  94. $reg_url = href_to('auth', 'register');
  95. $log_url = href_to('auth', 'login');
  96. printf(LANG_COMMENTS_LOGIN, $log_url, $reg_url);
  97. ?>
  98. </div>
  99. <?php } ?>
  100.  
  101. <?php } ?>
  102.  
  103. <?php if ($comments){ ?>
  104.  
  105. <?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)); ?>
  106.  
  107. <?php } ?>
  108.  
  109. </div>
  110.  
  111. <div id="comments_urls" style="display: none"
  112. data-get-url="<?php echo $this->href_to('get'); ?>"
  113. data-approve-url="<?php echo $this->href_to('approve'); ?>"
  114. data-delete-url="<?php echo $this->href_to('delete'); ?>"
  115. data-refresh-url="<?php echo $this->href_to('refresh'); ?>"
  116. data-track-url="<?php echo $this->href_to('track'); ?>"
  117. data-rate-url="<?php echo $this->href_to('rate'); ?>"
  118. ></div>
  119.  
Да вот только одно но! Когда нажимаем "Написать комментарий" форма открывается все равно внизу. Что логично не правильно. Так вот может кто то уже заморачивался привязкой редактора над комментариями

P.S.
Конечно есть классный компонент ГудКомментарии, но он честно говоря работает не стабильно, не хочу обидеть Дениса Васильевича, но компонент ставить на рабочий проект побоялся так как выглядит красиво, но работает с перебоями.
Прикрепленный файл
1_lambv.jpg 142 Кб
#2 27 апреля 2018 в 00:00
Тоже заметил это, но забыл.
На стене пользователя все правильно и удобно: форма всегда сверху.
#3 27 апреля 2018 в 00:17

На стене пользователя все правильно и удобно: форма всегда сверху.

alkokrolik
потому что новые вверху.
в комментариях новые внизу.
#4 27 апреля 2018 в 00:28
Fuze,
А какая разница, писателей сейчас больше чем читателей.
#5 27 апреля 2018 в 00:32
Я имею в виду: зашел, прочитал статью или новость, всё, конец статьи и сразу форма комментариев. Мотивирует.
Если комментов очень много — шанс что их будут читать невелик, а вот крутить вниз раздражает немного.
#6 27 апреля 2018 в 10:11
вообще не вижу проблемы ) просто добавьте ссылку
  1. <a href="#reply" class="ajaxlink" onclick="return icms.comments.add()">написать комментарий</a>
на начало блока комментариев, зачем переносить всю форму?
#7 27 апреля 2018 в 11:40
@JanaKovich, не работает.
#8 27 апреля 2018 в 13:16
Так а почему бы тогда не сделать блок комментариев с прокруткой
#9 27 апреля 2018 в 13:37
/templates/default/js/comments.js

  1. form.detach().appendTo('#comments_widget');
заменить на

  1. form.detach().insertBefore('#comments_list');
#10 4 июня 2018 в 22:33
Теперь, по-умолчанию, кнопка и форма добавления нового комментария находятся наверху сразу после публикации. Но это тоже по-своему неудобно.
После этого пользователи начали жаловаться, что неудобно после прочтения комментариев крутить наверх чтобы достаться до кнопки "добавления комментария". А некоторые ленясь крутить вверх просто добавляют новый комментарий как ответ к последнему опубликованному комментарию, даже если этот комментарий на самом деле не является "ответом".
Конечно, можно пошаманить с кодом и сделать чтобы выводилось как нравится, но считаю уместным наличие таких опций в настройках компонента "Комментарии", поэтому добавил соответствующее предложение на Github
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.