page.tplに検索ボックスを挿入するにはどうすればよいですか?


27

テーマに検索ボックス(検索ブロック)をプログラムで挿入するにはどうすればよいですか?

回答:


39

タグによると、D7ソリューションを探しています。Drupalの7 page.tpl.phpはもう$のsearch_box変数を持っていません。ただし、template.phpのプリプロセス関数に追加できます。

<?php
/*
 *  Preprocess page.tpl.php to inject the $search_box variable back into D7.
 */
function MYTHEME_preprocess_page(&$variables){
  $search_box = drupal_render(drupal_get_form('search_form'));
  $variables['search_box'] = $search_box;
}

次に、page.tpl.phpで変数を印刷するだけです。

<?php print $search_box; ?>

module_invokeを使用することもできますが、テンプレートファイルにphpロジックを含めるべきではありません。

<?php
  $block = module_invoke('search', 'block_view', 'search');
  print render($block); 
?>

ありがとう、3番目のコードブロックはどこに配置する必要がありますか(page.tpl.phpで直接、またはtemplate.phpで直接page.tplからアクセスしますか?)
Nick.h

1
3番目のブロックはpage.tpl.phpに配置する必要があります。速記として、「print render(module_invoke( 'search'、 'block_view'、 'search'));」も使用できます。
バラクラーク

2
「厳密な警告:変数のみが[theme-name] _preprocess_page()([theme-name] /template.phpのxx行)の参照によって渡される必要があります。」theme_preprocess_pageの警告は次のようになります。/ * * theme_preprocess_page()を実装します。* / function [theme-name] _preprocess_page(&$ variables){$ search_form = drupal_get_form( 'search_form'); $ search_box = drupal_render($ search_form); $ variables ['search_box'] = $ search_box; }
kbrinner

7

代わりに正しい方法で実行し、ブロックを使用してください。
page.tpl内の要素をハードコーディングすることは、「古き良き時代」以来まだ浮かんでいるものの1つです。

代わりにブロックシステムを使用してください。これにより、柔軟性がさらに向上します。Blockifyモジュールをチェックアウトすることもできます。

このモジュールは、いくつかのコアDrupal要素をブロックとして公開します。



1

ブロックシステムを使用して、検索フォームブロックをページに追加することもできます。

管理者>構造>ブロック:検索フォーム

たとえば、ナビゲーションメニューに配置するには、ブロックを領域に配置します

「ナビゲーション」

そして、CSSに合わせます。

たとえば、ナビゲーションメニューの右側に配置するには:

#navigation #block-search-form{
  position: absolute;
  right: 10px;
  top: 0;
}

これは機能しますが、問題はプログラムによる解決策を参照することでした。
timofey.com 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.