Здравствуйте!
Пытаюсь вывести поля формы комментариев в нужном мне порядке и обернуть эти поля в bootstrap теги, вывожу поля по отдельности в comment-wrapper.tpl.php.
<?php
<div id="comments" class="<?php print $classes; ?>"<?php print $attributes; ?>>
<?php if ($content['comments'] && $node->type != 'forum'): ?>
<?php print render($title_prefix); ?>
<h2 class="title"><?php print t('Comments'); ?></h2>
<?php print render($title_suffix); ?>
<?php endif; ?>
<?php print render($content['comments']); ?>
<?php if ($content['comment_form']): ?>
<h2 class="title comment-form">Оставьте свой отзыв</h2>
<?php endif; ?>
</div>
<div class="row">
<div class="col-md-3">
<?php print render($content['comment_form']['author']['name']); ?>
<?php print render($content['comment_form']['field_email']); ?>
</div>
<div class="col-md-9">
<?php print render($content['comment_form']['comment_body']);?>
<?php print drupal_render_children($content); ?>
</div>
</div>
?>
Поля выводятся но при попытке отправить комментарий сайт выводит сообщение что поле comment обязательно для заполнения не смотря на то что я это поле заполняю. Я подозреваю что не правильно вывожу сабмит, видимо не проходит какая то проверка. Подскажите в чем может быть проблема? Спасибо!
Комментарии
Пробуйте как-нибудь render($content['comment_form']['actions']);, посмотрите что там есть в форме Devel'ом, при необходимости - отальтерите форму до нужного вида.
Спасибо за ваш ответ, $content['comment_form']['actions'] этот вариант я уже пробовал, тогда сабмит просто не реагирует на клик. По поводу альтера, как мне можно будет выставить поля в определенном порядке? На сколько я понимаю эта функция просто может обернуть поля в определенный тег с классом или id, но не меняет расположение полей. Допустим мне нужно чтобы поле emal было под полем имя.
Т.к. Вы разделяете форму, Вам нужно обозначать к чему этот сабмит относится. Есть такой атрибут: form, для привязки элементов, находящихся за пределом, к форме по ее ID'шнику.
Т.е. Вам нужно присваивать форме ID, и его же добавлять, в атрибут form, всем элементам вне этой формы. (Из-за этого, кстати, у Вас и не детектилось поле описания, оно просто не отправлялось вместе с формой)
Да. Порядок элементов в форме можно определить свойством weight.
Спасибо за подсказку, сделал все через hook_form_alter, теперь комментарии отправляются но приходят пустыми т.е поля не передают значения, не подскажете в чем может быть причина?
<?php
function klinika_radix_form_comment_node_otzivi_form_alter(&$form, &$form_state) { $form['column_left'] = array(
'#prefix' => '<div class="col-md-3">',
'#suffix' => '</div>',
);
$form['column_right'] = array(
'#prefix' => '<div class="col-md-9">',
'#suffix' => '</div>',
);
$form['column_left']['name'] = array(
'#type' => 'textfield',
'#title' => t('First name'),
'#size' => 60,
'#maxlength' => 128,
'#required'=>TRUE,
);
$form['column_left']['mail'] = array(
'#type' => 'textfield',
'#title' => t('Email'),
'#required'=>TRUE,
);
$form['column_right']['comment_body'] = array(
'#type' => 'textarea',
'#title' => t('Отзыв'),
);
$form['column_right']['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Отправить'),
);
$form['comment_body']['#access'] = FALSE;
$form['actions']['#access'] = FALSE;
$form['subject']['#access'] = FALSE;
$form['author']['name']['#access'] = FALSE;
$form['actions']['preview']['#access'] = FALSE;
$form['author']['mail']['#access'] = FALSE;
$form['field_email']['#access'] = FALSE;
$form['author']['homepage']['#access'] = FALSE; }?>
В column_left и column_right добавить '#tree' => FALSE
Спасибо за ваш ответ, но не помогает, в google уже все облазил, везде такие же примеры кода как и у меня, но стоит только применить alter приходят пустые поля в комменты.
Блин, не заметил. Конечно всё пусто будет, у вас #access = FALSE, значит доступа к этим полям не имеет никто.
Не помогает.
<?php
function klinika_radix_form_comment_node_otzivi_form_alter(&$form, &$form_state) {
$form['author']['name'] = array(
'#type' => 'textfield',
'#title' => t('First name'),
'#size' => 60,
'#maxlength' => 128,
'#required'=>TRUE,
);
$form['author']['mail'] = array(
'#type' => 'textfield',
'#title' => t('Email'),
'#required'=>TRUE,
);
$form['comment_body'] = array(
'#type' => 'textarea',
'#title' => t('Отзыв'),
);
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Отправить'),
);
$form['subject']['#access'] = FALSE;
$form['actions']['preview']['#access'] = FALSE;
$form['author']['homepage']['#access'] = FALSE;
}
?>
Кстати, comment-wrapper.tpl.php - это шаблон всех комментов. Шаблон отдельного комментария - comment.tpl.php.
Ясен пень, форма не отправится, когда выводишь её по кускам - там 100% разметка формы будет не валидная, т.е. либо много маленьких форм, либо без форм вообще.