top


総投稿数 本 
no_

スポンサーサイト

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

Drupal imageボタン:Drupal ユーザーログインフォームを、ボタンを画像にすることも含めて、自由に操る方法 ・・・ 【今日のDrupal】

 2010-05-17
 更新久々。(なんと 1週間!)

 毎日来てくれていただいている方、
 申し訳ございません。ありがとうございます。
 こんなに空けたことは無かったのですが・・・


 ずっと複数のサイト構築に没頭しておりました。
 今月かなり少ないので、これから追い上げます。


 さて、Drupal
 前に あるサイトで
 ・ユーザーログインフォームをカスタマイズしたのですが・・・
  (参考)Drupal ログインフォーム:ログインフォームをデフォルトのものから、(よくある)1行表示の形式に変更してみる ・・・ 【今日のDrupal】


 今度はもう少し細かくカスタマイズする必要があり、
 格闘・・・なんと 3日間。
 ※まぁ、その間に例によって次々と現れる新しい
  情報や知識に振り回されていただけですが・・・
 まとめておきます。


 ■Drupal ユーザーログインフォーム
  ボタンを画像にすることも含めて、自由に操る方法


  追記に  ▼


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


more

************************************************
◎ Drupal ユーザーログインフォームを、
 ボタンを画像にすることも含めて、自由に操る方法
                :今日のDrupal
************************************************


 ※結局、オリジナルの関数を
  template.php に用意して、それを該当箇所から
  呼ぶことになりました。


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

Theming the Drupal 6 User Login Form
Theming the Drupal 6 User Login Form 
 ・・・・というか
 ほとんどそのまま ですが。

 ありがとうございます。


 多少、実装の際に
 変えているとこともあるので。

 

 【オリジナル関数】tempalate.php に、
function *****_login_box() {
global $user;
if (!$user->uid) {
$form_id = 'user_login';
$form = array();
}else{

}
}
 こんな感じで関数を用意し、
 ■現在「ログインしている」かどうかで
  切り分ける。

 

 ■していない場合
  (uid が得られない場合)、
		$form['name'] = array('#type' => 'textfield',
'#title' => t('メールアドレス'),
'#maxlength' => 60,
'#size' => 15,
'#required' => TRUE,
'#attributes' => array(
'title' => t('メールアドレス'),
'tabindex' => '1',
),
);
$form['pass'] = array('#type' => 'password',
'#title' => t('パスワード'),
'#maxlength' => 20,
'#size' => 15,
'#required' => TRUE,
'#attributes' => array(
'title' => t('パスワード'),
'tabindex' => '2',
),
);
$form['submit'] = array('#type' => 'image_button',
'#src' => '*****login.gif',
'#value' => t('ログイン'),
'#weight' => 2,
'#attributes' => array(
'title' => t('ログイン'),
'tabindex' => '3',
),
);
  などのようにカスタマイズ。
  お気づきのように、
  □ボタンはすでに、画像ボタンにしてます。

   !そうなのですよ。この
    '#type' => 'image_button'
    が、なかなか分からなかった・・・
    image にしてみたり・・・
    button にしてみたり。
   !また、加えたいタグは、配列としてまとめ
    '#attributes' => array() で与えるのですね。


  そして、前は、この後、
  drupal_get_form('user_login_block', $form, 'user_login');
  などにこの $formを投げてみたのですが、
  実はうまくいっていなかった。


  これは、Drupal 5 までの書き方で、
  Drupal 6 では、drupal_get_form('(form_id)'); で、
  他の引数はその中で引き取るようなのですが・・・

 

  結局この後の流れをおおまかに理解して
  この後、次のように続けました。
		$form['#validate'] = user_login_default_validators();
$form['#build_id'] = sprintf('form-%s', md5(uniqid(mt_rand(), TRUE)));

$form_state = array();
drupal_prepare_form($form_id, $form, $form_state);
drupal_process_form($form_id, $form, $form_state);

  □まず、バリデーション部分を基本のAPI関数で
   設定して
   ・user_login_default_validators

 

  □formでhidden利用される、build_id
   を生成。
   ・/drupal/includes/form.inc で、
      $form_build_id = 'form-'. md5(uniqid(mt_rand(), true));
$form['#build_id'] = $form_build_id;
 という記述がありますね。

 

  □$form_state = array(); を用意して
   2つの API関数を呼ぶ。
   ・drupal_prepare_form
   ・drupal_process_form
   ※おおまかに理解試みましたが、
    完全には・・・
    しかし、このプロセスは通る必要があるのでしょう。

 

  ところが、
  ・自動的に入ってしまう、label周りの情報
   をハンドリングしたく、前述の指定で、
$form['name']['#description'] = '';
  などとしても
   この2つの関数を通ると、デフォルトの設定になり
   それらを触れません。

 

  ・・・そこで、この後に、
		$form['name']['#description'] = '';
$form['pass']['#description'] = '';
 と再度単独で指定。
  この後、今回お教えいただいた通りに、
		$out = new stdClass;
$out->form_start =
sprintf("<form method='post' accept-charset='UTF-8' action='%s'>",
url('user/login'));
$out->form_end = "</form>";
$out->name = drupal_render($form['name']);
$out->pass = drupal_render($form['pass']);
$out->submit =
drupal_render($form['form_id']) .
drupal_render($form['form_build_id']) .
drupal_render($form['submit']);
 と続けます。
  教えてくれたブログでは、このように
  クラスのオブジェクトとして生成しておき、
  この後、利用する側で、それを取得・書き込むのですね。

 

  ここまではほぼ同じですが、私はこの後の
  文字列として取得する部分もここに記載。
  ※ログインしていない場合に
   単純な文字列で得たかったので、それと
   合わせたわけです。
		$output = $out->form_start;
$output.= $out->name;
$output.= $out->pass;
$output.= $out->submit;
$output.= $out->form_end;
 細かく部品で指定。
 ・・・ということは。
 そう 細かくカスタマイズできる ということで
 ここに載せられるのはシンプルなものですが、
 実際はここに、位置的なレイアウト指定なども
 組み込んでいるのです。

 そして、


 

 ■ログインしている場合
  (uid が得られた場合)、
		$output = '<p><b>' . $user->name. '</b> さん、<br />'.
'こんにちは。<br />';
$output .= ' ' . l(t('ログアウト'), 'logout', array('title' => t('ログアウト'))) . '<br />';
$output .= ' ' . l(t('登録情報の編集'), 'user/' . $user->uid . '/edit/profile', array('title' => t('登録情報の編集')));
$output .= '</p>';
  などとして、

 どちらにしても最後に、return $output;
 で返す・・・と。


 後は、cssで自由に追加指定して
 生成されたclassのcss設定をオーバーライドすれば、
 もうほんと、ユーザーログインフォーム
 自由自在。めでたしめでたし・・・ん?ほんと?

commentsコメント
comment_post












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

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

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

 

リンク集

 

最近の記事

 

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

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

 

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