跳到主要內容

發表文章

目前顯示的是有「Neil網站設計工坊」標籤的文章

Xampp將MariaDB改為mysql8.0的方法!!並且可以隨時替換回MariaDB!!

說真的我個人是覺得MariaDB很好用,尤其是root的認證方式採用mysql_native_password驗證,與mysql5.7版相同,與PHP及xoops也沒有兼容性問題,那為什麼要吧Xampp的MariaDB替換為mysql8.0,主要是為了做兼容性測試,因為很多虛擬主機都改用mysql8.0,做一個程式開發者開發的模組必須能在各種環境都下正常運作,所以提供了以下替換方式方便測試,說明如下: 1、先進入phpmyadmin中吧資料表匯出備份(轉換為mysql8.0後需要再匯入一次) 2、在windows上使用【系統管理員身分】開啟XAMPP的Panel,然後吧MySQL關閉。 3、確認關閉後,前往MySQL官方網站下載mysql->zip檔回本地端: https://dev.mysql.com/downloads/mysql/ 4、將Xampp目錄中的mysql改為mysql_M   既為  c:\xampp\mysql 變更為 c:\xampp\mysql_M  5、將下載的ZIP Archive解壓縮後更名為mysql,並複製到c:\xampp根目錄中,所以您的c:\xampp根目錄底下因該會有 c:\xampp\mysql_M c:\xampp\mysql 兩個資料夾 6、以【系統管理員身分】開啟XAMPP的Panel->點選右邊的Shell開啟終端機,輸入以下指令安裝mysql8.0 ->輸入cd c:\xampp\mysql\bin ->輸入mysqld.exe --default-authentication-plugin=mysql_native_password --initialize-insecure --basedir=c:\xampp\mysql --datadir=c:\xampp\mysql\data 接下來稍等約1分鐘,就會看到終端機開始執行mysql8.0套件安裝程序到完成。 7、找到以下目錄c:/xampp/mysql/bin/->建立一個my.ini檔,用筆記本打開貼上以下設定 [mysqld] port=3306  basedir=c:\xampp\mysql datadir=c:\xampp\mysql\data socket=c:\xa...

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...

PHP->分享一個好用的jpge轉png的function-教學撰寫:徐嘉裕Neil hsu

最近升級Xoops布景架構,吧js播放器圖片由本的jpg轉為png,除了在創建圖檔及讀出圖檔的地方需要更改,也需要吧原本已經建立的jpg檔全部批次改為png,這樣user更新完布景才不會播放器圖片都顯示X,關於jpge轉png的方法上網G狗了一下,找到一個不錯且好用的function分享給大家 jpge轉png的function code //jpge轉png function function jpgtopngfunction($input_file="",$output_file=""){ //$input_file; 原始JPG檔路徑+檔名 //$output_file; 轉成PNG檔路徑+檔名 //檔案存在才執行 if(file_exists($input_file)) { $input = imagecreatefromjpeg($input_file); $width = imagesx($input); $height = imagesy($input); $output = imagecreatetruecolor($width, $height); $white = imagecolorallocate($output, 255, 255, 255); imagefilledrectangle($output, 0, 0, $width, $height, $white); imagecopy($output, $input, 0, 0, 0, 0, $width, $height); imagepng($output, $output_file); //刪除原始jpg檔 unlink($input_file); } } 在需要轉換的地方引用jpgtopngfunction()函數 例 jpgtopngfunction($input_file=" img.jpg ",$output_file=" img.png "); 這樣就會吧 img.jpg 複製一份為 img.png 後,再刪除原始的 img.jpg ,可以搭配foreach迴圈使用做批次修改,有需要的朋友參考看看 參考資料來源: https://itecnote.com/tecnote/php-gd-con...

jQuery datepicker月曆去除時分秒選單功能-教學撰寫:徐嘉裕Neil hsu

 jQuery datepicker月曆是非常好用的時間選擇套件,可以選擇年/月/日/時/分/秒,不過最近剛好需要用到的時間格式為date,不需要時分秒,雖然官網有datepicker選單的設定方法,但我還是覺的自己寫一個js hack來處理比較快,以下為程式說明 原生的datepicker月曆套件因該是如下圖這樣,有完整的時間選項 只需要加上以下code,就能去除時分秒按鈕及文字框中的00:00:00 <script> $(document).ready(function() { $('body').on('change', ' #mydate1 ', function() {  //紅字為月曆input的id var date = $(this).val(); var newDate=/\d{4}-\d{1,2}-\d{1,2}/g.exec(date); $(this).val(newDate); $('.ui-timepicker-div').remove(); }) }); </script> 這樣就可以了,實際測試看看 時分秒套件已經被移除,文字框也不會再顯示00:00:00,這樣存進資料表date欄位就不會出錯,有需要的朋友參考看看! 工作心得撰寫: 徐嘉裕 Neil hsu

JS解決使用sortable()函數拖曳導致CK編輯器textarea被鎖定無法編輯的問題-教學撰寫:徐嘉裕Neil hsu

使用JS函數sortable()對CK編輯器進行拖曳時,會導致textarea被鎖定無法編輯,這是一個很頭痛的問題,還好在ckeditor官網找到解決方案,就是當拖曳觸發時(start)先銷毀CKEDITOR,拖曳結束(stop)在重建CKEDITOR,解決方法如下: function dragmenufunction() { $(".sortable").sortable({ items: ".sortablebox", //指定拖曳元件或ID及CLASS //拖曳開始 start: function(event, ui){ var textareaId = ui.item.find(' .editor ').attr('id' );  //紅字的.editor為textarea->class if (typeof textareaId != 'undefined') { var editorInstance = CKEDITOR.instances[textareaId]; editorInstance.destroy(); CKEDITOR.remove( textareaId ); } }, //拖曳結束 stop: function(event, ui){ var textareaId = ui.item.find(' .editor ').attr('id');   //紅字的.editor為textarea->class if (typeof textareaId != 'undefined') { CKEDITOR.replace( textareaId ); } } }); } 實際測試看看,當拖曳時ck編輯器會被銷毀呈現原生textar...

JS遍歷select多選項目以陣列比對符合值-教學撰寫:徐嘉裕Neil hsu

要取得select多選項目(multiple)值必須使用each遍歷全部的select選單後取得selected狀態val,存成陣列再用$.inArray()比對陣列中是否有符合條件,以下為應用範例說明 例如有一個群組選單,我們要判斷【訪客】群組是否有被選取(val=3),如果有被選取則顯示->訪客報名啟用註冊功能欄位 如果沒有被選取則隱藏->訪客報名啟用註冊功能欄位 code如下說明 //html結構 <span id='helpBlock' class='help-block'>選擇可報名群組</span> <select class='form-control' id='browsegroup' name='browsegroup[]' multiple > <option value=1 data-id=1 >管理員</option> <option selected='selected' value=2 data-id=2 >註冊會員</option> <option selected='selected' value=3 data-id=3 >訪客</option> </select> <div class='col-sm-12' id='registerbox'> <label class='col-sm-6'><span id='helpBlock' class='help-block'>訪客報名啟用註冊功能</span> </label> <div class='col-sm-6'><label class='radio-inline'> <input class='' type='radio' id='' name...

PHP取得圖片資訊getimagesize函數-教學撰寫:徐嘉裕Neil hsu

getimagesize函數可以解析上傳圖片的所有參數,包含圖片高度,寬度,類型等,有了這些資訊,就能在上傳檔案時做進一步的判斷分流,使用方法如下: $arrayimg = getimagesize($file['tmp_name']); //取得上傳暫存路徑中檔案資訊 $arrayimg共會返回以下陣列 Array(     [0] => 350     [1] => 318     [2] => 2     [3] => width="350" height="318"     [bits] => 8     [channels] => 3     [mime] => image/jpeg ) $arrayimg[0]=>圖像寬度的像素值 $arrayimg[1]=>圖像高度的像素值 $arrayimg[2]=>圖像的類型1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM $arrayimg[3]=>寬度和高度的字符串,可以直接用於HTML 的<image> 標籤 $arrayimg[bits]=>圖像的每種顏色的位數,二進制格式 $arrayimg[channels]=>圖像的通道值,RGB 圖像默認是 3 $arrayimg[mime]=>圖像的MIME資訊,可以用來在HTTP Content-type 頭信息中發送正確的信息,如:header("Content-type: image/jpeg"); 應用範例1-設定上傳圖片最大寬度->超過才做縮圖 假設上傳圖片最大寬度為1000px,若上傳圖檔超過最大寬度才做縮圖處理,否則原尺寸上傳 $arrayimg = getimagesize($file['tmp_name']); ...

PHP去除js,smarty,css,php標籤的function-教學撰寫:徐嘉裕Neil hsu

在開發留言系統時除了前端防禦外,後端的過濾也很重要,因為前端所有的JS功能都可透過瀏覽器的F12竄改導致防禦無效,尤其是惡意發佈js,css,程式碼破壞版面,甚至可將頁面導向木馬程式網頁,所以一定要在資料寫入時就吧js,smarty,css,php標籤通通去除掉無害化處理,才能防止網站遭惡意破壞事情發生。 分享一個PHP去除js,smarty,css,php標籤的function,code如下 //去除js,smarty,css,php標籤 function removejscssscript($str) { //移除js $str = str_replace("\r\n", PHP_EOL, htmlspecialchars_decode($str)); $str = preg_replace('/<.*script.*>/', '', $str); //移除css $str = preg_replace('/<.*style.*>/', '', $str); $str = preg_replace('/<.*link.*>/', '', $str); //移除smarty $str = preg_replace('/<\{+/i', '', $str); $str = preg_replace('/\}>+/i', '', $str); //移除php $str = preg_replace('/<\?php+/i', '', $str); $str = preg_replace('/\?>+/i', '', $str); return $str; } //在接收變數寫進資料表的地方使用即可  removejscssscript($str=$_POST['description']) ; 實際測試移除效果,我們先在文字框中貼上js,css程式碼 然後送出,可以看到style及script都被移除掉,只剩下結構,這樣就無害化完成 有需要的朋友參考看...

JQuery->好用的去除HTML標籤function分享-教學撰寫:徐嘉裕Neil hsu

分享一個好用的JQuery去除HTML標籤function,可以用在編輯器計算字數的地方,範例如下: //去除TTML標籤function function removeHTMLTag(str) { str = str.replace(/<\/?[^>]*>/g, ''); //去除HTML tag str = str.replace(/[ | ]*\n/g, '\n'); //去除行尾空白 str = str.replace(/\n[\s| | ]*\r/g, '\n'); //去除多餘空行 str = str.replace(/&nbsp;/ig, ''); //去掉&nbsp; str = str.replace(/\s/g, ''); //將空格去掉 return str; } //應用範例 $test="<div>文字文字文字文字<br />文字文字文字文字</div>"; removeHTMLTag(str=$test); //輸出->文字文字文字文字文字文字文字文字 removeHTMLTag(str=$test) .length; //輸出16字數 以上工作心得分享,有需要的朋友參考看看 工作心得撰寫: 徐嘉裕 Neil hsu

PHP指定陣列顯示數量的方法-教學撰寫:徐嘉裕Neil hsu

使用array_slice()函數可以指定陣列輸出的數量,例如只輸出陣中前4個陣列,或是由第4個陣列之後輸出全部陣列,透過array_slice()函數都可達成 php code範例如下 //共有9個陣列 $Arr=array("陣列01","陣列02","陣列03","陣列04","陣列05","陣列06","陣列07","陣列08","陣列09"); //取得陣列總數 $Arrcount = is_array($Arr) ? count($Arr) : 0 ; //只輸出0-4個陣列 //顯示陣列01,陣列02,陣列03,陣列04 foreach( array_slice ($Arr, 0, 4) as $val){ echo $val.','; } // 輸出第 4個之後的全部陣列 //顯示陣列05,陣列06,陣列07,陣列08,陣列09 foreach( array_slice ($Arr, 4, $Arrcount) as $val){ echo $val.','; } 這樣就能在資料源頭做分流,不須使用IF來判斷迴圈數後顯示內容,精簡程式節省效能,有需要的朋友參考看看 工作心得撰寫: 徐嘉裕 Neil hsu

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

針對neilambilight3.0版用戶回報問題做調整與升級,更新項目如下 neilambilight3.1更新內容 ============================== 1、自訂按鈕->圖片類型區塊,增加顯示及不顯示按鈕文字功能,並重新優化該區塊的布景CSS樣式。 2、布景電腦版->底區塊選單增加第二層收納第三層選單功能(原本為展開結構),並優化CSS樣式。 3、修正模組更新onUpdate.php->自動刪除腳本,刪除使用中的css檔問題。 4、隨機小語後台增加內容輸入框簡易CK編輯器。 5、調整布景JS套件引入位置解決與部分tad模組衝突問題。 6、聯絡我們顯示未回覆提示框時,自動關閉主選單浮動功能,解決版面變形問題。 7、修正多層自訂按鈕未關閉區塊樣式時字體過大問題。 8、修正多層自訂按鈕編輯時選擇分類會變成空值的問題。 9、調整佈景中間欄位配置區塊標題文字及高度加大。 本次更新釋出版本: neilambilight3.1版 neothemesadmin5.1版 neillibrary2.3版 安裝及升級方法如下neilambilight3.0說明。 歷經一年多的開發,neilambilight佈景已經完全煥然一新,以全新的面貌呈現給大家,本次改版佈景前台介面全部砍掉重練,全新的設計風格與優化結構,更實用的功能與管理便利性及安全性,並增加了視差動畫設計,自訂區塊icon功能,版面布局也更多樣化,可兼容tad最新版模組,目前已完成各項測試正式發佈,歡迎大家下載使用。 neilambilight佈景展示網站: https://chongshanli.com/ neilambilight3.0 更新內容 ============================== 1、升級布景jquery到jquery-3.5.1.min.js。 2,升級布景jquery-migrate到jquery-migrate-3.3.0.min.js 3、調整布景headtpl.tpl中CSS及JS檔引入方式。 4、移動儲存區塊圖片資料夾內容neilambilight->neothemesadmin,修改圖檔路徑 5、隨機小語新增自訂電腦版及手機版寬度高度設定。 6、災害示警新增自訂電腦版及手機版寬度高度設定,修改樣板設定。 7、強化表單防禦機器人程式架...

Xoops->使用js判斷USER端瀏覽器cookie是否啟用,若啟用ajax寫入cookieid-教學撰寫:徐嘉裕Neil hsu

cookie運作原理是吧伺服器端的資料儲存於user端的瀏覽器中,然後可讀寫cookie值,通常用於網站登入儲存會員密碼之類的,但也能作為區隔同ip多台電腦或同電腦多個不同瀏覽器的識別,只需要在網站首次進入時寫入一組cookieid即可。 不過問題來了,php雖然可以使用setcookie()寫入cookie,但卻無法判斷user端的cookie是否啟用(cookie是在瀏覽器前端執行),用js也能寫入cookie並判斷是否啟用,但所需的參數還是需要php先輸出到樣板在用js取值寫入,怎麼用都很麻煩的感覺。 解決方案就是用js來判斷user端的cookie是否啟用,若啟用直接用ajax在php端setcookie()寫入cookie,這樣整合起就能吧js跟php不足的地方都補齊了,方便好用。 以下為code範例 //tpl樣板部分 <!-- 載入cookie --> <script type="text/javascript" src="<{$xoops_url}>/modules/模組ID/js/cookie.js"></script> <script>var xoopsjsurl='<{$xoops_url}>';</script> //js部分 //建立一個cookie.js檔並放置以下內容 //判斷cookie是否啟用並寫入cookieid $(document).ready(function() {   if (typeof(getCookieByName('cookieid')) != 'undefined') return  //判斷指定cookie是否有建立,空值才執行以下程式   var dt = new Date();   dt.setSeconds(dt.getSeconds() + 60);   document.cookie = "cookietest=1; expires=" + dt.toGMTString(); //建立一個測試cookie   var cookiesEnabled = document.cookie.indexOf("...

PHP計算達成率公式寫法(四捨五入)-教學撰寫:徐嘉裕Neil hsu

分享一個PHP計算達成率公式寫法,效果可以計算出如下圖的達成率 達成率公式範例: 目標 = 100 實績 = 90 達成率 = 90 / 100 * 100% = 90% 套用PHP程式 : $target=100; //目標 $joined= 90; //實績 //達成率 $ratevar=(!empty($target) && !empty($joined) ) ? ($joined / $target * 100) : '0'; //判斷計算值是否為0 ECHO "達成率".round($ratevar,0)."%"; //使用round()四捨五入->輸出結果90% 有需要的朋友參考看看 工作心的撰寫: 徐嘉裕 Neil hsu

使用Ajax長輪詢跨頁資料查詢操作-教學撰寫:徐嘉裕Neil hsu

會使用到Ajax長輪詢功能也是意外,本來是想用JS跨域查詢,由A頁面查詢B頁面執行ajax程序後返回值做同步處理,結果經測試JS跨域查詢只能查到讀取頁面的原始資料,無法取得JS程序處理過後的變動數值,試了半天,只好用Ajax長輪詢來解決問題了,順便寫一個工作心得做為紀錄 Ajax長輪詢跨頁資料查的運作原理如下圖 以上圖解也就是使用Ajax長輪詢保持連線持續查詢資料庫,若有比對到資料則返回數值後以非同步方式更新內容,沒有就繼續查,保持連線狀態,舉一個Ajax長輪詢應用實例大家就清楚了,FB上貼文留言,即便未更新頁面,有其他用戶的的留言也會即時顯示在留言處,這就是使用了Ajax長輪詢的效果讓Ajax一直保持在 連線查詢返回更新 狀態,即時同步資料。 以下為Ajax長輪詢CODE 範例 //HTML結構 <div id='showbox'><span id='numberbox'> 30 </span></div> <script>ajaxlongpolling();</script> // 30 為固定值,透過JS取值後傳送到ajax.php比對資料 //JS結構-$.ajax function ajaxlongpolling() { $.ajax({ url: 'ajax.php', timeout: '80000', //ajax請求超時時間80秒 type: 'POST', data: { var1: $("#numberbox").text(), //取的#numberbox中數值 timedate: '80' //40秒後無論結果伺服器都返回數據 }, success: function(response) { var $response_arr = response.split(','); //切割陣列 //返回1->查詢到資料-重新讀取ajaxlongpolling(); if ...

Xoops->logcounterx流量統計模組系統分析增加Windows10設定-教學撰寫:徐嘉裕Neil hsu

logcounterx是日本人開發專門分析網站流量的Xoops模組,不過近幾年似乎沒有更新版本發佈,所以模組系統分析還停留在Windows7,好像是時光暫停了一樣!! 這樣就失去系統分析的意義了,既然沒人要維護只好自己加上Windows10的分析設定,分法如下: 1,找到以下檔案,用筆記本打開 ../../modules/logcounterx/include/functions.php 2、搜尋 Windows7 找到以下程式  if (preg_match('/Windows NT 6\.1/i', $agent) || preg_match('/WinNT 6\.1/i', $agent)) { return 'Windows7'; } 3.在搜尋Windows7程式下面再加上Windows10的程式碼 (紅字部分)  if (preg_match('/Windows NT 6\.1/i', $agent) || preg_match('/WinNT 6\.1/i', $agent)) { return ' Windows7 '; } if (preg_match('/Windows NT 10\.0/i', $agent) || preg_match('/Win64\.0/i', $agent)) { return 'Windows10'; } 存檔後,前往模組首頁系統分析就會顯示Windows10的數據了 這樣就完成logcounterx流量統計模組系統分析增加Windows10設定,有需要的朋友參考看看! 備註說明:logcounterx模組的log是紀錄user瀏覽器當日IP不做重複紀錄,所以如果修改好程式需要測試請用今日內尚未開啟網站的瀏覽器測試才會有數據(例如Edge已被紀錄就用Chrome測試) 工作心的撰寫: 徐嘉裕 Neil hsu