在我的自定义模块中,我想添加注释功能。我尝试过几件事,但到目前为止还没有锻炼。
// 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;
上面的代码将注释表单放到我的节点页面。
但是当我填写评论表单并提交时,它会将我重定向到此页面:comment/reply/node id
然后我必须重新填写我的评论并且评论未被保存。
我想提交并停留在同一页面而不是重定向。提交后必须保存评论。
现在,评论表单出现在我的节点页面上(自定义模块模板)。我输入评论并点击"保存。"
我被发送到/comment/reply/<node_id>
,但所有评论字段都是空的。评论也没有保存。
我想要发生的是:
添加重定向
$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
。
答案 0 :(得分:3)
由于您使用的是自定义模块,因此您可以使用form_alter挂钩更改comment_form以用于特定情况。您可以将表单设置为仅使用模块提交功能。然后在自定义提交功能中,将注释提交给注释模块进行保存(调用comment_form_submit函数),然后自行重定向回节点。
有些事情如下:
<?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));
这个解决方案可能看起来有点笨拙,但它确实有效。
答案 1 :(得分:0)
我想这会是答案吗?
$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/questions/21692/d7-comment-form-doesnt-submit
找到了它答案 2 :(得分:0)
由于某些原因,问题是在提交评论后由drupal_build_form
和drupal_get_form
引起的。如果$ _POST被填充drupal_build_form并且drupal_get_form函数重定向符合/node/node_id/#comment-17
或/comment/reply/<node_id>
所以我在加载表单之前取消了SESSION并解决了问题。
因此,当您取消设置SESSION时,Mike的解决方案才有效。但他一直很有帮助。
所以现在我有:
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;