您在這裡

顯示Privatemsg收到幾封信

hanamizuki's 的頭像
hanamizuki 在 2008-10-24 (週五) 19:47 發表

真開心!最近看完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 . '

歡迎登入捉迷藏,你今天想做什麼?

';
?>

會長類似這樣:

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

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

最簡單的用法


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

$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;
?>

    內加屬性 ( class="menu" )


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

    在每個
  • 內加屬性 ( 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' => '登出去'))
    );
    //後略
    ?>

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

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