web-dev-qa-db-ja.com

CCK入力フォームのテーマ

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;
?>

キャッシュをクリアしてノードを編集しましたが、上記の変更が表示されません。

1
Badri

あなたのステップは正しいです。ローカル環境でテストしましたが、機能します。

たとえば、コンテンツタイプ「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を使用してスタイルを設定することもできます。

2
enjoylife

コードが機能しない理由は、テンプレートファイルが$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 を見ると、そのような方法で使用されるテンプレートファイルの例は見つかりません。

1
kiamlaluno

フォーマットを上書きするための適切なテーマまたはテンプレート名を見つけるには、 テーマ開発者モジュール が非常に便利です。変更したいものをポイントしてクリックするだけで、drupalのどの部分がレンダリングを行っているか、そしてそれをオーバーライドしてニーズに合わせて調整するすべての可能性がわかります。

0
BetaRide