Drupal 7コアに付属する基本的な検索ブロックフォームを変更しようとしています。カスタムテーマがあり、テンプレートフォルダー内にsearch-block-form.tpl.phpをコピーし、そのように修正しました
<form action="/fi" method="post" accept-charset="UTF-8" class="ng-pristine ng-valid form-inline" novalidate role="form">
<div class="form-group">
<div class="input-group">
<input
title="<?php print t('Type in your search terms'); ?>"
type="text"
name="search_block_form"
value=""
maxlength="128"
class="form-text" />
</div>
<?php print $search['hidden']; ?>
</div>
<button
type="submit"
name="op"
class="btn btn-default">
<span class="glyphicon glyphicon-search"></span>
</button>
しかし、レンダリングしたマークアップをページで見ると、まったく異なります。
<form action="/fi" method="post" id="search-block-form" accept-charset="UTF-8" class="ng-pristine ng-valid">
<div>
<div class="form-group">
<div class="input-group">
<input title="Type in your search terms" type="text" name="search_block_form" value="" maxlength="128" class="form-text">
</div>
<input type="hidden" name="form_build_id" value="">
<input type="hidden" name="form_id" value="search_block_form">
</div>
<button type="submit" name="op" class="btn btn-default">
<span class="glyphicon glyphicon-search"></span>
</button>
</div>
</form>
なぜフォーム内に余分なdivがあり、フォームインラインクラスはどこにあり、誰がそのIDをフォームに配置したのですか?書いたとおりにマークアップがレンダリングされないのはなぜですか?また、xxx_preprocess_search_block_formとxxx_form_alterをオーバーライドして、すべての不要な前処理を削除しようとしましたが、何も機能しないようです。
そして、はい、私は何度もテーマのキャッシュをクリアしようとしました。
これは、Drupalについて私を狂気にさせています。最も単純なテンプレートタスクでさえ達成しようとしているときに発生し続けるこのすべての「魔法の」もの。誰かが何が起こっているのか説明してもらえますか?ありがとう!
まず最初に、何も「魔法」ではありません。drupalを初めて使用する場合は、 フォームAPI を調べたり無視したりしていません。
hook_form_alter または hook_form_FORM_ID_alter 関数を使用してフォームAPIにフックすることにより、何をしようとしているのかがわかります。フォームの「魔法の」インライン要素は、私が話したフォームAPIによって処理されています。セキュリティ上の問題であるだけでなく、drupalがフォームを処理する方法ではないため、テンプレート要素にフォーム要素とボタンを入力しようとしています。
カスタムモジュールを作成 し、そこにhook_formを追加し、私が話したフォームAPIを使用して、実行しようとしていることを処理する必要があります。