跳到主要內容

發表文章

目前顯示的是 2020的文章

關閉IE強制轉跳開啟Edge瀏覽器的方法!!-教學撰寫:徐嘉裕Neil hsu

之前好像不小心按到什麼使用Edge瀏覽器的設定,之後開啟IE都會強制轉跳到Edge瀏覽器,雖然Edge瀏覽器比較新但我還是習慣用IE阿~找了半天於找到關閉強制轉跳的方法!! 1、開啟Edge瀏覽器->點選右上角的 ... 按鈕->點選齒輪的設定 2、點選預設瀏覽器->在 Microsoft Edge 中以 Internet Explorer 開啟網站->設為【永不】 設定完之後再用IE開啟網頁就不會強制轉跳到Edge,有需要的朋友參考看看! 工作心得轉寫: 徐嘉裕 Neil hsi

PHP解決CK編輯器複製FB表情符號(emoji)寫入資料表出錯問題!!-教學撰寫:徐嘉裕Neil hsu

CK編輯器可以吧原始資料來源的HTML編碼也一起複製過來,像是我們要複製FB的一段貼文,可能就會有很多的emoji表情圖😄💔🐷🐹,但是這些表情圖寫入資料表時卻會發生錯誤!! Incorrect string value: ' \xF0\x9F\x91\xA9\xE2\x80 ...' for column `chestycedu`.`x03echestycedu_neilonlinevideocenter`.`description` at row 1 紅字那段就是發生錯誤的原因,因該是跟反斜線有關,上網估狗了一下找到一支不錯的function能解決這問題,CODE如下: //去除emoji表情符號字符反斜線 function sqlinjectionfilterEmoji($str){ $str = preg_replace_callback( '/./u', function (array $match) { return strlen($match[0]) >= 4 ? '' : $match[0]; }, $str); return $str; } 只需要在送出表單接收post寫入資料表的地方使用即可! sqlinjectionfilterEmoji($str=$_POST['text']); 去除反斜線後資料就能正常儲存,原本的emoji表情符號也會保留! 這樣問題就解決了,有需要的朋友參考看看!! 工作心得撰寫: 徐嘉裕 Neil hsu

使用jquery-ui.js的sortable做一個tabe拖曳排序功能-教學撰寫:徐嘉裕Neil hsu

現在很多網站排序都是採用拖曳式的,但拖曳也並非萬能,像是有分頁的資料或是有幾百筆以上的資料或是階層式資料用拖曳就很累了,還是用輸入排序編號比較方便,所以如果要用拖曳的排序最好是在20~30筆以內資料為佳,這裡分享一個使用jquery-ui.js的sortable做一個tabe拖曳排序功能方法如下: HTML結構部分 (紅字為拖曳需要增加的部分) <table class='table  sortable' > <thead> <tr> <th>標題1</th> <th>標題2</th> <th>標題3</th> </tr> </thead> <tbody> <tr class='tr' id='1' > <td>text1</td> <td>text1</td> <td>text1</td> </tr> <tr  class='tr'   id='2' > <td>text1</td> <td>text1</td> <td>text1</td> </tr> <tr  class='tr'  id='3' > <td>text1</td> <td>text1</td> <td>text1</td> </tr> </tbody> </table> //引入JS (如Xoops佈景已有引入則不需重複引入) <script src="http://tool.phpddt.com/resources/js/jquery-1.

PHP使用GD圖形來產生文字圖片作為驗證碼使用-教學撰寫:徐嘉裕Neil hsu

在防機器人填寫垃圾表單除了Google套件外,如果要自行開發,最好的還是使用圖片文字來做為驗證依據,這裡分享一個不錯的GD圖形產生文字圖片的function分享給大家 php-code 可以吧以下這段function放到模組的function.php中 //產生GD文字圖片 function fonttoimageGDfunction($width="",$height="",$x="",$y="",$font_size="",$word=""){ //$width 區塊寬度 //$height區塊高度 //$x內容的x位置 //$y內容的y位置 //$font_size文字大小1~5(最大值為5) //$word顯示圖片文字內容  $im = imagecreatetruecolor($width, $height); //製作白底黑字 $text_color =imagefilledrectangle($im, 0, 0, 300, 300, imagecolorallocate($im, 255, 255, 255)); // 設定 底色白色 imagestring($im, $font_size, $x, $y, $word, $text_color); ob_start();  //   打開輸出控制緩衝 imagepng($im); $output = base64_encode(ob_get_clean());  //取得當前內容並刪除緩衝 imagedestroy($im); return $output; } 然後再要使用圖形驗的的地方輸出function //產生圖片 $word="text.text" echo $robottimedateingbox='<img id="fonttoimageGDbox" src="data:image/png;base64,'.fonttoimageGDfunction($width="100",$heig

Xoops佈景升級jquery->jquery-3.5.1.min.js的方法-教學撰寫:徐嘉裕Neil hsu

Xoops佈景預設引入的jquery.js已經很老舊了,如果要引入最新的jquery-3.5.1.min.js則會與$xoops_module_header中預設jquery.js衝突,所以如果佈景要引入jquery-3.5.1.min.js必須做以下修改才行,移除Xoops預設的jquery.js。 1、在佈景樣板的<{$xoops_module_header}>標籤上方引入jquery-3.5.1.min.js,然後再引入jquery-migrate-3.3.0.min.js以便做舊版jquery.js的兼容,若沒引入jquery-migrate-3.3.0.min.js很多舊版的JS功能都會發生異常無法使用。 所以樣板程式就會是以下這樣 <{php}> global $xoopsTpl; //引入jquery-3.5.1.min.js $module_header.="<script src='".XOOPS_URL."/modules/neillibrary/js/jquery-3.5.1.min.js' type='text/javascript'></script>"; //引入jquery-migrate-3.3.0.min.js $module_header.="<script src='".XOOPS_URL."/modules/neillibrary/js/jquery-migrate-3.3.0.min.js' type='text/javascript'></script>"; echo $module_header; <{/php}> <!--module_header--> <{$xoops_module_header}> 2、再來解決$xoops_module_header重複引用jquery.js的問題,需要吧Xoops預設的jquery.js拿掉,還有tadtools中較舊版的jquery-migrate-3.0.0.min.js拿掉,這裡需要使用samty的replace功能,程式

css3物件垂直置中的方法-教學撰寫:徐嘉裕Neil hsu

CSS物件垂直置中如果是以前只能用table td屬性中的vertical-align: middle;來定義,後來有CSS3可以透過假表格( display:table-cell;)吧div指定為table屬性後使用vertical-align: middle;但我覺得還是非常不好用,這裡分享兩個css3物件垂直置中的方法讓大家參考一下! 例如我們要做像以下的標題樣式 如果文字多顯示兩行,文字少顯示一行,但都必須垂直置中。 HTML結構  <div id='titlebox' ><div><a  href="https://www.blogger.com/">標題文字標題文字標題文字標題文字標題文字標題文字</a></div></div>  <div id='titlebox' ><div><a  href="https://www.blogger.com/">標題文字標題文字</a></div></div> 方法1,使用transform來垂直置中 transform CSS 屬性可以讓你修改 CSS 可視化格式模型(visual formatting model)的空間維度。使用此屬性,元素可以被平移、旋轉、縮放和傾斜。 參考資料來源: https://developer.mozilla.org/zh-TW/docs/Web/CSS/transform #titlebox{ position: relative; height: 132px; background: #ffffff url(../../img/unit/) no-repeat left top; text-align: center; font-size: 200%; overflow: hidden; } #titlebox div{ position: relative; top:50%; transform:translateY(-50%); padding: 0px 20px; max-height:105px; overflow: hi

PhpSpreadsheet電子表格PHP匯出excel排版範例->Xoops-教學撰寫:徐嘉裕Neil hsu

在開發模組時如果要吧資料表內容匯出excel,最常用的套件因該就是PHPExcel,但是官網已經說明PHPExcel套件因升級不易只能支援到php5.6, 該物件已於2017年正式棄用,並於2019年永久歸檔 ,換句話說PHPExcel套件對於日後新版的excel格式均不支援,為保持程式在最新狀態只好棄用PHPExcel改使用PhpSpreadsheet電子表格套件,該套件也是能匯出excel,還能匯出LibreOffice Calc,感覺還不錯! 唯一比較麻煩的是使用PhpSpreadsheet要先佈署composer,如果沒佈署composer是沒辦法使用的,還好官方有釋出已經設定好的phpoffice套件可以直接引入使用,省了很多麻煩,使用PhpSpreadsheet方法如下: 1、先下載PhpSpreadsheet套件,我已經幫大家吧phpoffice一起打包上傳 https://drive.google.com/file/d/1jw73diWVjbcr1ycY-gtqM2cGfpLp1zS_/view?usp=sharing 下載回來後解壓縮吧phpoffice跟PhpSpreadsheet丟到Xoops模組的class資料夾中,未來如需更新PhpSpreadsheet可到官網下載最新版覆蓋即可 https://github.com/PHPOffice/PhpSpreadsheet 2、然後建立一個excel.php放在模組根目錄中 以下為編排excel表格常用的函數設定 include_once "header.php"; //先引入autoload.php檔 include_once XOOPS_ROOT_PATH.'/modules/ 模組ID /class/phpoffice/vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\IOFactory; $spreadsheet = new Spreadsheet(); //實體化Excel工作表 //設置電子表格元數據的操作: $spreadsheet->getProperties() ->setCreator

解決/opt/lampp/bin/mysql.server: 264: kill: No such process-無法啟用mysql的方法(CentOS)-教學撰寫:徐嘉裕Neil hsu

今天客戶突然告知學校的網站無法連線,我去看了一下LAMPP是啟用的,但MYSQL無法啟動,會顯示 /opt/lampp/bin/mysql.server: 264: kill: No such process 客戶說前幾天有跳電伺服器沒正常關機,按照經驗法則大概又是err在作怪,先輸入指令查一下客戶伺服器容量  df -l   結果如下圖   可以看到root 容量已到100%,然後問題又是mysql無法啟用,那就來找一下mysql的log資料夾看問題出在哪? /opt/lampp/var/mysql/ xxxxx. err 如果有發現紅字的 .err 檔案就是導致系統容量100%及MYSQL無法初始化的元凶,吧.err刪除後重啟LAMPP就能恢復正常了。 刪除err後再看一下容量,root 容量變為17% 重新啟動xampp,輸入指令: /opt/lampp/xampp restart 這樣MYSQL就恢復正常運作了,不過err還是需要處理不然很快root又要100%,可以先用root權限看一下.err裡面是哪些錯誤資訊,如果是 2021-04-12 8:33:48 13 [ERROR] Incorrect definition of table mysql.column_stats: expected column 'max_value' at position 4 to have type varbinary(255), found type varchar(255). 我有寫一篇解決的方法可以參考看看 https://neohsuxoops.blogspot.com/2021/04/centosxamppmariadberr-error-incorrect.html 有需要的朋友參考看看。 工作心的撰寫: 徐嘉裕 Neil hsu

禁止返回上一頁JS程式(Firefox.IE.Chrome.Edge都兼容)-教學撰寫:徐嘉裕Neil hsu

在開發模組表單有時候會需要製作表單的填寫步驟,例如購物流程,問卷報名表之類的,每個流程都會儲存該流程的資料內容到程序完成,但如果USRE點了瀏覽器的返回上一頁可能會導致流程不完整或是程序出錯(例如金流串接等),所以必要時候選禁止瀏覽器返回上一頁是很重要的。 G大神有很多JS禁止返回上一頁JS程式分享,但有的Firefox有效Chrome又無效,不然就是ie無效實在很頭痛,經過測試寫了一個能兼容4種瀏覽器的function分享給大家,程式說明如下。 首先要使用JS的window.history.forward()來做操控瀏覽器歷史紀錄的功能! 作用機制如下圖 必須吧禁止返回上一頁JS程式放在A網頁,然後當表單送出進入B網頁時,B網頁就會產生禁止返回A網頁的效果 (若吧程式放置在B網頁是無效果的) 。 //JS-CODE->放置在JS程式裡面 //禁止返回上一頁 function prohibitpreviouspage(){ if(navigator.userAgent.indexOf('Firefox') != -1 && parseFloat(navigator.userAgent.substring(navigator.userAgent.indexOf('Firefox') + 8)) >= 3.6 ){ //Firefox setTimeout("fn_forward()",1); window.history.go(1); }else{ //IE.Chrome.Edge window.history.forward(); } } function fn_forward() { history.forward(); setTimeout("fn_forward()",1); } 然後再A網頁引入禁止返回上一頁JS程式 <script type="text/javascript" src="js/customize.js"></script> <script type="text/javascript">prohibitpreviouspage();</scr

Xoops做一個php下載多檔打包壓縮成ZIP格式方法-教學撰寫:徐嘉裕Neil hsu

2021-11-15補充說明,由於PHP8.0對於new ZipArchive的寫法有改變,以下方法無法於PHP8.0中使用,如需使用PHP8.0開發Xoops模組zip下載功能的請參考這篇工作心得 Xoops做一個php8.0下載多檔打包壓縮成ZIP格式方法 之前寫過一個【 Xoops做一個php下載檔案自動壓縮成ZIP格式方法 】的工作心得,但那方法只能做單一檔案的ZIP下載打包,如果是多檔下載全部打包成一個ZIP檔,則需要修改一下程式才行,做成一個function方便使用,CODE如下。 //ZIP多檔打包下載 先做一個function丟到模組的function.php中方便重複使用 function  zipArchivefunction($url="",$zipname="",$temp="){ //$url 檔案原始路徑+檔名(陣列格式) //$zipname    zip檔案名稱 //$temp    檔案暫存路徑+檔名 $zip = new ZipArchive;   $zip->open($temp, ZipArchive::CREATE); //$url檔案路徑迴圈加入zip中 foreach ($url as $file) { $new_filename = substr($file, strrpos($file, '/') + 1);  //重新定義壓縮檔路徑 $zip->addFile($file, $new_filename); } $zip->close(); /********使用header命令php下載zip檔************/ header('Content-Type: application/zip'); //指定類型 header("Content-type: ".filetype("$temp")); //指定下載時的檔名 header("Content-Disposition: attachment; filename=".$zipname.""); //輸出下載的內容。 readfile($temp); unlink($temp);

用一層foreach解$_FILES['file']陣列(多檔上傳)存入資料表的方法->Xoops-教學撰寫:徐嘉裕Neil hsu

$_FILES['file']本身就是一個陣列,其底下包含了 $_FILES["file"]["name"]:上傳檔案的原始名稱。 $_FILES["file"]["type"]:上傳的檔案類型。 $_FILES["file"]["size"]:上傳的檔案原始大小。 $_FILES["file"]["tmp_name"]:上傳檔案後的暫存資料夾位置。 $_FILES["file"]["error"]:如果檔案上傳有錯誤,可以顯示錯誤代碼。 共有五個key值組成的,如果是單一檔案上傳用foreach可以解出陣列中的五個參數值,也就是上傳檔案的基本參數。 如果是多檔上傳,那$_FILES['file']就會是陣列格式,用一層foreach是解不出來的,因為第一層只會解出$_FILES['file']的五個屬性值但仍為陣列型態,還要再用第二層foreach去解每個屬性的參數值,不過有個更簡單的方法用一層foreach就能解出來了,方法如下: //html <input type='file' class=' form-control' multiple name='file[]' id='file' > //php //建立檔案 if(!empty($_FILES['file']['name'][0])){  foreach($_FILES['file']['name'] as $key=> $val){  //以$_FILES['file']['name']來開啟迴圈,如果上傳三個檔案就會迴圈三次 $_FILES["file"]["name"][$key]: //可以得到上傳檔案的原始名稱迴圈值。 $_FILES["file"]["type"][$key]: //可以得到上

解決mouseenter及mouseleave執行物件動畫未完成又重複觸發的問題-教學撰寫:徐嘉裕Neil hsu

如果要用jQuery的mouseenter(滑鼠滑入)及mouseleave(滑鼠滑出)來執行物件動畫,會遇到一個問題,假使mouseenter時物件因該要跑到left:80px的位置才算動畫完成,mouseenter則回到left:0px的位置,但在動畫未執行完成user又快速的在執行區塊滑入滑出,就會變成動畫亂跳的情況!! 舉例來說,像下面這張圖三個物件是尚未mouseenter觸發前的狀態 滑鼠滑入其中一個按鈕會觸發mouseenter動畫事件,物件往左上移動 滑鼠滑出執行區會觸發mouseleave動畫事件,物件往右下移動,返回原本位置 js-code應該是這樣 //mouseenter $("body").on("mouseenter", "#indexblocksbox01", function (){ $(this).css("cursor", "pointer"); $(this).css({"animation-name":"indexbox1","animation-duration":"0.4s","left":"160px","top":"53px"}); $("#title01btn").css({"animation-name":"indexbox2","animation-duration":"0.4s","background-color":"#FFFFFF","color":"#E77C00"}); }) //mouseleave $("body").on("mouseleave", " #indexblocksbox01", function (){ $(this).css("cursor", "

php遞迴刪除資料夾及資料夾內容function->Xoops-教學撰寫:徐嘉裕Neil hsu

如果用PHP函數刪除目錄若目錄中有檔案,則會刪除失敗,使用rmdir()也只能刪空目錄,有資料的目錄是無法刪除,所以必須要先用程式吧目錄內的檔案全部刪除,最後再刪除目錄,這裡分享一個好用的遞迴刪除目錄及目錄內容的function,另外還加上了若刪除失敗則更改目錄檔名的function,兩個一起使用就沒問題了,CODE如下: 1、吧以下兩個function貼到Xoops模組的function.php裡面 //變更資料夾檔名 function changedirectory($changedate) { $date=date("Ymd"); if(!empty(rename($changedate, $changedate."_bak_{$date}"))) return true; } //刪除目錄包含內容物件 function fileunlink_r($from) { if (!file_exists($from)) {return false;} $dir = opendir($from); while (false !== ($file = readdir($dir))) { if ($file == '.' OR $file == '..') {continue;} if (is_dir($from . DIRECTORY_SEPARATOR . $file)) { fileunlink_r($from . DIRECTORY_SEPARATOR . $file); } else { unlink($from . DIRECTORY_SEPARATOR . $file); } } if(!empty(rmdir($from))) $returnvar=true; closedir($dir); return $returnvar; } 2、在執行刪除的php上引入這兩支php函式 //刪除資料夾及底下資料($from為刪除檔案目錄的實體路徑) $Filevar=fileunlink_r($

升級upload 0.34的方法class.upload.php-教學撰寫:徐嘉裕Neil hsu

class.upload.php是一套超好用的PHP上傳檔案套件程式,能上傳圖檔及檔案,也能多檔上傳,本次心得記錄主要以舊版的class.upload.php升級到class.upload.php0.34版的修改紀錄為主,若要查詢class.upload.php如何使用可以去Google一下有很多教學喔! 首先去verot官網下載class.upload.php套件回來,選擇最新的0.34版 網址: https://www.verot.net/home.htm 下載回來後解壓縮,吧class.upload.php-master\class.upload.php-master\ src   <- 資料夾裡面的 ->class.upload.php ->lang 複製起來,貼到您網站或模組原本放置class.upload.php檔案的目錄位置覆蓋舊檔 然後在網站或模組找到引入class.upload.php程式上傳檔案function的地方(上傳參數設定那),裡面有一個類別為 $pic = new Upload($_FILES['upfile'], 'zh_TW'); 全部替換為 $pic = new \Verot\Upload\Upload($_FILES['upfile']); 這樣就完成upload 0.34的升級了,經測試原本中文檔名會上傳失敗的問題在upload 0.34都排除了,而且支援php7.3,真的非常好用,有需要的朋友參考看看! 工作心得撰寫: 徐嘉裕 Neil hsu

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

原本預計本次更新要翻新neilambilight佈景的前端介面,包括視差設計滾動設計等,但發現neothemesadmin模組仍有許多功能需要強化及升級,否則光改介面也沒什麼意義,所以本次發佈的neilambilight2.92仍以功能優化擴充與升級為主,包括表單防機器人AJAX機制做了強化處理(能100%阻絕機器人垃圾留言),PHP版本升級到PHP7.3.15,資料庫兼容升級到10.4.8-MariaDB嚴格模式,另外新增加了布景主選單及區塊選單的群組權限顯示功能(包含底層所有選單),以及對xlanguage多國語言模組兼容化工作,新增加一個關於我們圖文區塊,針對電腦版及手機版CSS及JS功能做優化調整處理,neilambilight2.92可以在最新版的Xoops2.5.10運行,也能兼容到Xoops2.5.8,包括tad最新釋出的模組全部都有做兼容測試,符合各種環境與不同版本的運行需求,歡迎下載安裝使用。 Xoops免費佈景-Neil佈景測試站 http://demoweb.neodw.com/themesdemo/ neilambilight2.92 更新內容 ============================== 1、修正neothemesadmin佈景管理模組PHP常數重複問題。 2、修正neothemesadmin佈景管理模組跑馬燈左右移動無法正常顯示問題。 3、修正neillibrary函數庫模組XOOPS_LICENSE_KEY定義錯誤問題。 4、會員註冊表單增加【AJAX選擇時間驗證】防機器人功能,可阻斷100%的機器人表單註冊。 5、neillibrary函數庫模組新增加刪除IP紀錄及封鎖天數自動化功能。 6、聯絡我們表單增加【AJAX選擇時間驗證】防機器人功能,可阻斷100%的機器人表單註冊。 7、聯絡我們區塊表單增加【AJAX選擇時間驗證】防機器人功能,可阻斷100%的機器人表單註冊。 8、修改資料表語法兼容10.4.8-MariaDB嚴格模式。 9、PHP7.3.15兼容升級。 10、onUpdate.php新增資料表增加10.4.8-MariaDB嚴格模式。 11、區塊選單管理後臺套用網站選單的階層樣式跟開啟效果。 12、優化佈景管理模組->網站選單跟區塊選單UI介面。 13、修改隨機小語ICON貼入格式。 14、neoth

JQuery Tabs Generator頁籤修改範例(PHP端及JS優化修改)-教學撰寫:徐嘉裕Neil hsu

JQuery Tabs Generator是一個好用的頁籤生成器,輸入內容就能產生頁籤,大家可以點以下的網址自己試看看 https://www.html-code-generator.com/jquery/tabs-generator.php 不過如果要修改成用PHP迴圈輸出smarty樣板就還需要再做些修改,才能靈活實用美觀大方,像是下面這樣: 修改過後頁籤可隨資料自動增加跟刪減,如果只有一個頁籤也能正常顯示內容 以下為修改過的全部程式codo範例 php端-code $descriptionArr = array(); //建構陣列 $i=0; $descriptionArr[$i]['btntext']=_MD_SHOPWCASE20;  //按鈕文字 $descriptionArr[$i]['btncenter']=$productlimt['description'];  //頁籤內容 $descriptionArr[$i]['i']=$i;  //頁籤id $i++; $descriptionArr[$i]['btntext']=_MD_SHOPWCASE22;  //按鈕文字 $descriptionArr[$i]['btncenter']=$productlimt['specification'];  //頁籤內容 $descriptionArr[$i]['i']=$i;  //頁籤id $i++; $descriptionArr[$i]['btntext']=_MD_SHOPWCASE23;  //按鈕文字 $descriptionArr[$i]['btncenter']=$productlimt['productwarranty'];  //頁籤內容 $descriptionArr[$i]['i']=$i;  //頁籤id $shopwcase['descriptionbox']=$descriptionArr; 輸出smar

Xoops模組開發->使用xlanguage3.1RC多國語言模組配合的程式修改-教學撰寫:徐嘉裕Neil hsu

xlanguage是一套可以切換Xoops語言的模組,也能透過語言標籤來切換語言內容,以達成網站多國語言的目的,xlanguage3.1RC可以完全兼容Xoops2.5.10,而且也已經被Xoops官網收錄於官方模組中,直接安裝起來用能使用了,我已經吧xlanguage模組中文化完成了,有需要的朋友可以點以下連結下載。 xlanguage3.1RC中文化下載 https://drive.google.com/file/d/1Wz8tcHLE-xtM8vwa0_NfVAyH8Xjewwv2/view?usp=sharing 雖然說安裝起來並設定好語言開啟區塊就能使用 但經過實際測試,還是有很多問題需要在其他模組寫程式套件來配合運作,才能達到100%完美應用,否則使用上還是很多不便利的地方,以下為修改模組紀錄彙整。 1、xlanguage的語言切換作用機制主要有兩段,一部分是吧user選擇的語言儲存到setcookie裡面在讀取對應的模組語言包,這部分可以切換UI的語言,另一部分則是資料字段的轉換,例如 [tw]這是中文標題[/tw][en]This is the Chinese title[/en] 所以如果選擇中文顯示 [tw]這是中文標題[/tw] 中字段,選擇英文則顯示 [en]This is the Chinese title[/en] ,語言標籤會被去掉,但這作用並不是在sql資料導出時做字段判斷,而是用伺服器頂層的Java吧所有PHP輸出的變數都掃過一次比對後擷取語言標籤內容,好處是不用在模組資料輸出去做字串擷取所有的模組都能使用,但會產生一個問題,如果不是輸出頁面的變數,像是幕後傳參寄發E-mail,就無法做語言判斷,反而會吧全部字串都給輸出,像是這樣 收到通知信的人大概也一頭霧水吧,什麼碗糕?解決辦法就是另外寫一個資料轉換function給幕後讀取資料時使用,code如下: ◎吧xlanguagePlugin()放到function.php裡面 //取得指定模組module資料表值 function modulesmidvar($modulesid="",$var=""){ $modulevar=empty($var) ? 'mid' :

masonry+imagesloaded+AJAX瀑布流套件整合用法-教學撰寫:徐嘉裕Neil hsu

之前寫過一篇【Bootstrap3瀑布流排版用JS套件-Masonry-教學】 https://neohsuxoops.blogspot.com/2019/08/bootstrap3js-masonry.html 不過這方法只能用在已讀出的資料樣板排版上,例如PHP讀出50筆,然後可以用這個方法來做瀑布流排版,但如果要應用在AJAX上則需要再做修改才能應用。 例如像 pinterest 網站,預設資料只出現幾筆,然後瀏覽器卷軸到底之後又會出現資料,一直循環開啟到資料全部讀完,以AJAX非同步方式求取資料的瀑布流效果。 AJAX結構跟運作原理就不多說了,這裡直接是masonry套件+imagesloaded套件在AJAX中的應用方式,CODE如下。 1、先在樣板裡面引入三支檔 <script src="http://desandro.github.io/imagesloaded/imagesloaded.pkgd.min.js"></script> <script src="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.min.js"></script> <script src="js/masonryajaxjs.js"></script> //此為呼叫AJAX的JS檔需自行建立 2、在樣板上貼上以下的function,放在三個引入檔的下方 <script> function masonryfunction(){ $('.masonry').imagesLoaded(function() { var msnry = new Masonry(".masonry",{  itemSelector: '.item', columnWidth: <{$enshow.columnWidth}>,   //單個物件寬度 gutter: <{$enshow.gutter}>,   //物件邊距 isFitWidth: true

寫一個PHP同條件查詢刪除多個資料表內容的批次刪除function-教學撰寫:徐嘉裕Neil hsu

假設一共有四個資料表有關聯資料,其中一個為主表資料刪除同時連同另外三個資料表中的資料也一起刪除,如果按正常的寫法是 寫一個單獨刪除主表欄位的SQL語法 再寫三個刪除關聯資料的foreach抓出資料後迴圈刪除SQL語法 這樣程式又變得很龐大,所以寫了一個批次刪除的function一次就能吧相同查詢條件的資料全部刪除,這樣程式也精簡很多看了也舒服。 方法如下 1、先在function.php中加上以下的function //引入共用函數 include_once XOOPS_ROOT_PATH."/modules/neillibrary/function.php"; //批次刪除function function deleteArr($Arrdate=""){ foreach($Arrdate as $key=> $val){ $dbneme=$Arrdate[$key]['dbneme']; $where=$Arrdate[$key]['where']; $deleteArr=databasetablewhile($dbneme,$where); foreach($deleteArr as $k=> $val){ $where=" where `".$Arrdate[$key]['id']."` = '".$deleteArr[$k][$Arrdate[$key]['id']]."'"; $DBname=$Arrdate[$key]['dbneme']; deletefunction($where,$DBname); } } } 2、然後在要刪除資料的PHP用陣列輸入刪除的查詢項目 $Arrdate = array(); //建構陣列  //相同where查詢欄位 $whereDB=" where `basid` = '$dbid'"; //刪英資單位 $i=0; $Arrdate[$i]['dbneme']="

CentOS7啟用ssh的設定方法-教學撰寫:徐嘉裕Neil hsu

安裝好CentOS7後可以在圖形化介面中點選右鍵->開啟服務器修改設定後啟用SSH設定,方法如下: 1、先安裝openssh套件 sudo yum install openssh* 2、用 gedit 開啟sshd_config編輯 (不要用vi很難編輯的) sudo gedit /etc/ssh/sshd_config 3、增加可連線SSH帳號 AllowUsers admin (此欄位需要自行新增) 4、修改PORT吧 # 註解拿掉 (可以改成8022PORT或其他PORT都可以) Port 22 搜尋PermitRootLogin吧 # 註解拿掉 PermitRootLogin no 再來把這兩行的 # 註解拿掉 PermitEmptyPasswords no PasswordAuthentication yes 搜尋Protocol設定使用SSHv2連線 Protocol 2 sudo systemctl restart sshd.service    重新啟動service sudo systemctl enable sshd.service    設定開機啟動SSH sudo semanage port -a -t ssh_port_t -p tcp 22      防火牆允許22 PORT 或 sudo firewall-cmd --permanent --zone=public --add-port=22/tcp 重新載入防火牆設定 sudo firewall-cmd --reload sudo  netstat -ant | grep :22 查看 22PORT 查詢現在SELinux設定清單中的SSH服務有哪些Port sudo semanage port -l | grep ssh ssh_port_t tcp 8022, 22 怎麼測試? 格式:登入帳號@IP或主機名稱 指令:-p SSH服務Port號 sudo ssh -p 22 admin@192.168.1.100 如設定的Port在清單中 ,那就表示SSH設定完成防火牆也開啟列外了,之後再用遠端的PuTTY輸入 IP/Port 連線,然後輸入 帳號/密碼,就能用SSH連線進入主機了, 在透

解決CentOS Linux release 8.1.1911 安裝LAMPP缺少32 bit compatibility library套件而無法啟用問題!-教學撰寫:徐嘉裕Neil hsu

CentOS Linux release 8.1.1911是運行64位元,如安裝Lampp最新版xampp-linux-x64-7.3.14-0雖然也是64 Bit,但安裝套件還是32位元的,如果CentOS在安裝時沒有安裝32 bit compatibility library套件啟用lampp就會顯示 XAMPP is currently only availably as 32 bit application. Please use a 32 bit compatibility library for your system. 而無法啟用lampp,解決方法就是安裝64位元套件包 解決方案1 解決方法就是安裝CentOS 的glibc* libstd* ld-linux.so.2的套件包 輸入以下指令 1. 安裝glibc* libstd* ld-linux.so.2 yum -y install glibc* libstd* ld-linux.so.2 2. 啟動lampp /opt/lampp/lampp start 經過實際測試原本無法啟動的lampp在安裝glibc* libstd* ld-linux.so.2之後就能正常啟動了 Starting XAMPP for Linux 7.3.14-0... XAMPP: Starting Apache...ok. XAMPP: Starting MySQL...ok. XAMPP: Starting ProFTPD...ok. 參考資料來源: http://lekshmideepu.blogspot.com/2013/04/xampp-is-currently-only-available-as-32.html 解決方案2 若方案1仍無法啟用LAMPP,可以改用以下的方法來處理 1、安裝libnsl套件  yum install libnsl 2、找到以下檔案,下載回本地端後用筆記本打開編輯 /opt/lampp/lampp 搜尋以下語句 XAMPP is currently 32 bit only 然後吧整段程式前面加上#號注解掉   # XAMPP is currently 32 bit only # case `uname -m` in # *_64) #

線上影音模組->FB自動重建縮圖程式-工作心得撰寫:徐嘉裕Neil hsu

2019年9月開發的線上影音模組,其中有一項功能是用爬蟲去爬FB影片擷取縮圖後儲存資料表的功能  https://neohsuxoops.blogspot.com/2019/09/ajaxphpjsfacebook.html 但最近發現許多原本擷取的FB縮圖都無法讀取了,圖片位置顯示URL signature expired,原來FB影片縮圖也是有時效性的,一段時間fb就會重建縮圖檔,檔名跟時間搓都會變動,難怪一開始擷取的FB縮圖都會變成無法顯示! 解決方法就是寫一個FB自動重建縮圖程式,放在影片區塊程式的前面,然後迴圈檢查FB縮圖如果回傳是URL signature expired則重建縮圖,否則不做操作,這樣並不會消耗系統太多效能,方法如下: 1、先在模組的function.php裡面加上這三個function //重建縮圖程式 function fbtmburlfunction(,$url="",$tmburl="",$where="",$dbname=""){ $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_URL, "".$tmburl.""); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_HTTPHEADER, array ('X-Forwarded-For: '.mt_rand(0, 255).'.'.mt_rand(0, 255).'.'.mt_rand(0, 255).'.'.mt_rand(0, 255),)); curl_setopt($ch, CURLOPT_USERAGENT, "Google Bot"); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT

使用ck編輯器的elfinder上傳貼圖的操作方法-教學撰寫:徐嘉裕Neil hsu

ck編輯器上傳圖片功能已經吧elfinder圖片上傳套件整合了,所以上傳圖片到內文中不要使用上傳功能,改使用影像資訊來上傳圖片,操作說明如下: 1、點選CK編輯器的圖像按鈕 2、影像資訊->點選瀏覽伺服器按鈕 3、開啟elfinder管理介面->選擇左邊要放圖檔的資料夾->點選上傳檔案按鈕 4、點選->選擇要上傳的檔案(或吧檔案拖曳到此框中) 5、開啟檔案選擇框,選擇本地端要上傳的圖檔 6、找到上傳成功的圖檔->滑鼠左鍵點擊兩下 7、設定圖檔參數後送出 8、編輯或調整內容後->送出儲存即可 9、這樣就能吧圖片貼到內中了 操作教學撰寫: 徐嘉裕 Neil hsu