Убрать показ поля темы комментария, если оно не заполнено

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

Аватар пользователя boneg boneg 27 апреля 2011 в 12:34

Задача такая:
Оставить опциональное поле заголовок для комментария, но в случае, если пользователь его не заполнил - не выводить заголовок коммента. Обсуждение нашел только в этой теме - http://www.drupal.ru/node/55602. Но там вариант, который не работает (если его подпилить - получим вариант, который удалит тему, если словосочетание встретилось в тексте коммента и теряется якорь на коммент, который может пригодиться). Хочу предложить своих два варианта решения.

1. С помощью хука на PHP.

В template.php вставляем следующее и очищаем кеш:

<?php
function phptemplate_preprocess_comment(&$vars) {
$comment $vars['comment'];
$titleclean trim(strip_tags($vars['title']));
$length strlen($titleclean);
$contclean trim(strip_tags($vars['content']));
$shortcont mb_substr($contclean0$length) ;
if (
$titleclean == $shortcont) {
$vars['title'] = l(''$_GET['q'], array('fragment' => "comment-$comment->cid"));
}
?>

У меня отлично работает решение, тема не отображается, если не заполнена пользователем.

2. С помощью jQuery.

Создаем и подключаем js.файлик или дописываем в уже готовый следующую функцию.

$(document).ready(function(){
$('.comment').each(function(){
var str = $(this).find('h3 a').html().length;
str2 = $(this).find('.content').find('p:first').text().substr(0, str);
if (str2 == $(this).find('h3 a').html()) {
$(this).find('h3').hide();
}
});
});

Решение работает, если в вашей разметке тема коммента обрамляется тегом h3 и формат ввода подразумевает обрамление коммента параграфом, если другая разметка - замените в моем скрипте h3 на свой тег и p:first на свой тег.
В этом случае тема выводится, но сразу скрывается.

Комментарии

Аватар пользователя Scaint@drupal.org Scaint@drupal.org 27 апреля 2011 в 15:57

Проще всего в comment.tpl.php добавить проверку переменной $title. Если она будет пустой, то заголовок не выведется
<?php if ($title) : ?><h3 class="comment-title"><?php print $title ?></h3><?php endif; ?>

Аватар пользователя Scaint@drupal.org Scaint@drupal.org 27 апреля 2011 в 17:00

Да, как-то я про это забыл.
Тогда можно еще такой вариант. Написать обработчик формы comment_form, который будет выполняться до comment_form_submit().
Если тема не указана, то записываем в $form_state['values']['subject'] что-то вроде <none>
В таком случае _comment_form_submit() не добавит кусок коммента в поле темы. А в шаблоне comment.tpl.php написать
<?php if ($title != '<none>') : ?><h3 class="comment-title"><?php print $title ?></h3><?php endif; ?>

Аватар пользователя boneg boneg 27 апреля 2011 в 17:19

Опять не очень подходит. на странице админки комментов не удобно искать нужный коммент (у половины будет none -это раз). Не сохраняется якорь - два. Чем плох мой вариант?