筆者在承接某個專案的時候 , 遇到客戶有需要使用真實連結的需求 , 想使用的原因很簡單 , 主要是因為現在大多新式瀏覽器 , 只要給予真實檔案路徑都可以直接在瀏覽器開啟 pdf , txt等文件 , 讓用戶可以在線閱讀 , 而不需要下載回本機 ~
在全局 → 上傳附件 → 論壇附件中有一個"附件 URL 地址、媒體附件播放:"開啟的選項 , 開啟後附件檔案旁會多了一條超連結的圖示 , 點擊後會產生 attach://aid" 的附件連結方式在任何站內的帖子中引用,並支持媒體類附件的直接播放 !
只要透過二次修改 , 就可以讓 attach://aid 的附件顯示方式改成顯示附件真實路徑了 ~
補充:不使用 attach://aid 插入附件方式 , 還是可以使用Discuz本身強大的附件系統喔 !
這邊提供修改方法適用於 Discuz X2, X3版本
DISCUZ真實路徑顯示修改
首先先來修改 attach 附件檔案的判定 , 因出於安全考慮Discuz對未添加至允許副檔名名單中的檔案,上傳文件後會一併將不認識的副檔名後綴改名為.attach , 因此會影響到在呼叫真實連結時 , 某些未在名單中的附檔名顯示 .attach , 所以我們還需要手動添加一些常用上傳的副檔名 , 例如 pdf 或是 office系列的副檔名 (doc,ppt,xls等等)
打開:source/class/discuz/discuz_upload.php 檔案
查找
function get_target_extension($ext) {
將
static $safeext = array('attach', 'jpg', 'jpeg', 'gif', 'png', 'swf', 'bmp', 'txt', 'zip', 'rar', 'mp3');
添加上你需要開放的副檔名 例如:
static $safeext = array('attach', 'jpg', 'jpeg', 'gif', 'png', 'swf', 'bmp', 'txt', 'zip', 'rar', 'mp3' , 'pdf' ,'doc','docx','xls','xlsx','ppt','pptx');
接下來就可以開始修改控制attach的函數檔案了 ~
打開source\function\function_discuzcode.php 檔案
修改 function parseattachurl 功能函數
改為:
function parseattachurl($aid, $ext, $ignoretid = 0) {
global $_G;
$_G['forum_skipaidlist'][] = $aid;
$aid = intval($aid);
$tableidcheck = DB::fetch_first("SELECT * FROM ".DB::table('forum_attachment')." WHERE aid='$aid'");
$atableid = $tableidcheck['tableid'];
$tableid= "forum_attachment_".$atableid;
$attach = DB::fetch_first("SELECT * FROM ".DB::table($tableid)." WHERE aid='$aid'");
$attachfile = $attach['attachment'];
return $_G['siteurl']."data/attachment/forum/".$attachfile;
}
接下來就可以使用插入attach://aid的方式來獲取附件的真實連結囉 !
不過使用真實連結容易使檔案被他網盜連 , 造成網站流量以及頻寬的浪費 , 若對於伺服器端沒有任何管理能力的朋友不建議在網站上張貼真實路徑的下載連結。
|