0

drupal コメント フォームを変更して、フォームのすぐ上に領域を表示し、その領域にブロックを追加できるようにしようとしています (いくつかのプロモーション バナーなど)。

私は template.php でこれを行っています。作業中の themename_comment_form 関数があり、必要な$form['intro']['#value']値に設定できます。また、新しいリージョンを作成する方法も知っています。

私が苦労しているのは、その領域の値を取得し (たとえば$above_comment_form)、それを themename_comment_form (のようなもの$form['intro']['#value'] = $above_comment_form;)内で使用できるようにすることです$vars['above_comment_form']=$above_comment_form

4

2 に答える 2

2

.info領域を作成するには、モジュールのファイルに追加する必要があります。リージョンが定義されていない場合、デフォルトで 5 つが使用可能になります。

  • コンテンツ
  • ヘッダ
  • フッター

リージョンを追加/削除したい場合は、テーマに必要なすべてのリージョンを記述する必要があります。.infoしたがって、カスタム領域を含めるには、ファイルにこれを含める必要があります。

regions[header] = "Header"
regions[left] = "Left sidebar"
regions[content] = "Content"
regions[right] = "Right sidebar"
regions[footer] = "Footer"
regions[above_comment_form] = "Above the comment form"

現在、リージョンはデフォルトで でのみ使用できpage.tpl.phpます。を使用して、ユーザーが使用できるリージョン内のブロックを取得できますtheme_blocks。したがって、preprocess_node関数に次を追加する必要があります。

$vars['above_comment_form'] = theme('blocks', 'above_comment_form');

次に、node.tpl.php でこれを行うことができます。

<div id="above_comment_form">
  <?php print $above_comment_form; ?>
</div>

それはあなたの仕事を達成するはずです。

于 2010-09-27T08:27:17.943 に答える
1

領域のレンダリングはコール スタックの非常に遅い段階で行われるため、ほとんどの場合、領域をテーマ関数や form_alter などに含めることはできません。

ただし、それらの個々のブロックをレンダリングすることはできるので、次のようなものを使用して特定のブロックを追加しようとしている場合:

$block = module_invoke('block', 'block', 'view', 26);
print $block['content'];

テーマ関数とテンプレートで機能します。私は似たようなことを試み、領域をレンダリングする関数を探すためにページのレンダリングをかなり深く掘り下げましたが、スタックの早い段階で領域をレンダリングしようとすることは不可能であるか、価値がありませんでした。

于 2010-09-29T21:01:46.387 に答える