跳到主要內容

發表文章

Xoops免費佈景:neilambilight3.3正式版釋出-佈景設計開發:徐嘉裕Neil hsu

本次釋出的neilambilight3.3版主要是針對neilambilight3.2部分樣式BUG進行修正,也增加了新的佈景布局樣式及更換主選單JS套件,採用更優化的smartmenus選單,讓網站運作更為順暢。 neilambilight佈景展示網站: https://chongshanli.com/ neilambilight3.3更新內容 1、佈景版型配置增加->上右四區塊顯示上方功能,可由佈景管理模組中切換版型。 2、更換布景主選單為smartmenus-1.1.1套件,選單CSS樣式調整。 3、修改關於我們區塊結構樣式,針對Xoops->12個位置做最適化調整。 4、彈出廣告增加自訂廣告圖片寬度功能。 5、修正關閉網站自動放大縮小功能->主選單上下位移錯誤問題。 本次更新釋出版本 neilambilight3.3版 neothemesadmin5.6版 neillibrary2.5版 系統環境需求 PHP版本:PHP7.3包含以上,最佳版本PHP8.1, 建議php7.4(因tad模組只兼容到php7.4) Mysql版本:mysql5.55包含以上到10.4.27-MariaDB Xoops版本:Xoops2.5.10包含以上,最佳版本Xoops2.5.11 升級安裝neilambilight3.3如下說明 1、前往下載neilambilight3.2佈景檔 http://neodw.com/neil/modules/tad_uploader/index.php?of_cat_sn=14 2、解壓縮後,吧htdocs資料夾裡面的檔案全部上傳到網站根目錄中覆蓋舊檔(htdocs或www目錄) ->kernel ->modules ->themes ->register.php ->robots.txt 備註說明:htdocs資夾包含Xoops補丁檔,增加表單防機器人驗證機制,以及區塊$show_func增加$this傳參,若無上傳布景將無法正常運作。 3、進到管理後台->點選模組->點選更新neothemesadmin佈景管理模組 (非常重要) 4、進到管理後台->點選模組->點選更新neillibrary函數庫模組 (非常重要) 5、升級後舊版佈景建立資料均會保留。 既完成本次升級...

Xoops免費佈景:neilambilight3.2正式版釋出-佈景設計開發:徐嘉裕Neil hsu

本次升級除修正部分BUG外,也針對功能做了擴充,包括佈景管理後台改用Xoops2.5框架,增加全國據點管理功能,增加簡介區塊管理功能,增加廣告管理功能(GTM代碼管理/彈出廣告功能/右下浮動廣告功能),並精簡優化佈景的程式,重構部分JS及CSS代碼,加快網站開啟速度及穩定性,提供USER更友善的網站使用環境。 neilambilight佈景展示網站: https://chongshanli.com/ neilambilight3.2更新內容 1、調整因Xoops2.5.11變更模組版本數值,修改佈景管理模組更新通知版本判斷方式。 2、修正布景更新通知無法關閉問題,增加紀錄更新時間及關閉通知後下次通知的間隔時間。 3、佈景管理新增加圖片撥放器間隔秒數設置功能。 4、關於我們區塊->新增加圖片按鈕輸入連結網址功能。 5、優化佈景管理->聯絡我們及聯絡我們管理區塊JS表單驗證功能(合併簡化code)。 6、修正布景開啟搜尋區塊捲軸下拉滑動選單會跑位的問題。 7、修改佈景管理模組首頁->改用Xoops2.5框架。 8、刪除無使用的tplthemescss.php檔 9、佈景管理->新增加全國據點管理功能,後台可新增/編輯/刪除/排序/全國據點,前台增加全國據點區塊功能。 10、佈景管理->新增加簡介區塊管理功能,後台可新增/編輯/刪除/排序/簡介區塊,前台增加簡介區塊功能。 11、佈景管理->新增加廣告管理功能。 ->GTM代碼管理,可按照UI指引貼入GTM追蹤代碼,可設定啟用或不啟用GTM代碼。 ->彈出廣告管理,可建立在首頁彈出的廣告圖片及連結,後台可建立多筆資料,有指定及隨機兩種顯示方式。 ->右下浮動廣告管理,可建立網站右下方浮動廣告圖片及連結,一式廣告分為上下兩組,後台可建立多筆資料,有指定及隨機兩種顯示方式。 12、布景js播放器圖改為png格式,更新模組時執行jpg轉png程式。 13、修正因布景存入cookie更新頁面導致FB分享連結抓不到網站內容資訊的問題(標題/圖片/說明)。 14、升級聯絡我們功能,聯絡內容及回覆內容增加URL自動轉連結及保持原格功能,優化code清除不必要的程式碼。 15、修改布景LOGO主標題文字不隨內容變動! 16、升級電腦版網站隨解析度自動放大縮小功能,捨棄zoom改用tra...

Xoops模組開發->解決上傳圖檔檔名被Xoops Protector防護模組誤判為有害檔踢出的問題-教學撰寫:徐嘉裕Neil hsu

如果有開啟Xoops Protector防護模組的此項功能 假如有惡意檔案被上傳就強制踢出 假如有人企圖上傳一些可以執行的惡意檔案,例如副檔名為.php的檔案,此模組將強制踢出XOOPS。 上傳單一圖檔時會因為檔名有禁用字元而被當成惡意檔案踢出系統, 例如: LINE_ALBUM_2022. 閱讀日活動 4.21-4.22_220805_5.jpg 這樣的檔名就會被踢出去,但這確實是無害檔沒錯 user還需要改檔名才能上傳,實在有點矯枉過正,解決方案就是在接收$_FILES的php檔最頂端 (include "header.php") 上面加上以下code if(!empty($_FILES['upfile']['name'])) $_FILES['upfile']['name']=strtotime(date("Y-m-d H:i:s")).'.'.substr(strrchr($_FILES['upfile']['name'], '.'), 1); //重編檔名防止被防護模組阻擋 //$_FILES['upfile'] 就是表單傳送檔案的name值, 可改為自訂值 這樣檔名就會被改成時間戳格式,原始副檔名也會保留,如果user上傳php檔一樣會被Xoops Protector防護模組踢出去,但 LINE_ALBUM_2022. 閱讀日活動 4.21-4.22_220805_5.jpg 這樣格式的圖檔就能上傳。 另外如果有多個單張圖檔上傳,例如upfile1~upfile2~upfile3,也能用以下批次方法修改 foreach(array_keys($_FILES) as  $val){ if(!empty($_FILES[$val]['name'])  &&  !is_array($_FILES[$val]['type'])){ $_FILES[$val]['name']=strtotime(date("Y-m-d H:i:s")).'.'.substr(strrchr($...

Xoops模組開發->區塊開發->區塊執行函式增加傳遞第二參數功能-教學撰寫:徐嘉裕Neil hsu

在開發Xoops區塊的時候,我們會吧區塊編輯函式(block_edit)的設定值放在options陣列裡面,送出後以字串形式儲存在newblocks資料表的options欄位中, 然後在區塊執行函式(block_show)使用$options陣列來取得設定值,但由於Xoops限制區塊執行函式只能取用options欄位的設定值,其他的像是bid,name,title欄位都是無法取得數值,若是我們需要取用bid來做前台js資料區隔就沒辦法,解決方案只有修改kernel/block.php->$show_func涵式,增加第二傳遞參數功能,吧整個$this都送入$show_func涵式,這樣在模組區塊中就能調用到newblocks資料表全部數值了,方法如下。 1、開啟kernel/block.php檔案,用文字編輯器找到481行       $block   = $show_func($options); 2、修改為 $block   = $show_func($options ,$this ); 3、模組區塊執行函式增加第二參數 function 模組ID_block_show($options ,$thisvar ){ 略.......... } 注意:模組區塊執行函式第二參數請勿用$this命名變數 4、如果要取用bid值輸出樣板,$block['bid']=$thisvar->getVar('bid'); 5、在模組樣板上使用<{$block.bid}>即可 6、>getVar(' 可輸入任何newblocks資料表的欄位名稱 ') 這樣就可以了,複製區塊一樣能抓到數值,有需要的朋友參考看看!! 工作心得分享: 徐嘉裕 Neil hsu

php多檔上傳檢測檔案類型MIME白名單的方法-教學撰寫:徐嘉裕Neil hsu

通常要檢測上傳檔案白名單可以用副檔名來檢測,不過副檔名是可以變造的,最常見的就是勒索病毒,比較安全的方法用上傳檔案的MIME來檢測,這樣就算變造過的副檔名一樣會被檢測出來,防止伺服器被駭,方法如下: foreach($_FILES['fileval']['tmp_name'] as $i=> $val){ //檢測文件的 MIME 內容類型 $mime_type = mime_content_type($val); //可上傳MIME類型JPG,PNG,GIF,Word,Excel,PowerPoint,pdf //可再增加MIME類型 $allowed_file_types = ['image/png', 'image/jpeg','image/gif','application/msword','application/vnd.ms-excel','application/vnd.ms-powerpoint','application/pdf','application/vnd.openxmlformats-officedocument.presentationml.presentation','application/vnd.openxmlformats-officedocument.wordprocessingml.document','application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']; if (!in_array($mime_type, $allowed_file_types)) { $failed.=$_FILES['fileval']["name"][$i].','; } } if(!empty($failed)){ echo '您上傳的檔案'.$failed.'不符合上傳規定'; exit; } 只要不是在上傳白名單中的檔案都會終止程式,也可以做導向返回首頁,讓檔案...

寫了一個文字框textarea內容輸出樣板的function解決(保留原格式/字元轉編碼/URL自動加上連結)等問題-教學撰寫:徐嘉裕Neil hsu

在開發模組時並不是所有的文字框都要使用CK編輯器,CK編輯器使用JS生成消耗前端資源,用越多網站開啟越慢,一些純文字的內容用原生的textarea即可,但需要做一些處理,不然內容輸出樣板會有以下問題 1、若未設置nl2br函數保留原格式,所有的段行內容都會黏再一起。 2、若未做字元轉編碼htmlentities,則一些特殊字元無法正常顯示: 例如&會變成¢ 。 3、內容中如有URL無法自動產生連結。 會像下圖這樣 為了解決這問題,寫了一個function包含了(保留原格式/字元轉編碼/URL自動加上連結)等函數,code如下: function textprocessing($val=""){ //字元轉編碼 $val=htmlentities($val,ENT_QUOTES,"UTF-8"); //URL自動加上連結 $val = preg_replace('#(http|https|ftp|telnet)://([0-9a-z\.\-]+)(:?[0-9]*)([0-9a-z\_\/\?\&\=\%\.\;\#\-\~\+]*)#i','<a target="_blank" href="\1://\2\3\4" rel="nofollow">\1://\2\3\4</a>', $val); //保留原格式 return nl2br($val); } 在php上輸出內容變數加上textprocessing()函數 ECHO $message=textprocessing($val=$message); 或是在smarty樣板上直接引用函數也可以(php端就不需處理) <{$message|textprocessing}>  最後輸出結果如下圖 可以看到原格式斷行/特殊字元/URL加上連結都有處理了,這樣用一個function就能解決三個問題,有需要的朋友參考看看! 工作心得撰寫: 徐嘉裕 Neil hsu

分享一個PHP使用curl函數下載遠端檔案回本地端伺服器的function-教學撰寫:徐嘉裕Neil hsu

要下載遠端檔案回自己伺服器存放,方法很多,用fopen也行,但這裡不推薦,因為大部分虛擬主機的php.ini中allow_url_fopen都會設為Off,導致fopen函數擷取遠端檔案失敗,無法下載,解決方法就是使用安全性較高且為PHP預設套件curl函數來擷取遠端檔案,方法如下 假設我們要下載遠端的 https://img.youtube.com/vi/sDhU6nWWja8/maxresdefault.jpg 存放到伺服器端 /opt/lampp/htdocs/uploads/images/maxresdefault.jpg //function code //下載遠端檔案回本地端 function curlsave_file($inPath,$outPath){  //$inPath 遠端路徑 //$outPath 儲存本地端路徑 set_time_limit(0); //如果文件很大,請設置超時。 //文件處理 $new_file = fopen($outPath, "w") or die("cannot open" . $outPath); //curl操作 $cd = curl_init(); curl_setopt($cd, CURLOPT_URL, $inPath); curl_setopt($cd, CURLOPT_FILE, $new_file); // 超時為 30 秒,要下載大文件,您可能需要增加超時限制。 curl_setopt($cd, CURLOPT_TIMEOUT, 30);  //運行 curl 下載文件 curl_exec($cd); if (curl_errno($cd)) {   echo "the cURL error is : " . curl_error($cd); } else {   $status = curl_getinfo($cd);   echo $status["http_code"] == 200 ? "The File is Downloaded" : "The error code is : " . $status["http_code"] ;   // the...