Как добавить отказ от ответственности над формой комментариев? - PullRequest
2 голосов
/ 21 сентября 2010

Я ищу хороший, дружественный к стандартам способ изменить форму комментариев по умолчанию, чтобы сразу после заголовка «Ответить» был отказ от ответственности.Я только хочу, чтобы этот отказ от ответственности появлялся над самой формой комментариев, а не просто при просмотре комментариев.

Эта тема ( Drupal: добавление текста отказа от ответственности над кнопкой отправки в веб-форме ) частично отвечает на то, чтоЯ хочу, но я не уверен, как применить решение специально к форме комментариев.

Я знаю, что это может быть любительский вопрос, но любая помощь приветствуется.Спасибо.

Редактировать: я попытался реализовать hook_form_alter, как это было предложено, и мне удалось заставить отказ от ответственности появляться в форме просто отлично.Одна проблема: первый черновик моего заявления об отказе от ответственности, кажется, оказался в ловушке над формой комментария при ответе на комментарий.Очистка кеша, сброс реестра тем (при каждой загрузке страницы, благодаря модулю devel) - все это не имеет никакого эффекта.

Reply to Comment:
[first version of disclaimer] // won't go away, ever
[comment form]
[current version of disclaimer] // this one is fine
[submit button]

Любая помощь здесь будет очень признательна.

Edit (redux): Реализовано решение, ориентированное на template.php.Он мог работать просто отлично без каких-либо внешних эффектов, как описано выше.Все еще не уверен насчет решения вышеуказанной проблемы.Спасибо всем.

Ответы [ 2 ]

4 голосов
/ 21 сентября 2010

Хотя то, что опубликовал anschauung, будет работать, это большая дополнительная работа по сравнению с использованием hook_form_alter в пользовательском модуле.В вашем случае это выглядело бы примерно так, используя близкое отношение hook_form_FORM_ID_alter:

function module_name_form_comment_form_alter(&$form, &$form_state) {
    $form['disclaimer'] = array(
      '#value' => t('Disclaimer text'),
      '#prefix' => '<div>',
      '#suffix' => '</div>',
      '#weight' => 0,  
    );
}
  • В приведенном выше примере вам необходимо заменить имя_модуля именемиз пользовательского модуля, который вы создаете.
  • #weight будет определять размещение, чем ниже, тем выше будет его размещение.Настраивайте его до тех пор, пока размещение не станет правильным.
  • #prefix и #suffix - это разметка, которая создается до и после элемента, может быть чем угодно.
  • #value значениеэлемент формы, фактический текст заявления об отказе.
  • Этот элемент формы не имеет #type, поэтому он использует значение по умолчанию markup, что означает, что это просто какой-то пользовательский html.
4 голосов
/ 21 сентября 2010

Форма комментария является уникальным животным среди форм Drupal в том смысле, что по умолчанию она не подлежит обсуждению, поэтому обычные методы не будут работать без небольшой дополнительной помощи.

Короче говоря, сначала вам нужно зарегистрировать форму в качестве темы в файле template.php:

/**
* Implementation of hook_theme().
*/
function mytheme_theme(){
  return array(
    'comment_form' => array(
      'arguments' => array('form' => NULL),
    ),
  );
}

Далее, вы можете добавить функцию темы, чтобы добавить некоторые дополнительные элементы в форму:

/**
* Theme the output of the comment_form.
*
* @param $form
*   The form that  is to be themed.
*/
function mytheme_comment_form($form) {
  $form['new_element'] = array(
    '#type' => 'markup',
    '#title' => t('Disclaimer'),
    '#value' => '<p>You have been disclaimed, sir!</p>',
    '#weight' => -20 // Lighter elements float to the top of the form
  );
  return drupal_render($form);
}

Понимание того, как работает API форм (http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html)), поможет вам выполнить эти изменения. Но, если вы просто добавляете HTML, это должно быть довольно просто.

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

...