16.
通知功能(上)
一、 替列表加入分類
- 我們讓使用者可以點選分類名稱,就列出該分類記事文章。
$sql="select a.* , b.`cate_title` from ".$xoopsDB->prefix("tad_notes")." as a left join ".$xoopsDB->prefix("tad_note_cate")." as b on a.cate_sn=b.cate_sn where a.`note_public`='1' order by a.note_sort";
- 多送出二組樣板標籤cate_sn、cate_title,樣板也記得修改!
<td><a href='index.php?cate_sn=<{$page.cate_sn}>'><{$page.cate_title}></a></td>
- 列出函數也要多一組參數,並修改其內容:
$and_cate_sn=empty($cate_sn)?"":" and a.cate_sn='$cate_sn'";
$sql="select a.*, b.cate_title from ".$xoopsDB->prefix("tad_notes")." as a left join ".$xoopsDB->prefix("tad_note_cate")." as b on a.cate_sn=b.cate_sn where a.`note_public`='1' $and_cate_sn order by a.note_sort";
二、 加入通知的步驟與流程
- 在xoops_version.php中設定好通知的「類別」以及「事件」這兩種設定。
- 修改 include/notification.inc.php這個檔,好讓通知功能可以取得正確的資料。
- 在模組樣版中加入一行引入「通知」畫面的樣版語法,讓會員可以在模組或區塊裡看到「通知」的設定畫面。
- 製作通知內容的樣版,也就是要來設計寄給會員的通知內容。
- 修改程式,在各個需觸發通知的地方加入觸發事件,例如當有新文章發佈時,那麼就觸發一個通知事件,好讓系統去發出通知給會員。
三、 在xoops_version.php中加入通知「類別」設定(索引從1開始)。
- $modversion['hasNotification'] = 1;
- 「全局通知」類別(使用者觀看文章列表時可設定的通知項目):
- 「新文章」的類別(使用者觀看某文章內容時可設定的通知項目):
- (1) 當有針對這個項目的新評論張貼時通知我
- (2) 將這個項目加入書籤中(沒有通知)
- 類別格式為:$modversion['notification']['category'][1]['xxx']
- (1) ['name'] = '類別名稱'; //「name」用來設定類別的名稱,名稱可自訂,請用英文。如果要設定成「全局」類別,則請填入「global」。
- (2) ['title'] = _標題語系常數;
- (3) ['description'] = _描述語系常數;
- (4) ['subscribe_from'] = array('頁面1.php','頁面2.php',...); //用來設定模組中的哪些頁面會出現此通知「類別」,它的值是一個陣列,例如:「global」類別會出現在index.php及view.php中,其值為:array('index.php','view.php')。
- (5) ['item_name'] = '唯一編號欄位'; //填入「唯一編號欄位」的名稱,例如流水號sn。只有屬於「global」的類別可以不用設定此項,其餘自訂的都要!
- (6) ['allow_bookmark'] = 1; //用來設定該類別是否可使用「書籤」功能。使用者可以從使用者選單中的「通知」裡面看到自己設定的書籤。
四、 在xoops_version.php中加入通知「事件」設定(索引從1開始)。
- 每一個類別底下都會有至少一個的通知「事件」,格式為:$modversion['notification']['event'][1]['xxx']
- (1) ['name'] = '事件名稱'; //設定該通知事件的名稱,用以辨識不同的事件,請用英文來命名之。
- (2) ['category'] = '所屬類別';
- (3) ['title'] = '事件標題';
- (4) ['caption'] = '事件內容'; //會出現在通知設定選單中
- (5) ['description'] = '事件描述';
- (6) ['mail_template'] = '通知信的樣版名稱'; //不需寫入副檔名,需放在「language/語系/mail_template」目錄中,副檔名為.tpl,如:new_doc.tpl。
- (7) ['mail_subject'] = '郵件主題';
- (8) ['admin_only'] = '1'; //設定該事件只有管理者可用
- (9) ['invisible'] = '0'; //設定該事件是否為隱藏事件
五、 若模組有用到「評論功能」或有使用書籤功能需要再加入以下設定:
$modversion['notification']['lookup_file'] = 'include/notification.inc.php';
$modversion['notification']['lookup_func'] = '通知函數名稱';
六、 產生 include/notification.inc.php這個檔
- 這個檔主要的用途就是依據「通知類別」以及「唯一編號」來擷取寄發通知時所需要的一些訊息,包括「name」和「url」。
- 主要的處理函數會接收到兩個參數,包括$category(類別名稱)、 $item_id(唯一編號值)
function get_note_notification($category, $item_id){
if ($category=='global') {
$item['name'] = '';
$item['url'] = '';
return $item;
}
global $xoopsDB;
if ($category=='cate') {
$sql = 'SELECT cate_title FROM ' . $xoopsDB->prefix('tad_note_cate') . ' WHERE cate_sn = '.$item_id;
$result = $xoopsDB->query($sql); // TODO: error check
$result_array = $xoopsDB->fetchArray($result);
$item['name'] = $result_array['cate_title'];
$item['url'] = XOOPS_URL . '/modules/tad_note/index.php?cate_sn=' . $item_id;
return $item;
}
}
- 在樣版中加入一行引入「通知」畫面的樣版語法:<{include file='db:system_notification_select.html'}>