10

カスタム モジュールにコメント機能を追加したいと思います。私はいくつかのことを試しましたが、今のところ運動していません。

// 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>が、すべてのコメント フィールドが空です。コメントも保存されません。

私がしたいことは次のとおりです。

  • ノードページにコメントフォームを設置
  • コメントを入力してください
  • 「保存」をクリック
  • Drupal はコメントを保存し、表示していたノード/ページにリダイレクトします。

私が試したこと

  • リダイレクトの追加

    $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ます。

4

3 に答える 3

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));

このソリューションは少しハックに見えるかもしれませんが、うまくいきます。

于 2012-10-17T13:17:56.667 に答える
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で見つけました

于 2012-10-12T08:08:35.043 に答える
0

なんらかの理由で、問題はコメントの送信時drupal_build_formと送信後に発生しました。drupal_get_form$_POST が満たされている場合、drupal_build_form と drupal_get_form 関数のリダイレクトは/node/node_id/#comment-17/comment/reply/<node_id> フォームをロードする前に SESSION の設定を解除し、問題は修正されました。

したがって、Mike のソリューションは、SESSION の設定を解除した場合にのみ機能します。しかし、彼はとても役に立ちました。

だから今私は持っています:

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;
于 2012-10-18T12:20:06.227 に答える