3

Drupalは、モジュール内のフォームのテーマ関数を呼び出しません。

.moduleファイルにhook_themeを次のように追加しました:

function agil_theme() {
    return array(
        'agil_list_form' => array(
            'render element' => 'form',
        ),
    );
}

どこ :

  • agilは私のモジュールの名前です(私のテーマではありません)
  • agil_list_formは、フォーム宣言の名前です(デフォルトのテーマでのchichレンダリング)

次のように、関数を呼び出して独自のマークアップを作成したいと思います。

function theme_agil_list_form($form) {
  $output  = "<table><th><td></td><td>".t('Title')."</td><td>".t('Link')."</td></th>";
    $output .= "<tr><td>";
  $output .= drupal_render($form['name']);
  ...

しかし、Drupalがこの関数を呼び出すことはありません...キャッシュをクリアしましたが、何もしませんでした。

どこで何かが恋しいですか?

Drupal 7の新しいテーマ宣言についてもこれを読みました:http: //drupal.org/update/modules/6/7#hook_theme_render_changes

4

1 に答える 1

5

Drupal 7 のすべてのテーマ関数は、単一の配列引数 (通常は慣例に従って命名されます) を取り、$varsその$variables配列には、宣言した変数/レンダリング要素が含まれます。テーマ関数自体は次のようになります。

function theme_agil_list_form($vars) {
  $form = $vars['form'];
  // Now manipulate $form
}

また、フォーム関数でこれを行うことにより、フォームがこのテーマを使用することを Drupal に伝える必要があります。

$form['#theme'] = 'agil_list_form';
于 2012-04-21T16:12:48.007 に答える