[Решено] Отделить комментарии от тела ноды

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

Аватар пользователя Bahiya Bahiya 8 марта 2009 в 6:35

Подскажите, как отделить комментарии от тела ноды?

Комментарии выводятся вместе с основным контентом переменной $content в node.tpl.php.

Никак не соображу, как разместить свой регион между телом ноды и комментариями к ней. Т.е. непосредственно за телом ноды должен идти мой регион (Статьи по теме), а уже после него выводиться комментарии.
Думаю, что необходимо разбирать $content на составляющие и внедрять регион в неё. Ткните в правильную сторону плиз.

Вот так у меня сейчас выглядит низ ноды.
Хочется сделать вот так.

Извените если вопрос на самом деле глупый, здорово запутался.

P.S. Поиск от гугля по этому сайту просто ужасен. При наличии слова "Комментарии" в запросе, большая часть результатов содержит малоинформативную фразу Выберите нужный метод показа комментариев и нажмите 'Применить'. Я думал гугол уже давно научился отделять контент от интерфейса.

Комментарии

Аватар пользователя elia elia 8 марта 2009 в 10:29

Для этого надо использовать hook_form_alter($form_id, &$form).

А вообще каменты вызываются в node.module не через какие-то переменные, а функциями:
function node_show() вызывает function comment_render($node, $cid = 0) из comment_module. В клинических лучаях вставляй вызов своей функции перед ней. Но это неправильный путь.

Аватар пользователя elia elia 8 марта 2009 в 10:51

"elia" wrote:
Для этого надо использовать hook_form_alter($form_id, &$form).

или hook_link - он добавляет ссылки в тот же регион, где находятся теги таксономии и т.д.

Аватар пользователя Dan Dan 8 марта 2009 в 17:11

если на сайте установлен views, сделать комменты блоком и выводить в нужный регион. хоть хедер )

Аватар пользователя Bahiya Bahiya 9 марта 2009 в 2:11

"fairwind" wrote:
а еще я где-то встречал готовый модуль, который выносит комментарии в отдельную переменную.

comment_display - модуль может выводить $comment в page.tpl.php, но это скорее всего не совсем то что надо. Не хватило php-знаний для работы с этим модулем.

"Dan" wrote:
если на сайте установлен views, сделать комменты блоком и выводить в нужный регион. хоть хедер )

А как их сделать блоком? Views стоит, но как блоком вывести комментарии с формой комментирования внизу? Будьте добры, укажите пару-тройку важных шагов, куда кликать, что править. Комментарии в отдельном блоке - это идеальное решение в моем дизайне. Или может мы неправильно поняли друг-друга? В views есть "Последние комментарии", но в них нет формы.

Еще прошу разъяснить следующий момент
Если файл comment.tpl.php отвечает за вывод опубликованных комментариев, тогда какой tpl.php отвечает за вывод формы комментирования?

Аватар пользователя elia elia 9 марта 2009 в 12:14

"Bahiya" wrote:
Еще прошу разъяснить следующий момент
Если файл comment.tpl.php отвечает за вывод опубликованных комментариев, тогда какой tpl.php отвечает за вывод формы комментирования?

comment.tpl.php отвечает только за последовательность вывода отформатированого/отрендериного потока комментариев, который уже создан ранее.

Аватар пользователя Bahiya Bahiya 10 марта 2009 в 0:00

"elia" wrote:
comment.tpl.php отвечает только за последовательность вывода отформатированого/отрендериного потока комментариев, который уже создан ранее.

Да, вроде с этим разобрался. И даже удалось сделать регион между телом ноды и комментариями )

Для полного счастья не хватает ответа на след. вопросы:
1. Каким tpl.php можно темизировать форму комментирования? Почему-то нет желания в template.php добавлять правила, т.к. шаблон становится сложен для понимания.
2. Как в comment-wrapper.tpl.php получить количество комментариев для этой ноды?
Расскройте секрет плиз )

Аватар пользователя Bahiya Bahiya 10 ноября 2015 в 11:46

Добавим новый регион после содержимого ноды, но перед комментариями.

1. В mytheme.info определим новый регион с помощью добавления след. строки:

regions[new_region] = Новый Регион

2. В template.php темы добавим регион в набор переменных ноды

function phptemplate_preprocess_node(&$variables, $hook) {
  $variables['new_region'] = theme('blocks', 'new_region');
}

Если сейчас очистить кэш ( admin/settings/performance ) и несколько раз обновить страницу размещения блоков ( admin/build/block ), то вы сможете увидеть созданный регион в любом из выпадающих списков. Можно добавить в него нужный блок и сохранить изменения. Блок добавился и сохранился, но на странице не появился.

3. В node.tpl.php определим место для вывода нового региона. Мой node.tpl.php выглядит так.

<?php print $new_region; ?>

Снова очищаем кэш и обновляем страницу с ожидаемым блоком. Радуемся.

Теперь возможности ограничены только вашими познаниями в css. С помощью подобных переменных можно осуществлять вывод блоков практически в любом месте ноды. Над заголовком, под заголовком, в содержимом ноды, под содержимым и т.д. Определяем регион, добавляем его в переменные ноды, выводим на экран.

У меня получилось вот так.

Аватар пользователя Bahiya Bahiya 10 марта 2009 в 3:02

"Bahiya" wrote:
Для полного счастья не хватает ответа на след. вопросы:
1. Каким tpl.php можно темизировать форму комментирования? Почему-то нет желания в template.php добавлять правила, т.к. шаблон становится сложен для понимания.
2. Как в comment-wrapper.tpl.php получить количество комментариев для этой ноды?
Расскройте секрет плиз )

Осознал узость своего кругозора и ушел курить api.drupal.ru

Аватар пользователя Valeratal Valeratal 1 апреля 2009 в 22:06

спасибо, полезно

кстати, модуль content tamplate тоже много умеет
Вот например, в статье выводится директ и адсенс

Один минус, в версии для печати эта реклама также выводится

Аватар пользователя Bahiya Bahiya 4 апреля 2009 в 3:05

"Dark_kz" wrote:
Получить количество комментариев http://www.drupal.ru/node/23301
Сам комментарий темизировать получилось, теперь меня интересует - "Как все-таки выводить форму комментирования?"

Да, количество комментариев получил как раз этим способом. А форму комментирования расчленил в template.php с помощью mytheme_comment_form($form)

Аватар пользователя Dark_kz Dark_kz 4 апреля 2009 в 13:07

"Bahiya" wrote:
А форму комментирования расчленил в template.php с помощью mytheme_comment_form($form)

Спасибо. Будем иметь ввиду