Drupal → Прячем форму комментирования и показываем её только по клику на ссылке "Отправить комментарий"

17.12.2009

Дефолтная форма комментариев занимает кучу места на странице. Поэтому хорошим решением будет скрыть её, и показывать только когда пользователь захочет оставить комментарий.

Первым шагом прячем форму комментариев для пользователей, у которых включён javascript. Для этого в css файл добавляем:

.js .blog + #comments #comment-form { display: none; }

Вместо .blog указываем класс, которым помечены ноды. Например, если комментарии разрешены для материала типа Story (Заметка), то класс у ноды будет story и селектор соответственно:

.js .story + #comments #comment-form { display: none; }

Это необходимо, чтобы форма пряталась только на странице просмотра ноды, и не пряталась на странице ответа на чей нибудь коммент.

Вторым шагом добавляем javascript. Если у вас уже есть .js файл который использует тема, то добавляем код туда:

$(function(){
    var jHeadline = $('#comments h2');
    jHeadline.html('<a href="#">' + jHeadline.html() + '</a>');
    var jLink = jHeadline.find('a');
    jLink.css({'text-decoration':'none', 'border-bottom':'1px dashed'});
    jLink.click(function(){
        $('#comment-form').slideToggle('fast');
        return false;
    });
});

Если нет, то открываем файл ваша-тема.info и добавляем туда строчку:

scripts[] = scripts.js

Далее, в папке темы создаём файл scripts.js и добавляем туда код, приведённый выше. Очищаем кэш.

Результат можно посмотреть в форме ниже.

Написанное актуально для
Drupal 6.x
Похожие записи

Комментарии

Андрей
19.05.2010, 01:08

А чем отличается - ajax_comments от этого варианта?

Ну это не модуль, а простая темизация формы комментариев средствами js и css. Ставить ajax_comments ради одной ui функции как то не разумно ;)

У меня форма открыта при переходе к комментам, а у Вас закрыта. Как исправить?

крутить css селектор который скрывает форму

Дмитрий
04.12.2010, 23:14

Не работает.
Может тут не указано, что надо установить доп модули, типа jQuery или типа того?

у меня по стандарту развернуто получается

если быть точном не понял откуда брать класс для типа материала допустим машинное название mob

Работает только через стандартный шаблон как только вставляю node-product.tpl.php Неработает

Если вместо правки css и добавления display:none; мы вставим в начало script.js
$('#comment-form').hide();
то в браузерах, не поддерживающих js, форма будет отображаться, а в поддерживающих - скрываться и работать наш скрипт.

Гость
16.10.2013, 21:30

piterden, скрипт выдает ошибку в таком раскладе. Напишите полный код плиз.

Для drupal 7 немного скорректировал, может кому полезно будет
1. в css пишем

.node-type-article #comments #comment-form { display: none; } //в моем случае я менял для типа article

2. в js пишем

$(function(){
    var jHeadline = $('#comments h2.title.comment-form');
    jHeadline.html('<a href="#">' + jHeadline.html() + '</a>');
    var jLink = jHeadline.find('a');
    jLink.css({'text-decoration':'none', 'border-bottom':'1px dashed'});
    jLink.click(function(){
        $('#comment-form').slideToggle('fast');
        return false;
    });
});
Гость
18.06.2014, 20:01

ajax comments по моему не скрывает форму, а тут хайд шоу есть, то что надо. хандедх отличный спец имхо

Код для drupal 7, скрывает форму не через css, а через javascript - форма будет видна тем, у кого не включен js.

(function($) {
	
	$(function(){
		$('.node-type-article #comment-form').hide();
		var jHeadline = $('#comments h2.title.comment-form');
		jHeadline.html('<a href="#">' + jHeadline.html() + '</a>');
		var jLink = jHeadline.find('a');
		jLink.css({'text-decoration':'none', 'border-bottom':'1px dashed'});
		jLink.click(function(){
			$('#comment-form').slideToggle('fast');
			return false;
		});
	});    
	
})(jQuery);
Игорь
28.04.2015, 15:20

Помню, что где то видел эту статейку на сайте, но где... Два дня искал ;-) Я то всё вбивал: форма комментариев скрыть, блок, как на этом сайте и т.п. А тут написано прячем... ;-) "Отправить комментарий" а сейчас - "Оставить комментарий".
У меня #comments h3 тегом вывожу. Это чертово seo так глубоко в мозг засело... Ведь заголовок на странице - это большой вес этого текста, а чем выше заголовок, тем больше его значимость. Вот я тут seo поднял ;-) xandeadx его не [любит] сейчас, не хочет думать. А раньше, смотрю записи 2009 - 2010 года очень даже писал эти три волшебные буквы ;-)

Игорь
30.04.2015, 22:43
// Прячем форматы текста
jQuery(function() {
  var jHeadline = jQuery('<div></div>');
  jHeadline.html( '<a href="#" style="border-bottom: 1px dashed; text-decoration: none;">Формат ввода текста</a>' );
  var jLink = jHeadline.find('a');
  jQuery('#edit-body-und-0-format').hide().before( jHeadline );
  jLink.click(function(e){
    e.preventDefault();
    jQuery('#edit-body-und-0-format').slideToggle('fast');
  });
});

Иногда бывает мешает глазу выбор форматов ввода. Можно вот так же спрятать. Сделал по аналогии. Это для body, можно или для каждого или что-то по универсальнее. Хотя бывает это даже удаляют в php.

Добавить комментарий