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

Drupal → Как удалить поле "Домашняя страница" из формы добавления комментария

Опубликовано в

Странно не видеть в настройках друпала, функции, отключающей поля и кнопки в форме добавления комментариев. Например часто возникает ситуация когда поле Домашняя страница не желательно. Есть несколько способов удалить его.

Первый способ: CSS

Самый простой способ это скрыть поле с помощью CSS. Добавляем в ваш файл стилей:

#comment-form #edit-homepage-wrapper {
  display: none;
}

Минусы: роботы и особо внимательные пользователи смогут заполнить это поле, поэтому советую избавиться от него и в списке комментариев с помощью темизации файла comment.tpl.php

Второй способ: правка ядра

Открываем файл comment.module и комментируем следующий код

$form['homepage'] = array('#type' => 'textfield', '#title' => t('Homepage'), '#maxlength' => 255, '#size' => 30, '#default_value' => $edit['homepage']);

т.е исправляем на

// $form['homepage'] = array('#type' => 'textfield', '#title' => t('Homepage'), '#maxlength' => 255, '#size' => 30, '#default_value' => $edit['homepage']);

в двух местах - строчка 1351 и 1358. Не советую этот способ, так как при очередном обновлении друпала всё придётся проделывать заново.

Третий способ: создание модуля

Создаём папку comments_without_homepage в sites/all/modules. Создаём в ней два файла, comments_without_homepage.info

$Id$
name = Comments Without Homepage
description = Remove homepage input
version = 6.x-0.1
core = 6.x

и comments_without_homepage.module

function comments_without_homepage_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'comment_form') {
    unset($form['homepage']);
  }
}

Идём в раздел управления модулями и включаем модуль Comments Without Homepage. Ссылка на готовый модуль

Четвёртый способ: с помощью template.php и preg_replace

В папке темы создаём, если его ещё нет, файл template.php и добавляем туда функцию:

function phptemplate_form($element) {
  if ($element['#id'] == 'comment-form') {
    $element['#children'] = preg_replace('#<div class="form-item" id="edit-homepage-wrapper">.*</div>#isU', '', $element['#children']);
  }
  return theme_form($element);
}

Очищаем кэш.

Пятый способ: с помощью template.php

В папке темы создаём, если его ещё нет, файл template.php и добавляем туда две функции:

function THEMENAME_theme() {
  return array(
    'comment_form' => array(
      'arguments' => array('form' => NULL),
    ),
  );
}
 
function THEMENAME_comment_form($form) {
  unset($form['homepage']);
  return drupal_render($form);
}

Очищаем кэш. Это возможно самый правильный вариант.

По материалам drupal.org и drupal.ru

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

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

Делается проще

<?php //comment-form.tpl.php

$form['homepage'] = null;
print drupal_render($form);

?>

видел этот вариант на drupal.org, но у меня он так и не заработал

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

надеюсь вместо ID-ВАШЕЙ-ТЕМЫ не забыли прописать название темы? :) на этом блоге используется именно пятый способ

// template.php
 
function brilliance_theme() {
    return array('comment_form' => array('arguments' => array('form' => NULL)));
}
 
function brilliance_comment_form($form) {
    unset($form['homepage']);
    return drupal_render($form);
}

Конечно стояло название, не знаю причину неработоспособности. Меня устроил вариант с шаблоном-)

Установил модуль - сработало. По-крайней мере, это самое незапарное решение. Большое спасибо!

А в Drupal 7 как можно скрыть/удалить поле Домашняя страница? Попробовал несколько способов, ничего не вышло.

В 7ке по примеру Stan Ezersky делается так:
в файле comment-wrapper.tpl.php

$content['comment_form']['author']['homepage'] = NULL;
print render($content['comment_form']);

От пятого способа начал вылетать денвер на локалке, на рабочий сайт не стал пробовать...

В итоге в настройках типа материала поставил выпадающий список настройки камментов в положение "Анонимные пользователи не могут оставлять контактную информацию"
Пропала домашняя страница и имеил... На практике же если человек пишет нехороший каммент то имеил оставляет левый меил...

за инфу спасибо

Надеюсь я по теме... если, что, то поправьте меня на будущее.
Drupal 7 - добавил в свой модуль

<?php
/**
 * Implements hook_form_FORM_ID_alter(). 
 */
 
function mymodule_form_comment_form_alter(&$form) {
$form['#validate'][] = 'mymodule_comment_form_validate';
} 
 
function mymodule_comment_form_validate($form, &$form_state) {
  # проверка одно из дыух полей обязат
  if(empty($form['comment_body']['und'][0]['value']['#value']) && empty($form['field_rate']['und'][0]['value']['#value'])) {
        form_set_error('field_rate', t('Введите rate'));
	form_set_error('comment_body', t('Или введите комментарий'));
    }
}

Но траблы в том что при отправке формы комента - сообщение об ошибке выводится, а поля не подсвечиваются? Может из-за того что форма отправлена со страницы node/nid а сообщение об ошибке выводится на странице /comment/reply/nid ? Или в чём то другом?

почитайте про валидацию составных полей

Я чайник в коде. А где увидеть ID моей темы для пятого способа?

название папки с темой

То есть не ID-ВАШЕЙ-ТЕМЫ а ТHEME_NAME правильнее...)))

Понял.. Спасибо, но не помогло.. Просто ошибку выдаёт на белом экране.. Версия друпал 7.15 . Третий день парюсь. В итоге адмика темы оформления закосячилась из-за всех моих действий, а толку нет. Где намудрил бог его знает.

И так и не решил два вопроса:
1. Как сделать поля Имя и Почта в одну строчку.
2. Как убрать поле Домашняя страница.

Завтра четвёртый день запары будет, оО

тебя, честно, жалко. это же просто семечки...)))
Кстати, вместо имя_темы можно использовать универсальное: phptemplate_... (в любой теме)
Есть хороший модуль: http://drupal.org/project/devel_themer
А если белый экран, ты смотришь ошибку в логах?

в семёрке из админки отключается: Structure - Content types - ... - edit - Comment settings - Anonymous commenting = Anonymous posters may not enter their contact information

Белый экран - пишет "Синтаксическая ошибка". А в настройках "Anonymous posters may not enter their contact information" тогда и поле e-mail прячется, а оно мне нужно для подписки на комментарии для анонимов.
Модуль завтра посмотрю.. Как я понял он лишь формирует код или сразу правит как надо?

Спасибо большое! Сделал с помощью предложенного вами готового модуля.

А как добавить название статьи к "Комментарии", который отображается вначале всех комментариев. Например вот так Комментарии к Как удалить поле "Домашняя страница" из формы добавления комментария. И после этого идут уже все комментарии. На вордпресс было легко вывести Заголовок статьи рядом с "Комментарии".
Я пробовала сделать это в шаблоне templates/comment-wrapper.tpl.php, но не знаю какой код прописать чтобы название статьи и тут тоже отобразилось. Вы можете помочь с решением этой задачи? Спасибо.

Спасибо, помогло.

Вставила

$content['comment_form']['author']['homepage'] = NULL;
выше уже имеющейся в шаблоне строки
<?php print render($content['comment_form']); ?>

Но (к предыдущему комменту).

Поле "Домашняя страница" появилось в форме коммента 2 уровня

5-й метод не сработал. Не стал разбираться почему.
У меня это сработало:

function promo_form_comment_form_alter(&$form, &$form_state) {
  $form['author']['homepage']['#access'] = FALSE;
}

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

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

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