Есть замечательный модуль Ajax_comments от neochief, который позволяет открывать форму комментария непосредственно под комментарием (посредством AJAX). И есть статья этого-же (кстати многоуважаемого лично мной) автора про перенос формы ввода комментария непосредственно под сам пост, перед списком остальных сообщений - Модуль «Форма комментариев поверх комментов» и даже есть модуль который все это реализует - Comment form above comments. Но есть один нюанс - не дружат эти модули между собой (по крайней мере у меня не получилось их подружить напрямую).
Просматривая исходные коды данных модулей в надежде их все таки подружить, я заметил что в принципе метод предложенный neochief, а именно подменой темы на некотором этапе рендеринга, на свою не единственный (опять же гибкость Drupal в этом плане меня поражает).
Поэтому хочу предложить свой метод, основанный на хуке hook_menu_alter, ведь в принципе ни кто нам не запрещает полностью переопределить вывод ноды подменив стандартный коллбэк «node/%node».
Статья достаточно объемная, с исходными кодами поэтому кому интересно можно посмотреть здесь
Ajax_comments и форма комментариев выше комментариев, там же находиться и архив с модулем.
Основная идея данного модуля, подменить стандартный вывод через node_page_view своим, и в нем проверить как настроен вывод комментария у данного типа ноды, если это стандартный вывод COMMENT_FORM_SEPARATE_PAGE или COMMENT_FORM_BELOW то вызываем стандартный node_show, если же наш новый тип вывода COMMENT_FORM_ABOVE, то вызовем свой обработчик acomment_node_show.
В принципе ничего интересного в самом коде нет, все функции дублируют аналогичные функции из стандартных модулей node и comment, единственное отличие функции
acomment_comment_render от comment_render из модуля comment - это замена строки
<?php$output .= comment_form_box(array('nid' => $nid), t('Post new comment'));?>
на
<?php$output = comment_form_box(array('nid' => $nid), t('Post new comment')) . $output;?>
где мы собственно и переносим форму ввода комментария, сразу после ноды.
Пример реализации в ветке форума моего нового проекта Loros Studio
Комментарии
Скажем так, если нет страха перед кодом, лучше использовать Comments Bonus API. Там можно задать позицию формы как угодно шаблоном. Метод из седьмого друпала, кстати.
Спасибо за наводку, не знал о его существовании (поэтому опять изобретал велосипед ), на досуге гляну ...
Кстати, не решены ли там две небольшие проблемки, которые мне так и не удалось победить в ajax_comments,
1. Работа с капчей (в частности со скрытой капчей) - после предпросмотра, проверка капчи становиться невалидной
2. Корректный пересчет зебры после добвления поста (либо удаления) комментария (а заодно, возможно и порядкового номера комментария внутри поста)
Посмотрел код Сomment bonus api, Вот ведь действительно изобрел велосипед Эх внимательнее надо будет быть в следующий раз
Там действительно более гибкая темизация, а идея та-же.
Вопросик к neochief:
module_load_include('pages.inc', 'ajax_comments'); - это какая-то задумка на будущее ? так как в ajax_comments я такого файла не нашел ...
Последняя версия аякс комментов требует этот модуль. Это инклуд из него.
Здравствуйте.
Установил модуль Comments Bonus API, прельстившись на
понадеявшись, что теперь в comment-wrapper.tpl.php смогу темизировать комментарии и форму их отправки (надо немного поправить размеры textarea, обернуть некоторые элементы в свои слои, прописать свои классы ну и т.п.)
Но в comment-wrapper.tpl.php, который идет в комплекте с модулем в комментариях используются те самые переменные
$content
,$comments
,$comment_form
и т.д., что и в исходном темплейте.Ничего нового не добавилось (наверное?)
Курил
template_preprocess_comment_wrapper()
иtheme_comment_wrapper()
, много думал...Но ничего не надумал.
Подскажите, пожалуйста - как темизировать комментарии с помощью Comments Bonus API и comment-wrapper.tpl.php из его поставки.
Или выложите, плз, свои темплейты - постараюсь в них разобраться.
Заранее спасибо!
в исходном нет переменной формы, там только целая ветка
Т.е. в исходном - только
$content
, а в Comments Bonus API - она режется на$comments . $pager . $comment_form
?Хм, негусто...
Я не знаю, что там еще может быть. Отдельные элементы уже атомарны.
Отличное решение, спасибо!
Но возник вопрос, как вывести новые комментарии под формой?
Там все через js выводится, а у меня пока с этим проблемы..