xandeadx.ru Блог музицирующего веб-девелопера

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

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

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

Комментарии RSS

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

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

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

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

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

нет. jquery входит в ядро друпала

У меня что-то тоже не работает

:-(

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

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

откуда брать класс

http://getfirebug.com/

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

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

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;
    });
});

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);

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

// Прячем форматы текста
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.

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании