CCK入力フォームにテーマを設定するにはどうすればよいですか? このページ で与えられたアプローチを試しましたが、キャッシュをクリアした後でも機能しません。手順は次のとおりです。
コンテンツタイプが「account_registration」で、テーマが「bluemarine」であるとします。
Template.phpを編集し、次のコードを追加しました。
function bluemarine_theme($existing, $type, $theme, $path) {
return array(
'account_registration_node_form' => array(
'arguments' => array('form' => NULL),
'template' => 'node-account_registration-edit'
)
);
}
Node-account_registration-edit.tpl.phpを作成しました:
<?php
$form['buttons']['submit']['#value'] = 'Done';
$form['buttons']['preview']['#access']= FALSE;
?>
キャッシュをクリアしてノードを編集しましたが、上記の変更が表示されません。
あなたのステップは正しいです。ローカル環境でテストしましたが、機能します。
たとえば、コンテンツタイプ「companynews」の場合、関数をtemplate.phpに追加します。
function garland_theme($existing, $type, $theme, $path) {
return array(
'companynews_node_form' => array(
'arguments' => array('form' => NULL),
'template' => 'node-companynews-edit'
)
);
}
Node-companynews-edit.tpl.phpファイルを作成し、テストコードを配置します。
<?php
echo 'it works!";
?>
キャッシュをクリアし、アクセスします http://example.com/node/add/companynews :「動作します」と表示されます。
PS:hook_form_alter() を使用してフォームを変更し、CSSを使用してスタイルを設定することもできます。
コードが機能しない理由は、テンプレートファイルが$form
配列を変更するのではなく、フォームフィールドをレンダリングすることになっているためです。
フォームにテンプレートファイルを使用することはお勧めしません。代わりに、テーマ関数を使用します。
フォームのレンダリングに使用されるテーマ関数の例として、 theme_node_filter_form() のコードを見てください。これは、 http://example.com/admin/)に表示されるノードフィルターフィールドをレンダリングします。コンテンツ/ノード/概要 。
function theme_node_filter_form($form) {
$output = '';
$output .= '<div id="node-admin-filter">';
$output .= drupal_render($form['filters']);
$output .= '</div>';
$output .= drupal_render($form);
return $output;
}
Drupalコアモジュールはフォームのレンダリングにテンプレートファイルを使用しません。また、 api.drupal.org を見ると、そのような方法で使用されるテンプレートファイルの例は見つかりません。
フォーマットを上書きするための適切なテーマまたはテンプレート名を見つけるには、 テーマ開発者モジュール が非常に便利です。変更したいものをポイントしてクリックするだけで、drupalのどの部分がレンダリングを行っているか、そしてそれをオーバーライドしてニーズに合わせて調整するすべての可能性がわかります。