您在這裡

theme user login block form

hom's 的頭像
hom 在 2008-07-31 (四) 16:00 發表

之前在 怎樣styling user login block ?討論內 回應的內容上有一些錯誤
回應的內容已經沒辦法編輯
所以修改後另外PO一篇

在版型資料夾下的 template.php 內加上


function theme_user_login_block($form){
//自訂登入畫面 block
return _phptemplate_callback('login_block_form', array('form' => $form));
}

然後在版型資料夾下增加一個 login_block_form.tpl.php 的檔案作為樣板檔
直接在樣板檔裡排成我想要的樣子

帳號

<?php print drupal_render($form['name']) ?>

密碼

<?php print drupal_render($form['pass']) ?>

<?php print drupal_render($form['submit']) ?>
<?php print drupal_render($form['form_id']) ?>

drupal 的表單必須把 $form['form_id'] & $form['form_token'] 必須 print 出來 表單才有作用
不過 user_login_block 似乎是例外 表單結構內原本就沒有 $form['form_token']
所以這邊只 render $form['form_id']

另外 搭配 imagebutton 還可以把原本的submit按鈕改成圖片


<?php
$form['submit']['#type'] = 'imagebutton';
$form['submit']['#image'] = 'xxx/xxx.jpg';
print drupal_render($form['submit']);
?>

註冊新帳號 & 忘記密碼的連結 也都是定義在$form裡面
在樣板檔裡 print_r($form) 看一下就知道了

然後再加入css (這邊只是簡單示意一下 詳細的 css 請自己再作設定)

要直接加在樣板檔的檔案內
或版型的 style.css 檔案內都可以
如果是只有一個樣板檔用到的 style
個人是喜歡直接放在樣板檔裡

在樣板檔裡就像一般的網頁製作一樣
隨你怎麼排列
只要知道 element 的名字
想在哪 render 都可以 也不用照 $form 裡的順序
可以改出單用 css 或 hook_form_alter 沒辦法達成的排版

雖然在 $form['name']['title'] 可以把標題改成空字串 而不顯示標題
但是不建議這樣做
因為表單的錯誤訊息會沒有欄位的名稱
例如 請填寫密碼欄位 的錯誤訊息會變成 請填寫 欄位
如果表單的欄位有5個欄位沒填 就會變成

請填寫 欄位
請填寫 欄位
請填寫 欄位
請填寫 欄位
請填寫 欄位

根本沒辦法辨識是哪個欄位未輸入
所以 #title 還是留著比較好
不想顯示標題的時候 建議還是用 css 把 label 隱藏掉

<?php global $user; ?>
<?php if ($user->uid) : ?>
Logged in as: <?php print l($user->name,'user/'.$user->uid); ?> |
<?php print l("logout","logout"); ?>
<?php else : ?>

Username:*

Password:*

<?php endif; ?>
用这个试试,呵呵,这个是drupal5版本的,刚找到,感觉挺好的。

想詢問建立template.php和login_block_form.tpl.php
那怎測試預覽效果呢?

像function theme_user_login_block($form)中的theme指的是如果我的theme叫rootcandy的話
就改為function rootcandy_user_login_block($form)?

function theme_user_login_block($form){
//自訂登入畫面 block
return _phptemplate_callback('login_block_form', array('form' => $form));
}

人人把心中的愛發揮出來,就能凝聚善的福業,形成善的循環。 (靜思語錄)