2

「返信」ヘッダーのすぐ下に免責事項があるように、デフォルトのコメントフォームを変更するための、標準に適した優れた方法を探しています。この免責事項は、コメントを表示するときだけではなく、コメント フォーム自体の上に表示されることを望みます。

このスレッド ( Drupal: ウェブフォームの送信ボタンの上に免責事項のテキストを追加する) は、私が望むものに部分的に答えていますが、特にコメントフォームにソリューションを適用する方法がわかりません。

これは素人の質問かもしれませんが、あらゆる助けをいただければ幸いです。ありがとう。

編集: 提案どおり hook_form_alter を実装しようとしましたが、免責事項をフォーム内に表示することができました。1 つの問題: 免責事項の最初のドラフトは、コメントに返信するときにコメント フォームの上に閉じ込められているようです。キャッシュのクリア、テーマ レジストリのリセット (devel モジュールのおかげで、ページの読み込みごとに) はすべて効果がありません。

Reply to Comment:
[first version of disclaimer] // won't go away, ever
[comment form]
[current version of disclaimer] // this one is fine
[submit button]

ここで何か助けていただければ幸いです。

編集 (redux): template.php 中心のソリューションを実装しました。上記のような外的影響なしで問題なく動作しました。上記の問題の解決策についてはまだわかりません。みんな、ありがとう。

4

2 に答える 2

4

anschauung が投稿したものは機能しhook_form_alterますが、カスタム モジュールでの使用に比べて多くの余分な作業が必要です。あなたの場合、近い関連を使用すると、次のようになりますhook_form_FORM_ID_alter

function module_name_form_comment_form_alter(&$form, &$form_state) {
    $form['disclaimer'] = array(
      '#value' => t('Disclaimer text'),
      '#prefix' => '<div>',
      '#suffix' => '</div>',
      '#weight' => 0,  
    );
}
  • 上記の例では、module_name を作成するカスタム モジュールの名前に置き換える必要があります。
  • が配置を決定し、#weight下にあるほど上に配置されます。そのため、配置が正しくなるまで微調整します。
  • #prefixand#suffixは要素の前後に作成されるマークアップで、何でもかまいません。
  • #valueフォーム要素の値、実際の免責事項テキスト。
  • このフォーム要素には がない#typeため、デフォルトの を使用します。これはmarkup、単なるカスタム html であることを意味します。
于 2010-09-21T07:29:14.903 に答える
4

コメント フォームは Drupal フォームの中でもユニークな動物であり、デフォルトではテーマに対応していません。そのため、通常の方法では少しの追加の支援がなければ機能しません。

つまり、最初に template.php ファイルでフォームをテーマ対応として登録する必要があります。

/**
* Implementation of hook_theme().
*/
function mytheme_theme(){
  return array(
    'comment_form' => array(
      'arguments' => array('form' => NULL),
    ),
  );
}

次に、テーマ関数を追加して、いくつかの追加要素をフォームにドロップできます。

/**
* Theme the output of the comment_form.
*
* @param $form
*   The form that  is to be themed.
*/
function mytheme_comment_form($form) {
  $form['new_element'] = array(
    '#type' => 'markup',
    '#title' => t('Disclaimer'),
    '#value' => '<p>You have been disclaimed, sir!</p>',
    '#weight' => -20 // Lighter elements float to the top of the form
  );
  return drupal_render($form);
}

Forms API ( http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html ) の仕組みを理解すると、これらの編集を行う際に役立ちます。ただし、HTML を追加するだけであれば、かなり簡単なはずです。

もちろん、テーマ機能を追加した後は、必ずテーマ レジストリを再構築してください。

于 2010-09-21T01:35:06.453 に答える