Ajax_comments и форма комментариев выше комментариев

Главные вкладки

Аватар пользователя olk olk 26 ноября 2010 в 2:26

Есть замечательный модуль 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

Комментарии

Аватар пользователя neochief neochief 26 ноября 2010 в 5:54

Скажем так, если нет страха перед кодом, лучше использовать Comments Bonus API. Там можно задать позицию формы как угодно шаблоном. Метод из седьмого друпала, кстати.

Аватар пользователя olk olk 26 ноября 2010 в 9:13

Спасибо за наводку, не знал о его существовании (поэтому опять изобретал велосипед Smile ), на досуге гляну ...
Кстати, не решены ли там две небольшие проблемки, которые мне так и не удалось победить в ajax_comments,
1. Работа с капчей (в частности со скрытой капчей) - после предпросмотра, проверка капчи становиться невалидной
2. Корректный пересчет зебры после добвления поста (либо удаления) комментария (а заодно, возможно и порядкового номера комментария внутри поста)

Аватар пользователя olk olk 26 ноября 2010 в 10:00

Посмотрел код Сomment bonus api, Вот ведь действительно изобрел велосипед Smile Эх внимательнее надо будет быть в следующий раз Smile
Там действительно более гибкая темизация, а идея та-же.
Вопросик к neochief:
module_load_include('pages.inc', 'ajax_comments'); - это какая-то задумка на будущее ? так как в ajax_comments я такого файла не нашел ...

Аватар пользователя Andruxa Andruxa 16 декабря 2010 в 15:03

Здравствуйте.

Установил модуль Comments Bonus API, прельстившись на

Quote:
You wish to use some of the more advanced custom rendering of comments. This is excellent for additional theme enhancements with more control provided by comment-wrapper.tpl.php.

понадеявшись, что теперь в 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 из его поставки.
Или выложите, плз, свои темплейты - постараюсь в них разобраться.

Заранее спасибо!

Аватар пользователя 7Rei 7Rei 8 апреля 2011 в 2:14

Отличное решение, спасибо!
Но возник вопрос, как вывести новые комментарии под формой?
Там все через js выводится, а у меня пока с этим проблемы..