Как вывести сабмит в файле шаблона комментариев comment-wrapper.tpl.php?

Главные вкладки

Аватар пользователя seoyuzer seoyuzer 6 мая 2018 в 18:33

Здравствуйте!
Пытаюсь вывести поля формы комментариев в нужном мне порядке и обернуть эти поля в 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 обязательно для заполнения не смотря на то что я это поле заполняю. Я подозреваю что не правильно вывожу сабмит, видимо не проходит какая то проверка. Подскажите в чем может быть проблема? Спасибо!

Комментарии

Аватар пользователя seoyuzer seoyuzer 6 мая 2018 в 19:48

Спасибо за ваш ответ, $content['comment_form']['actions'] этот вариант я уже пробовал, тогда сабмит просто не реагирует на клик. По поводу альтера, как мне можно будет выставить поля в определенном порядке? На сколько я понимаю эта функция просто может обернуть поля в определенный тег с классом или id, но не меняет расположение полей. Допустим мне нужно чтобы поле emal было под полем имя.

Аватар пользователя bumble bumble 6 мая 2018 в 20:02

seoyuzer wrote:

сабмит просто не реагирует на клик

Т.к. Вы разделяете форму, Вам нужно обозначать к чему этот сабмит относится. Есть такой атрибут: form, для привязки элементов, находящихся за пределом, к форме по ее ID'шнику.

Т.е. Вам нужно присваивать форме ID, и его же добавлять, в атрибут form, всем элементам вне этой формы. (Из-за этого, кстати, у Вас и не детектилось поле описания, оно просто не отправлялось вместе с формой)

seoyuzer wrote:

мне можно будет выставить поля в определенном порядке?

Да. Порядок элементов в форме можно определить свойством weight.

Аватар пользователя seoyuzer seoyuzer 7 мая 2018 в 10:25

Спасибо за подсказку, сделал все через 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; }?>
Аватар пользователя seoyuzer seoyuzer 7 мая 2018 в 11:26

Спасибо за ваш ответ, но не помогает, в google уже все облазил, везде такие же примеры кода как и у меня, но стоит только применить alter приходят пустые поля в комменты.

Аватар пользователя seoyuzer seoyuzer 7 мая 2018 в 12:58

Не помогает.

<?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;
}
?>
Аватар пользователя bumble bumble 7 мая 2018 в 15:23

bumble wrote:

Вы разделяете форму, Вам нужно обозначать к чему этот сабмит относится. Есть такой атрибут: form, для привязки элементов, находящихся за пределом, к форме по ее ID'шнику.
Т.е. Вам нужно присваивать форме ID, и его же добавлять, в атрибут form, всем элементам вне этой формы. (Из-за этого, кстати, у Вас и не детектилось поле описания, оно просто не отправлялось вместе с формой)

Аватар пользователя gun_dose gun_dose 6 мая 2018 в 20:30

Ясен пень, форма не отправится, когда выводишь её по кускам - там 100% разметка формы будет не валидная, т.е. либо много маленьких форм, либо без форм вообще.