您在這裡

[心得] 使用者自訂快跳選單

hanamizuki's 的頭像
hanamizuki 在 2009-08-26 (三) 11:43 發表

嗨!最近除了睡覺之外,都是在跟Drupal奮戰。最近研究的是使用者的部份,如何優化Drupal的使用者體驗是滿有趣的主題呢!

這個小小的教學主要是示範「整合兩個模組」,希望做到的事情是:

希望每個會員登入後,右上角有個叫做「快跳」的下拉式選單,裡面有管理者預設的一些常用連結,會員可以自行再修改、新增自己想要的頁面到快跳。

先看成果:

用到的模組有:Bookmarks, Jump

Bookmarks可以作到「每個使用者都有自己的選單」
Jump可以作到「把選單變成Dropdown選單」

步驟:
1.安裝以上模組
2.把Bookmarks區塊放到網站任何位置。這個模組提供的區塊就是「會員選單」。但並非是下拉式的,所以在我的案例中,我是不希望他出現。不過這個區塊身負著「產生選單及放入預設選單項目」的重任,所以一定要放這個區塊。可以再用CSS隱藏掉(visibility:hidden)。
3.新增一區塊,輸入格式改為PHP,輸入
<?php
global $user;
$jump_menu = jump_quickly('bookmarks-' . $user->uid);
$output = '

' . $jump_menu;
$output .= l(t('本頁加入快跳'), 'bookmarks/item/addpage/'. base64_encode($path),array('attributes' => array('id' => 'bookmarks_addthispage'))) . ' | ' . l(t('新增常用連結'), 'bookmarks/mine/presets' ,array('attributes' => array('id' => 'bookmarks_addpreset'))) . '

';
print $output;
?>

EXTRA,
Jump的樣式是有個下拉式選單,然後右邊有個GO按鈕,但我希望他能夠變成一選就跳,不需要還要按GO按鈕,這樣才叫快跳嘛!
作法如下:
1.新增模組quicker_jump
2.寫法:
<?php
/*---------------------------
改變快跳
需要:jump.module
----------------------------*/
function quicker_jump_form_alter(&$form, $form_state, $form_id) {
$form_id_short = drupal_substr($form_id, 0, 17);
if($form_id_short == 'jump_quickly_form') {
$form['jump_goto']['#attributes'] = array('onchange' => 'this.form.submit();');
$form['jump_goto']['#options']['pick_me'] = '快跳...';
$form['jump_goto']['#default_value'] = 'pick_me';
//$form['jump_goto']['#options']['default_selected']['selected'] = 'selected';

$form['submit']['#prefix'] = '

';

return $form;
}
}
?>

我兩個問題:
1.因為把GO移除掉,所以勢必要加一個預設的option在select裡面,我不知道要如何加在整個option最上面,目前是在最下面
2.form_alter是否一定要新增模組,不知能否寫在別處?

1. 用 array_unshift(),可以插入新的元素到陣列的開頭而不是結尾

2. form_alter 是依照模組清單來呼叫,所以寫在模組以外的地方應該是無效的

另外,如果需要用到 form_alter,需要增加一個模組,其實可以考慮區塊的部份,也透過模組來定義

是的,我新增的區塊其實也是寫在模組裡面的。多謝hom的指點,原始碼修改如下:

/*---------------------------
改變右上角的快跳
需要:jump.module
----------------------------*/
function quicker_jump_form_alter(&$form, $form_state, $form_id) {
$form_id_short = drupal_substr($form_id, 0, 17);
if($form_id_short == 'jump_quickly_form') {
$form['jump_goto']['#attributes'] = array('onchange' => 'this.form.submit();');
array_unshift($form['jump_goto']['#options'], '快跳...');
$form['jump_goto']['#default_value'] = '快跳...';
//$form['jump_goto']['#options']['default_selected']['selected'] = 'selected';
$form['submit']['#prefix'] = '

';
return $form;
}
}
?>

區塊裡面的 $path 沒有設定,
所以無法加入 頁籤

補上

$path = drupal_urlencode(drupal_get_normal_path(drupal_get_path_alias($_GET['q'])));

順便請問一下,
有辨法把go的按鈕拿掉嗎?

ps:新手發言多包涵!!!