顯示Privatemsg收到幾封信

真開心!最近看完Working with database這一章,覺得好棒!
可能對大家來說都很簡單,可是我還是覺得我突破了,因為我會db_query了!

以下分享Privagemsg這個模組,如何在block裡面顯示"我的收件夾 (2)",
也就是抓出這個使用者收到幾封新信。

以下是我弄的登入後使用者的個人區塊。

<?php
global $user;
$count = db_result(db_query('SELECT COUNT(newmsg) FROM {privatemsg} p WHERE p.newmsg = 1 AND p.recipient = %d', $user->uid));
echo
'Hi!' . $user->name . '
<br />
歡迎登入捉迷藏,你今天想做什麼?
<ul class="menu">
<li class="leaf">'
.l('我的收件夾 (' . $count . ')', "privatemsg/inbox", array('title' => '站內信的收信夾')).'</li>
<li class="leaf">'
.l('我的個人頁面', "user/$user->uid", array('title' => '看我的個人資料、訂單資料及在這個網站上發表過的內容')).'</li>
<li class="leaf">'
.l('編輯個人設定', "user/$user->uid/edit", array('title' => '編輯帳號資料及寵物資料')).'</li>
<li class="leaf">'
.l('登出', "logout", array('title' => '登出去')).'</li>
</ul>'
;
?>

會長類似這樣:

charlesc 的照片

Re: 顯示Privatemsg收到幾封信

這好用 :)

hom 的照片

Re: 顯示Privatemsg收到幾封信

ul 的部分也有現成的 theme 可以用 => theme_item_link

然後 'SELECT COUNT(newmsg) FROM {privatemsg} p WHERE p.newmsg = 1 AND p.recipient = %d'
通常有設了別名 那應該要統一使用
COUNT(newmsg) 的部分就沒加到別名
不然就是只 select 一個 table 的時候 其實不需要取別名

hanamizuki 的照片

Re: 顯示Privatemsg收到幾封信

嗯!對噢!其實不需要把privatemsg取叫p,以點多此一舉。

不過theme_item_link要怎麼實現呢?感覺一次用了好多function和變數,
好亂哦!

hom 的照片

Re:

最簡單的用法

<?php
GLOBAL $user;
$title = 'Hi!' . $user->name . '<br />歡迎登入捉迷藏,你今天想做什麼?';

$items[] = l('我的收件夾 (' . $count . ')', "privatemsg/inbox", array('title' => '站內信的收信夾'));
$items[] = l('我的個人頁面', "user/$user->uid", array('title' => '看我的個人資料、訂單資料及在這個網站上發表過的內容'));
$items[] = l('編輯個人設定', "user/$user->uid/edit", array('title' => '編輯帳號資料及寵物資料'));
$items[] = l('登出', "logout", array('title' => '登出去'));

$output = theme('item_list', $items, $title);
print
$output;
?>

<ul> 內加屬性 ( class="menu" )

<?php
//前略
$output = theme('item_list', $items, $title, 'ul', array('class' => 'menu'));
?>

在每個 <li> 內加屬性 ( class="leaf" )

<?php
//前略
$items[] = array(
 
'class' => 'leaf',
 
'data' => l('我的收件夾 (' . $count . ')', "privatemsg/inbox", array('title' => '站內信的收信夾'))
);
$items[] = array(
 
'class' => 'leaf',
 
'data' => l('我的個人頁面', "user/$user->uid", array('title' => '看我的個人資料、訂單資料及在這個網站上發表過的內容'))
);
$items[] = array(
 
'class' => 'leaf',
 
'data' => l('編輯個人設定', "user/$user->uid/edit", array('title' => '編輯帳號資料及寵物資料'))
);
$items[] = array(
 
'class' => 'leaf',
 
'data' => l('登出', "logout", array('title' => '登出去'))
);
//後略
?>

hom 的照片

Re: 顯示Privatemsg收到幾封信

雖然到最後因為要加一些屬性
結果陣列變的更大
比原本的寫法行數還要多

不過可以
依照 Drupal 格式統一輸出
減少程式內的 html 標籤
覆寫 theme_item_list 的時候將會套用修改
方便後續增加連結項目
傳入的 items 內的項目中包含 'children' => array([子選單的項目]) 的會輸出下一層的選單

hanamizuki 的照片

Re: 顯示Privatemsg收到幾封信

感謝!書上都沒有教這些呢!
的確用Drupal的格式會比較好,又學到了。真開心!

RSS feed