user-register-form.tpl.php内でフォームの呼び出し方がわかりません。

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

先日の質問で無事アカウント作成画面のデザインが変更できるようになったのですがフォームが表示されません。

<?php
print render($form['account']['name']);
?>

<?php
print render ($form['field_name']);
?>

現在は上記のようなソースです。
間違いなどあればご指摘いただけたらと思います。

Comments

hgoto's picture

手元で確認してみました。

私の環境では

<?php
print render($form['account']['name']);
?>

が無事に name フィールドを出力してくれました。。。

ちょっと原因がわかりませんので、以下にチェックすべきポイントをあげてみました。問題の切り分けのご参考になればと思います。

  • hook_theme() が正しく書けていることのチェック: user-register-form.tpl.php 内に <?php print 'hello'; ?> だけ書いた場合は「 hello 」と表示されますか?
  • user-register-form.tpl.php に変数が正しく渡されていることのチェック: user-register-form.tpl.php 内で <?php dpm(get_defuned_vars()); ?> を書いた場合に $form 変数がメッセージ欄のリストに含まれていますか?
  • レンダーアレイが正しく処理できることのチェック: user-register-form.tpl.php の中に <?php print render($form['account']); ?>とだけ書いて(問題の切り分けが難しくなるので他のコードはいったんすべて削除してください)、いくつかのフィールドが正しく表示されますか?

ちなみに user-register-form.tpl.php の中で <?php print render($form); ?> をすると $form['#theme'] の影響で user-register-form.tpl.php が再帰的に読み込まれて無限ループに入るのでお気をつけください。どうしても $form をそのまま render したい場合は、 render() ではなく drupal_render_children() をお使いになるとよいかと思います(その必要はないかと思いますが・・・)。

https://api.drupal.org/api/drupal/includes%21common.inc/function/drupal_...

前のスレッドで blauerberg さんが紹介されていた記事を私も読みましたが、ちょうどこのトピックに触れている記事になるようです。よろしければ一度目を通してみてください(英語ではありますが・・・)

https://www.drupal.org/docs/7/theming/overriding-themable-output/customi...

余談です。お求めの変更内容がどういうものなのか正確にはわかっていないので推測にはなりますが、おそらく、フォームのテーマを上書きする方向ではなく hook_form_FORM_ID_alter() を使う形でも目的が達成できるのでは・・・と思います。

・・・今後他の方の参考になるかと思いますので「先日の質問」のページのリンクを載せておきますね。

https://groups.drupal.org/node/513815

yamauchi's picture

回答ありがとうございます。
教えていただいた方法とは少し違う方法で解決致しましたので投稿させていただきます。

template.phpでのソースを下記のものに変更しました。

function portal_theme(&$existing, $type, $theme, $path){
$hooks = array();
// Make user-register.tpl.php available
$hooks['user_register_form'] = array (
'render element' => 'form',
'path' => drupal_get_path('theme','portal'),
'template' => 'user-register',
'preprocess functions' => array('portal_preprocess_user_register_form'),
);
return $hooks;
}

function portal_preprocess_user_register_form(&$vars) {
$args = func_get_args();
array_shift($args);
$form_state['build_info']['args'] = $args;
$vars['form'] = drupal_build_form('user_register_form', $form_state['build_info']['args']);
}

書き換えた後は

<?php
print render($form['field_name']);
?>

<?php
print render($form['account']);
?>

など呼び出せています。

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: