top


総投稿数 本 
no_

スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)
no_1343

Drupal ユーザーフォーム:ユーザーフォーム周りのカスタマイズ。一挙解決。なるほどねぇ、良きチュートリアルを得て一歩前進 ・・・ 【今日のDrupal】

 2010-05-21
 また、仕事と作業に没頭する日々。続いております。
 それでもこの数日はまった
 ・Drupal でのサイト構築で学んだ
  ■Drupal 各種ユーザーフォーム を
   まとめてカスタマイズする方法
   記録しておかねば・・・

  追記に  ▼


FC2ブログランキング にほんブログ村 IT技術ブログ Webサイト構築へ ブログ王ランキング 人気ブログランキング 人気ホームページランキングへ


more

************************************************
◎  Drupal 各種ユーザーフォームを、
 まとめてカスタマイズする 方法
                :今日のDrupal

************************************************


 参考にさせていただいたのは、


Theming the register form in Drupal 6
Theming the register form in Drupal 6 
 「11heavens」というブログ
 名前が、これまた格好いい
 サイトですが・・・

 いやぁ、感銘受けましたね。


 この
 ・丁寧で良心的チュートリアル
 ・画像やソースもふんだんに
 とても気持ちのいい情報公開で、
 大変ためになりました。

 さてさて・・・


 こちらのチュートリアルでは、


  ■(最初に)
   1:フォームの 専用テンプレートを定義し
     ▼
   2:それを利用するよう設定
     ▼
   3:フォームのオブジェクトを操作し
     テンプレートで使えるようにして
   4:テンプレートで自由に記載。

  ■(その後)
   5:テンプレート利用方式を終え
     ▼
   6:テーマ関数を利用して
     オーバーライドした関数で
     機能を再実現
   7:最初のテンプレート設定をはずす
  という方法を教えてくれます。

  私も最初はそのようにやってみました。


  しかし!
   カスタマイズしたいフォームはいくつもあり
   (またしても、面倒くさがり屋の私は)
   ・最初から複数のユーザーフォームを
    関数利用してカスタマイズする方法に置き換えてしまいました。


  一応上記の流れをおさらいしておきます。
  簡略に(基本のソースだけ)

  ■ソース参考


 

   1/2:フォームの 専用テンプレートを定義
<? 
function *****_theme($existing, $type, $theme, $path) {
return array(
'user_register' => array(
'arguments' => array('form' => NULL),
'template' => 'user-register',
),
);
}
?>
 ※これは「ユーザーレジスト(新規登録)
  の例ですね。
  ・template.php に記載
  ・***** はテーマ名前
  ・user-register.tpl.php というファイルを用意し
   user_register のときは、これを使うね、という設定。

 

   3:利用するよう設定
<? 
function *****_preprocess_user_register(&$vars) {
// 新しく fieldset を用意(追加)
$vars['form']['start_message'] = array(
'#type' => 'fieldset',
'#title' => t('start_message'),
'#weight' => 10,
);
// 特定のページ(node)に用意されてる
// あいさつ文を取得
$node = node_prepare(node_load(100)); // 例えば node/100
// 上記の fieldset に属するアイテムを用意
$vars['form']['start_message']['this_text'] = array(
'#prefix' => '<div class="content clear-block">',
'#value' => $node->body,
'#suffix' => '</div>',
);
// 追加した設定を 標準の drupal_render 通して
$vars['form_markup'] = drupal_render($vars['form']);
// 共通変数で使えるように準備
}
?>
 ※チュートリアルは「利用規約」でしたが
  そのままではさすがにはばかられるので、
  (おぉ、ひらがな行進)
  「あいさつ文」に変えてみました。
  ・$vars['*****'] にしておけば
   テンプレートで使えますね。
  ・prefix やら、suffix ニタリ、ですね。
  ・翻訳用意されてないと思うので、
    t('start_message') ではなく、'ご挨拶' でも
   いいですがね。

 

   4:テンプレートで自由に記載
    ※用意した、user-register.tpl.php で、
<? print $form_markup; ?>
 ※実際はこの配列変数を
  ここで分解することも考えられるけど・・・
  ※このチュートリアルの ひとつの肝は
   ・この「新しい項目」
    ・グループに内包された文章や
    ・チェックボックスの作り方
   なので、それはそれは勉強になりました。

 

   5:テンプレート利用は終え
    ※確認まではこれでいい、と。
<? 
function *****_theme($existing, $type, $theme, $path) {
return array(
'user_register' => array(
'arguments' => array('form' => NULL),
// 'template' => 'user-register',
),
);
}
?>
 ※template の設定のところ
  だけ(!)・・・ここ、注意。
  はずす。
  ※で、ここで設定ファイルがされてないので
   Drupal では、代わりにオーバーライドされた
   フォーム関数を探す・・・と(?)

 

   6:オーバーライドする関数を用意し
    ※確認まではこれでいい、と。
<? 
function *****_user_register($form) {
}
?>
 ※今までの $vars['form'] ではなく、
  引数の $form を使ったこの関数内で
    上記
    function *****_preprocess_user_register(&$vars)
    で行っていたことを記述。

    最後に、ここで、
    return drupal_render($form); で
    返してやる・・・と。


 ・最後に
  「(確認の際は)キャッシュクリア忘れないでね」・・・
  なんて、ほんと気の使っていただいていること。


 ・・・で、お前はどうしたか?
    というと、最初から、
    ・テンプレート方式ではなく、
     ユーザーフォーム関連
     まとめて オーバーライドで行くことに。


  少し、載せておきます。


  ■ソース実例


 

   1:ひとまとめに、テーマ関数で定義
<? 
function *****_theme($existing, $type, $theme, $path) {
return array(
'user_register' => array(
'arguments' => array('form' => NULL),
),
'user_pass' => array(
'arguments' => array('form' => NULL),
),
'user_login' => array(
'arguments' => array('form' => NULL),
),
'user-pass-reset' => array(
'arguments' => array('form' => NULL),
),
);
}
?>
 ※他にもあるでしょうが、とりあえず。

 

   2:(分解好きな私は)、template.php まで
     部品化しており、
     用途別のファイルで、それぞれこんな感じ・・・
<? 
function *****_user_register($form) {
//全体
$form['#prefix'] = "<div id='formarea_user-register'>";
$form['#suffix'] = "</div>";

//冒頭文章
$form['premessage'] = array(
'#type' => 'fieldset',
'#title' => '',
'#weight' => -100,
'#attributes' => array(
'id' => 'user-register_area_info',
),
);
$tempstr = "(自由な文章)";
$form['premessage']['premessage_text'] = array(
'#prefix' => '<div>',
'#value' => $tempstr,
'#suffix' => '</div>',
);

 ・・・(略) ・・・

//アカウント情報
$form['account']['#title'] = " ".$form['account']['#title']." ";
$form['account']['#weight'] = -47;
$form['account']['#attributes'] = array(
'id' => 'user-register_area_login',
'class' => 'clearfix padding_l20',
);

//name
$form['account']['name']['#title']="アカウント";
$form['account']['name']['#weight']=-46;
$form['account']['name']['#maxlength']=16;
$form['account']['name']['#required']=TRUE;
$form['account']['name']['#description']='<span id=ckmes_area1>※半角英数文字の 8文字~16文字。</span>';
$form['account']['name']['#prefix']='<div class="clearfix">';
$form['account']['name']['#attributes']=array(
'tabindex' => '3',
'title' => 'アカウント をお決めください',
);

 ・・・(略) ・・・


return drupal_render($form);
}
?>
 もっと細かいのですが、さすがに
 すべてはお見せできない。

 どんどん楽しくなって来ましたねぇ、Drupal
 今回このあたりで、得た、小さな「細ネタ
 明日にでも掲載しておきます。

commentsコメント
comment_post












管理者にだけ表示を許可する
commentトラックバック
トラックバックURL:
http://metaboy.blog23.fc2.com/tb.php/1343-71f8b6e6
ようこそ
Add to Google 創るmetaboy:RSSフィード
My Yahoo!に追加
最新記事のRSS | 問い合わせ

仕事検索、アルバイト検索、依頼仕事の検索ポータル - 仕事検索.COM - www.jobkensaku.com ツクルン

創るmetaboy - WEB創る、サイト創る、何創る - 創ったmetaboy

 

リンク集

 

最近の記事

 

ブロとも申請フォーム
Sponserd by

さくらのレンタルサーバ さくらのレンタルサーバ
大容量・高機能レンタルサーバー heteml 大容量・高機能レンタルサーバー heteml
XREA (ValueDomain)
お名前.com お名前.com
名づけてねっと名づけてねっと
ムームードメインムームードメイン

 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。