Formのinputのデザインをノードのコンテンツタイプ毎に変えたい。

Events happening in the community are now at Drupal community events on www.drupal.org.
Anonymous's picture

Drupalでフォームのデザインを弄る際にtpl.php や form alter でprefix など指定してデザインを変えていたのですが、
どうしてもinput 周りのタグ構造を変える必要があり試行錯誤していました。

フォームのinputのタグ構造を変えることには成功したのですが、
如何せんテーマ上の全てのフォームに反映されてしまい、困っています。

コンテンツタイプ毎でデザインを分けれる良い方法などありますでしょうか?

function mytheme_theme_registry_alter(&$theme_registry) {
  if (!empty($theme_registry['form_element'])) {
    $theme_registry['form_element']['function'] = 'mytheme_node_form_element';
  }

}

function mytheme_node_form_element($element, $value) {
  $output .= '<table class="form-item"';
  if (!empty($element['#id'])) {
    $output .= ' id="'. $element['#id'] .'-wrapper"';
  }
  $output .= ">\n";
  $output .= "<tbody>\n";
.....

Comments

kyotaro's picture

こちらは解決されたのでしょうか?

とてもハードルが高いです・・・

kykさん、ありがとうございます。 無事解決いたしました!

jun784's picture

kykさん、ありがとうございます。

無事解決いたしました!

以下参考となった nick さんのブログです。
http://www.nickveenhof.be/blog/theming-specific-form-elements-drupal-6-h...

nick さんのブログではフォーム毎のテーマ方法が書かれていますが、
自分の場合はあくまでinputのテーマでしたので、

function mytheme_form_element($element, $value) {
  switch ($element['#id']) {
    case 'input_id':
      return mytheme_form_element_specific_input($element, $value);
    default:
      return mytheme_form_element_default($element, $value);
  } // switch
}

function mytheme_form_element_specific_input($element, $value){
  $output .= '<table class="form-item-wrap"';
  if (!empty($element['#id'])) {
    $output .= ' id="'. $element['#id'] .'-wrapper"';
  }
  $output .= ">\n";
...

で組み込みました。

また、フォーム毎にレイアウトを変える場合は nick さんが書いてるように
独自モジュールでform_elementをhookしてフォームIDを付加するようにすればできます。

nick さんも Hard way とタイトルに書いていますね(笑

時間があれば、ブログに備忘録としてまとめたいです・・・。

kyotaro's picture

ありがとうございます、勉強になります

解決して何よりです :)