0

durpal 検索フォームの hook_form_alter を実装し、そこにいくつかの新しい要素を追加するこのコードがあります。上記のフォームの template.php にテーマの上書きコードも追加しました。これに加えて、フォーム要素もそこに渡します。すべてが正常に動作します - 新しい要素を追加し、テーマが使用されますが、ここに問題があります。フォームの各要素を drupal_render でレンダリングしようとすると、何も表示されません。$form 配列の内容を確認したところ、必要なすべてのフォーム データが含まれています。これは私のコードの例外です -

mymod.module

function mymod_form_alter(&$form, $form_state, $form_id) {
    switch ($form_id) {
        case 'search_theme_form':           
            $form['prop_type'] = array(
               '#type' => 'select',
               '#default_value' => 'Selection A',
               '#options' => array("Selection A","Selection B"),
               '#attributes' => array('class'=>'Bold'),     
        );
        break;
   }
}

template.php -

 function mytheme_theme() {
    return array(
        'search_theme_form' => array(
            'arguments' => array('form' => NULL),       
            'template' => 'search_myblock_form',        
        ),

    );

}

また、奇妙な問題が 1 つあります。devel の dsm は、$form の内容を表示することさえできませんでした。print_r を使用して最初に文字列値を取得し、それを dsm に渡して表示する必要がありました。価値があるのは、もう 1 つのことです。テーマ テンプレート内に、すべてのフォーム要素がレンダリングされたこの変数 ($search_form) があります。個々の要素を別の方法でテーマにしたいので、使用できません。個々の要素を自分でレンダリングするのが好きです。

4

1 に答える 1

0

hook_themeは、template.php ではなく、モジュール内にある必要があります。

しかし、form_alterなどはまったく必要ないようです。Template.php は、これらのテーマ関数をオーバーライドするためにあります。

function MYTHEMENAME_search_theme_form($form) {
  return "<h1>ceci nes't pas un form</h1>";
}

次に、テーマ レジストリを更新すると、フォームの場所に h1 行が表示されるはずです。

于 2010-10-25T09:42:43.210 に答える