12 сентября, 2011

Как оформитить форму комментария в drupal 7

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

В Drupal 7 есть функция hook_form_alter для внесения изменений в форму, прежде чем она отобразится, но эта функция будет вызываться для каждой формы генерируемой Drupal. Поэтому, я предложу использовать функцию hook_form_FORM_ID_alter, так как она вызывается только для конкретной формы с идентификатором form_id. Плюс эта функция вызывается после всех функций переопределения, так что вы будете знать, что ваши изменения не будут отменены в другом месте. Нам остается узнать только form_id формы комментария.



Чтобы найти form_id попробовать firebugging форму и искать скрытые поля ввода с именем = form_id. Выглядит это примерно так:
<input type="hidden" value="comment_node_blog_form" name="form_id">
Часть после value= является form_id.

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

Например, 'blog' тип узла бы form_id из comment_node_blog_form , как в примере выше. Однако более общий form_id comment_form распространяется на все формы комментариев для всех типов контента. Я буду менять все формы комментариев, поэтому я буду использовать form_id comment_form.

Теперь объявим функцию в template.php в нашей теме (заменить theme с названием вашей темы):

function theme_form_comment_form_alter (& $form, и $ form_state) { }

В функции мы можем объявлять свои группы, добавлять удалять элементы, содержание массива $form можно узнать, установив devel module и вызвав внутри функции: dpm($form);

Я решил немного упростить форму комментария, оставив только name и comment_body, и поменять названия полей, чтобы немного расшевелить форму.

function theme_form_comment_form_alter(&$form, &$form_state) {
	// Wrap the intro in a div for themeing.
	$form['intro']['#prefix']  = '<div class="comment rounded margin-top-20 comment-blog-form">';
	$form['intro']['#weight']  = -40;  	
	$form['author']['homepage'] = NULL;
	$form['author']['homepage']['#access'] = FALSE;
	$form['author']['mail']['#required'] = FALSE;
	$form['author']['#weight'] = 1;
	$form['author']['name']['#title'] = t('А зовут вас:');
	$form['author']['_author']['#title'] = t('А зовут вас:');	
	$form['actions']['submit']['#value'] = t('Я все сказал!');
	$form['actions']['preview'] = NULL;	
	$form['comment_body']['und'][0]['value']['#title'] = t('Что скажете?');
	$form['comment_body']['und'][0]['value']['#rows'] = 2;	
	$form['outro']['#suffix']  = '</div>';
	$form['outro']['#weight']  = 140;
}
В итоге, обернул форму в еще один div, объявил свои значения label к полям, и убрал несколько ненужных мне полей, в итоге форма комментирования стала выглядеть
Не забывайте, что вы можете добавить дополнительные поля для комментариев в Drupal 7

3 комментария:

  1. Доброй ночи!=) Подскажите пжлста, как можно темезировать комментарии на подобее того как у вас сделано. Я имею ввиду уже опубликованные. Вот верхний... Кирилл и дата. А то по дефолту очень много лишнего, а как убрать не понятно.

    ОтветитьУдалить