В 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 к полям, и убрал несколько ненужных мне полей, в итоге форма комментирования стала выглядеть
спасибо очень помогли
ОтветитьУдалитьДоброй ночи!=) Подскажите пжлста, как можно темезировать комментарии на подобее того как у вас сделано. Я имею ввиду уже опубликованные. Вот верхний... Кирилл и дата. А то по дефолту очень много лишнего, а как убрать не понятно.
ОтветитьУдалитьПопробуйте искать отсюда www.drupal.ru/node/35612
ОтветитьУдалить