Добавить комментарии в пользовательский node модуль
В моем пользовательском модуле я хотел бы добавить функциональность комментариев. Я пробовал пару вещей, но пока не тренировался.
// render comments form
$output .= theme('my_module_front_page');
$comment = new stdClass;
$comment->nid = $node_good_practice->nid;
$output .= render(drupal_get_form('comment_form', $comment));
return $output;
Вышеприведенный код помещает форму комментариев на мою страницу node.
Но когда я заполняю форму комментария и отправлю, он перенаправляет меня на эту страницу: comment/reply/node id
, а затем я должен заполнить свой комментарий снова и комментарий не сохраняется.
Я бы хотел отправить и остаться на одной странице вместо перенаправления. И комментарий должен быть сохранен после отправки.
В настоящее время форма комментария отображается на моей странице node (шаблон настраиваемого модуля). Я ввожу комментарий и нажимаю "Сохранить".
Я отправлен в /comment/reply/<node_id>
, но все поля комментариев пустые. Комментарий не сохраняется.
Мне бы хотелось:
- Наличие формы комментария на странице node
- Введите комментарий
- Нажмите "Сохранить"
- Drupal сохраняет комментарий и перенаправляет меня на страницу node/, которую я просматривал.
Вещи, которые я пробовал
-
Добавление перенаправления
$form['#redirect'] = "/success-stories/".$node_good_practice->good_practice_name."/".$node_good_practice->nid;
Это ничего не изменило.
-
Изменение действия
$form['#action'] = "/success-stories/".$node_good_practice->good_practice_name."/".$node_good_practice->nid;
Он перенаправляет меня на node/node_id/#comment-17
-
Используйте drupal_build_form()
$info->nid = $node_good_practice->nid;
$comment['build_info']['args'][0] = $info;
$comment['redirect'] = "http://www.google.nl";
$output .= render(drupal_build_form('comment_form', $comment));
Форма отображается, но она не перенаправляется; он отправляется на comment/reply/node_id
.
Ответы
Ответ 1
По какой-то причине проблема была вызвана drupal_build_form
и drupal_get_form
после отправки комментария. Если $_POST был заполнен drupal_build_form, а перенаправления функций drupal_get_form выполнялись до /node/node_id/#comment-17
или /comment/reply/<node_id>
Поэтому я отключил СЕЗОНУ перед загрузкой формы, и проблема была исправлена.
Итак, решение от Майка работает только тогда, когда вы отменили СЕССИЮ. Но он был полезен.
Итак, теперь у меня есть:
if(isset($_POST['form_id'])) {
$comment = new stdClass();
$comment->nid = $good_practice_id; // Node Id the comment will attached to
$comment->name = $user->name;
$comment->status = 1;
$comment->language = "und";
$comment->subject = $_POST['subject'];
$comment->comment_body[$comment->language][0]['value'] = $_POST['comment_body'][$node_good_practice->language][0]['value'];
$comment->comment_body[$comment->language][0]['format'] = 'filtered_html';
comment_submit($comment);
comment_save($comment);
unset($_POST);
}
$comment = new stdClass;
$comment->nid = $node_good_practice->nid;
$form = drupal_get_form('comment_form', $node_good_practice);
$form['#action'] = url('success-stories/'.$node_good_practice->good_practice_name.'/'. $comment->nid);
$output .= theme('good_practices_front_detail_page', array('oGoodPractice' => $oGoodPractice, 'aGoodPractices' => $aGoodPractices, 'aComments' => $aComments, 'oSectors' => $oSectors, 'oCountries' => $oCountries, 'links' => $aLinks));
$output .= render($form);
$output .= theme('pager', array('tags'=>array()));
return $output;
Ответ 2
Так как вы используете настраиваемый модуль, вы можете изменить comment_form с помощью form_alter для ваших конкретных случаев. Вы можете установить форму только для использования функции отправки модулей. Затем в вашей пользовательской функции отправки вы отправляете комментарий в модуль комментариев для сохранения (вызывая функцию comment_form_submit), а затем выполните перенаправление вернитесь к node себе.
Что-то вроде этого:
<?php
function mymodule_form_alter(&$form,&$form_state,$form_id){
if ($form_id == 'comment_form' && isset($form['#node']) && ($form['#node']->type == 'mynodetype')){
$form['#submit'] = array('mymodule_comment_form_submit');
}
}
function mymodule_comment_form_submit($form,&$form_state){
module_load_include('module','comment');
comment_form_submit($form,$form_state);
$url = drupal_get_path_alias('node/'.$form['#node']->nid);
header('Location: '.$url, TRUE);
drupal_exit($url);
}
В вашем файле шаблона по-прежнему создайте форму комментария так, как вы:
$info->nid = $node_good_practice->nid;
$comment['build_info']['args'][0] = $info;
$output .= render(drupal_build_form('comment_form', $comment));
Это решение может показаться немного взломанным, но оно работает.
Ответ 3
Думаю, это был бы ответ?
$comment->nid = $row->nid;
$form = drupal_get_form('comment_form', $comment);
$form['#redirect'] = 'CHANGE_VIEWSPAGE_HERE?page=' . (int)$_GET['page'];
print render($form);
не могу попробовать, извините. Я нашел его на https://drupal.stackexchange.com/info/21692/d7-comment-form-doesnt-submit