Posted by yamauchi on September 18, 2016 at 6:26am
先日の質問で無事アカウント作成画面のデザインが変更できるようになったのですがフォームが表示されません。
<?php
print render($form['account']['name']);
?><?php
print render ($form['field_name']);
?>現在は上記のようなソースです。
間違いなどあればご指摘いただけたらと思います。
先日の質問で無事アカウント作成画面のデザインが変更できるようになったのですがフォームが表示されません。
<?php
print render($form['account']['name']);
?><?php
print render ($form['field_name']);
?>現在は上記のようなソースです。
間違いなどあればご指摘いただけたらと思います。
Comments
手元で確認してみました。 私の環境では <?phpprin
手元で確認してみました。
私の環境では
<?phpprint render($form['account']['name']);
?>
が無事に name フィールドを出力してくれました。。。
ちょっと原因がわかりませんので、以下にチェックすべきポイントをあげてみました。問題の切り分けのご参考になればと思います。
hook_theme()が正しく書けていることのチェック: user-register-form.tpl.php 内に<?php print 'hello'; ?>だけ書いた場合は「 hello 」と表示されますか?<?php dpm(get_defuned_vars()); ?>を書いた場合に$form変数がメッセージ欄のリストに含まれていますか?<?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
回答ありがとうございます。 教えていただいた方法とは少し違
回答ありがとうございます。
教えていただいた方法とは少し違う方法で解決致しましたので投稿させていただきます。
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']);
}
書き換えた後は
<?phpprint render($form['field_name']);
?>
<?phpprint render($form['account']);
?>
など呼び出せています。