Discuz 從 7.2 的NC開始的變革

雖然文章標題挺「全面性」不過我這邊主要在討論NC對插件開發的影響拉!
尤其到了 Discuz X 這個「威力」又比以往更加強大。
這邊分享的是 7DPS 上的一款插件「反潛水」並且說明一些運用。

首先看看核心原始碼,很短,也只有一個檔案。

<?php

if(!defined('IN_DISCUZ')) {
 exit('Access Denied');
}

class plugin_amufqs {

}

class plugin_amufqs_forum extends plugin_amufqs {
 function viewthread_amufqs_output(){
 global $_G,$postlist;
 $wxfid = unserialize($_G['cache']['plugin']['amufqs']['wxfid']);
 if(!$_G['uid']){
 if($_G['cache']['plugin']['amufqs']['rd']==1 &&(!in_array($_G['fid'],$wxfid)||!$_G['uid'])){
 foreach($postlist as $id => $postvalue){
 $message=$postvalue['message'];
 if($postvalue['first']==1){$ah=$_G['cache']['plugin']['amufqs']['zlgd'];}else{$ah=$_G['cache']['plugin']['amufqs']['otgd'];}
 if($postvalue['first']<>1 && $_G['cache']['plugin']['amufqs']['otgd']==-1){$messageot=$message;}
 $message='<div style="height:'.$ah.'px; overflow:hidden;">'.$message.'</div><br><div><em>訪客無法觀看完整內容,請:<a
onclick="showWindow(\'login\', this.href);hideWindow(\'register\');" href="member.php?mod=logging&action=login">登錄</a> 沒有帳號?<a onclick="showWindow(\'register\', this.href);hideWindow(\'login\');" href="member.php?mod=register">'.$_G['setting']["reglinkname"].'</a></em></div>';
 $postlist[$id]['message']=$message;
 if($postvalue['first']<>1 && $_G['cache']['plugin']['amufqs']['otgd']==-1){$postlist[$id]['message']=$messageot;}
 }
 }
 }
 }

}

結尾不加上 ?> 似乎是某種新習慣,我不太瞭解就是了……
除了一貫的檢查是否在Discuz中運行外,緊接著的就是「物件」的概念。
不過充其量,也就只是建立物件,然後給Discuz調用。

因為是針對討論區的部份,所以物件建立完畢後,就放著(望
緊接著建立繼承父物件的子物件(加上_forum對論壇)

因為插件是限制「訪客無法觀看完整文章」所以就出現所謂的 viewthread_amufqs_output 函式。
函式影響Discuz的相關資訊可以參考開發手冊,上面有內定義的列表。
加上 _output 是在輸出前處理,這點算是程式開發的好習慣運用吧!
*一般寫網站用程式,為了版面和運算分離,會有運算區和輸出區。這點在Discuz就是很明顯的例子 *include temple(‘xxx’) 這類語法

中間的運算過程就不用討論了……
其實這樣看來,原本需要去修改 viewthread.php 才能做到的事情,現在只需要一個PHP檔案就完成。
在開發者的角度來看,可以說是「方便」至少不用做教學說明和修改多個檔案了!
而在使用者的角度來看,可以說是「簡單」畢竟除開發者造成的Bug之外,安裝上不會出錯。

雖然 Discuz 7.2 / X 還有一部分插件需要手動修改,原因我也不清處。
不過可以確定自從 7.2 的 NC 開始被運用後,開發插件容易很多。

尤其是許多「修改版模」的零碎處理。
在這方面,原本看到眼花的程式碼,用程式就能解決,是非常「使人愉悅」
畢竟很多麻煩都沒了!而且NC在許多功能也有輔助到開發者,可以說是「輕鬆愉快」
而之前在Discuz 的 APP 網站上看到 Discuz X 還能直接新增後台選單。
看到這點,讓我感受到Discuz對開發者的友善。
(在7.2的時候我還得自己去修改後台選單呢!)

不過多用戶Discuz是否會因為DiscuzX而隱沒呢?
這點我就不得而知了!
畢竟類CMS論壇提供多用戶版本,消耗的資源挺可觀的,開發的難度也相對升高。
也許有時間我會去研究個「DiscuzX多用戶論壇獨立版」指針對論壇部份開發呢!
(當然,那是我考上大學之後的事情了……)

NC的改變對我影響很大,因為讓我更加的自由開發。
(比起phpBB我倒是很喜歡Discuz這點)

Comments are closed.