跳到主要內容

發表文章

目前顯示的是 2019的文章

解決Xoops清除暫存檔後樣板$xoops_module_header不會產生jquery.js的方法!-教學撰寫:徐嘉裕Neil hsu

用過Xoops的朋友應該都有遇過這問題,就是會員登入後如果吧暫存樣板檔清除或重新產生暫存樣板檔,佈景樣板的<{$xoops_module_header}>並不會引入jquery.js,除非開啟的區塊中本身有引入jquery.js,這將導致佈景有用到jQuery特效的套件都會失效,所以我們需另外寫一支程式來補強這部分的問題,方法如下。 1、在佈景檔樣板檔中找到<{$xoops_module_header}>變數,因為每個佈景開發者的樣板檔名跟配置都不一樣,所以建議就一個一個檔去搜尋,一定會有的。 2、在<{$xoops_module_header}>前面加上以下的code <!--module_header--> <{php}> if(!preg_match("/jquery.js/i", $this->_tpl_vars['xoops_module_header'])) { $module_header="<script src='".XOOPS_URL." /modules/neillibrary/js/jquery.js ' type='text/javascript'></script>"; } if(!preg_match("/jquery.ui.js/i", $this->_tpl_vars['xoops_module_header'])) { $module_header.="<script src='".XOOPS_URL."/browse.php?Frameworks/jquery/plugins/jquery.ui.js' type='text/javascript'></script>"; } echo $module_header; <{/php}> <{$xoops_module_header}> //紅字為讀取預設jquery.js路徑,可以修改為

修改CentOS7->Xampp->MariaDB->sql_mode的方法(資料庫模式修改)-教學撰寫:徐嘉裕Neil hsu

之前寫過一篇修改本地端Windows架設xampp的sql_mode嚴格模式設定方法,有需要的朋友可以參考看看! https://neohsuxoops.blogspot.com/2019/12/1048-mariadb-sqlfor-windows.html 現在的問題是本地端Windows架設的xampp跟CentOS7架設的Lampp的sql_mode完全不一樣! 本地端(Windows) sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION 伺服器端(CentOS7) sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 當然如果以模組開發者的角度是採用更為嚴謹的資料庫模式設定,也就是伺服器端的資料庫模式來開發Xoops模組,所以我們開發的Xoops模組基本上這兩種模式都能運行! 但問題來了,Xoops還是有許多不錯的免費模組可以安裝,而且客戶也會自行安裝不是我們開發的模組,假設客戶端的sql_mode為超嚴謹模式,那這些模組都無法使用,會產生客戶管理網站的困擾,解決方法只能修改客戶端sql_mode改為較為寬鬆的 sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION 設定,這樣不管是我們開發的模組,還是客戶自己去安裝的模組就都能正常運作了, 修改CentOS7->Xampp->MariaDB->sql_mode的方法如下: 1、找到以下目錄,用筆記本打開 /opt/lampp/etc/my.cnf 2、找到[mysqld],在參數最下面加上 sql_mode = NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION ※預設是沒有sql_mode [mysqld] user=mysql port=3306 socket =/opt/lampp/var/mysql/mysql.sock key_buffer=16M max_allowed_packet=

10.4.8-MariaDB->SQL嚴格模式設定方法(for-windows)-教學撰寫:徐嘉裕Neil hsu

說起來也奇怪至今仍不解哪出問題了?本地端跟客戶端同樣都是安裝XAMPP-7.3.11版,但客戶端的sql_mode設定卻和本地端不相同,導致許多模組本地端是正常的但上傳到客戶端後都無法使用,資料存取出錯或無法寫入,經過檢查發現XAMPP的windows版本跟CentOS版本my.ini配置是不一樣的! 先來看一下my.ini設定->windows版 sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,NO_ENGINE_SUBSTITUTION 資料庫設定是使用 NO_ZERO_IN_DATE NO_ZERO_DATE NO_ENGINE_SUBSTITUTION 再來看CentOS->my.ini設定 sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 資料庫設定是使用 STRICT_TRANS_TABLES ERROR_FOR_DIVISION_BY_ZERO NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION 差別在時間格式及預設值部分,為了讓本地端跟客戶端的設定一致,所以修改本地端的my.ini吧sql_mode替換為以下的設定值 sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 重新啟用MYSQL後再SQL輸入 SELECT @@GLOBAL.sql_mode看設定是否有生效! 如果顯示設定值跟my.ini中設定一樣就可以了,關於資料庫sql_mode常用值說明可以參考這個網站 http://xstarcd.github.io/wiki/MySQL/MySQL-sql-mode.html 先讓本地端跟客戶端設定一致,然後才來調整SQL語法,才能做升級工作喔!! 教學心得撰寫: 徐嘉裕 Neil hsu

使用htaccess進行網站轉址的方法-教學撰寫:徐嘉裕Neil hsu

分享一些常用的.htaccess網站轉址方法!有需要的朋友參考看看! //網址轉換 RewriteEngine on RewriteCond %{HTTP_HOST} ^123.88.88.666$ [NC] RewriteRule ^(.*)$ http://www.blogger.com [R=301,L] 這樣可以吧網站的IP:123.88.88.666轉換成http://www.blogger.com但不包含所帶變數及路徑 //網址轉換包含路徑檔名變數 RewriteEngine on RewriteCond %{HTTP_HOST} ^123.88.88.666$ [NC] RewriteRule ^(.*)$ http://www.blogger.com%{REQUEST_URI} [L,R=301] 這樣可以吧網站的IP:123.88.88.666轉換成http://www.blogger.com包含路徑檔名及變數 例如: http://123.88.88.666/index.php?id=123 轉換後   http://www.blogger.com/index.php?id=123 //HTTP轉HTTPS包含路徑檔名變數 RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 自動吧網站的http轉換為https包含路徑檔名及變數 把需要轉址的code貼到伺服器根目錄中的.htaccess文件裡面在重啟apache即可套用新設定 教學心得撰寫: 徐嘉裕 Neil hsu

jQuery變更結構中id名和class名的方法-教學撰寫:徐嘉裕Neil hsu

使用attr()函數可以變更網頁結構中的id名和class名,達到css樣式或是js功能切換的目的,方法如下! //HTML結構 <div id='boxid1'  class='boxclass1'>內文內文........</div> //更換Id名稱 $("#boxid1").attr('id','boxid2'); 這樣結構中的id由原本的boxid1更換為boxid2 //更換Class名稱 $(".boxclass1").attr('class','boxclass2'); 這樣結構中的class由原本的boxclass1更換為boxclass2 有需要的朋友參考看看 心得教學撰寫: 徐嘉裕 neil hsu

擷取臺中市教育局校園活動新聞的PHP程式,可用於Xoops自訂區塊中-教學撰寫:徐嘉裕Neil hsu

首先要先感謝台中市 喀哩國小 資訊老師提供的原始程式碼,這樣讓我節省很多時間,不用再去開發網頁爬蟲程式,這裡就按照原始程式碼修改為兩個樣式!直接可以顯示臺中市教育局校園活動新聞內容 首先區要知道所屬學校的網址,這樣程式才能去爬行撈資料,查詢學校網址的方法如下: 1、先進入臺中市校園活動新聞首頁 http://www.tc.edu.tw/SchoolNews/show 2、找到右下角的學校發表排行區塊 3、找到自己學校點進去,上面的網址就是該學校活動新聞網址,之後的程式需要貼入 樣式一:區塊輪播樣式 //PHP程式碼 echo "<script type='text/javascript' src='http://www.tc.edu.tw/js/jquery-1.6.4.min.js'></script> <script type='text/javascript' src='http://www.tc.edu.tw/js/plugins/jquery.cycle.all.min.js'></script> <script type='text/javascript'> $('#school_news').cycle({         fx:     'turnDown',         delay:  -2000,         speed:  2500 ,         timeout:  5000 ,         pause:1    }); </script> $show_num=1; //顯示幾則新聞,大於1則會有輪播效果 //取得新聞 $url = "http://www.tc.edu.tw/SchoolNews/show/school/id/546";  //貼上校園活動新聞網址 $contents = addslashes(file_get_contents($url)); $contents = str_replace (ad

仿CSS的nth-child功能用PHP做一個用迴圈數帶出固定1.2.3的數值重複function-教學撰寫:徐嘉裕Neil hsu

CSS的nth-child其實是很好用的,但唯一的限制是指定的物件必須為相連,而且無法對子物件做樣式設定,例如以下結構就無法用nth-child來定義.thumbnail的樣式! <ul class="row"> <li class="col-md-4"> <div class="thumbnail"><img>......略</div> </li> <li class="col-md-4"> <div class="thumbnail"><img>......略</div> </li> <li class="col-md-4"> <div class="thumbnail"><img>......略</div> </li> </ul> 物件必須相連,nth-child是用物件的順序來定義樣式的,如果要做以下的效果固定迴圈3個區塊3種樣式用nth-child是無法實現的!! 當然是還有解決方法,Xoops是使用smarty樣板引擎,在foreach裡面用<{cycle values="box01,box02,box03"}>來定義class也是可以,但如果有做了AJAX的分類切換功能,那被切換的頁面是讀ajax.php,所以smarty的cycle又不能用了,無法兼顧。 最終的解決辦法還是要靠PHP,利用迴圈吧固定1.2.3的倍數整除後回傳數值,然後再輸出到樣板或直接輸出PHP上,這樣就沒問題了!寫了一個自動分3區塊樣式的function有需要的朋友參考看看! //PHP-CODE function blocksclassbox($key="",$i="",$type="",$prefix=""){ $nthchilds="

JQuery使用each迴圈取得核取方塊陣列數值的方法(選取及取消)-教學撰寫:徐嘉裕Neil hsu

核取方塊陣列就是由很多個核取方塊所組件起來的,形成一個陣列型態,所以如果要取值就不能用個別取值的方法,必須要使用each迴圈來判斷哪些方塊目前是checked狀態,哪些是未checked狀態,可以用以下的方法。 例如像下面這樣的核取方塊陣列要取值! html結構 <label class=' checkbox-inline checkboxeach'><input id='checkbox' checked='checked' type='checkbox' name='options[3][]' value='1'>學生活動</label> <label class=' checkbox-inline checkboxeach'><input id='checkbox' checked='checked' type='checkbox' name='options[3][]' value='3'>教師活動</label> <label class=' checkbox-inline checkboxeach'><input id='checkbox' checked='checked' type='checkbox' name='options[3][]' value='47'>教師文康活動</label> <label class=' checkbox-inline checkboxeach'><input id='checkbox' checked='checked' type='checkbox' name='options[3][]' value='48'>進修與研討</label

分享PHP常用的表單驗證function-教學撰寫:徐嘉裕Neil hsu

分享一些網路上實用的PHP表單驗證function,這些function我都已經升級到PHP7.3版本了,也經過實際測試確實有效,有需要的朋友請自行取用吧!! //中文格式驗證 (驗證條件不成立回傳true) function judgeChinese($str){ if(!preg_match("/[\x{4e00}-\x{9fa5}]/u",$str)==true){ $resultvar=true;  }else{ $resultvar=false;  }  return  $resultvar;  } //數字欄位驗證格式-0-9 (驗證條件不成立回傳true) function judgedigital($str){ if(!preg_match("/\d/",$str)==true){ $resultvar=true;  }else{ $resultvar=false;  }  return  $resultvar;  } //身分證驗證格式 (驗證條件不成立回傳true) function chk_pid($id) { if(!$id)return false; $id = strtoupper(trim($id)); //將英文字母全部轉成大寫,消除前後空白 //檢查第一個字母是否為英文字,第二個字元1 2 A~D 其餘為數字共十碼 $ereg_pattern= "^[A-Z]{1}[12ABCD]{1}[[:digit:]]{8}$"; if(!preg_match("/".$ereg_pattern."/i", $id))return true; $wd_str="BAKJHGFEDCNMLVUTSRQPZWYX0000OI"; //關鍵在這行字串 $d1=strpos($wd_str, $id[0])%10; $sum=0; if($id[1]>='A')$id[1]=chr($id[1])-65; //第2碼非數字轉換依[4]說明處理 for($ii=1;$ii<9;$ii++) $sum+= (int)$id[$ii]*(9-$ii); $sum += $d1

超好用的JQuery圖片放大燈箱效果-FancyBox套件(沒用會後悔喔)-教學撰寫:徐嘉裕Neil hsu

FancyBox是一套非常好用也非常簡單套用的js放大燈箱效果套件,可以單獨使用也能跟其他的js圖片播放器整合,方法超簡單的。 例如像下面這個圖片播放器原本預設功能是滑動下方小縮圖切換播放器大圖 但少了燈箱放大效果,總覺得視覺上不夠吸引人,加上FancyBox套件後點擊小圖就會立刻開啟圖片放大的燈箱效果 然後圖片還能再放大跟上下拉動,並且能左右切換圖片,這樣撥放器就變的更美觀了,大推,以下為FancyBox燈箱套件使用方法! 1、先去FancyBox官網下載套件,或是直接用說明中連結也行! 網址: http://fancyapps.com/fancybox/3/ 2、於需要使用燈箱效果圖片下方加入js跟css引入連結 <script src="//code.jquery.com/jquery-3.3.1.min.js"></script> <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css" /> <script src="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js"></script> 3、在圖片加上<a>標籤加上 data-fancybox="gallery"設定即可 <a data-fancybox="gallery" href="big_1.jpg"><img src="small_1.jpg"></a> <a data-fancybox="gallery" href="big_2.jpg"><img src="small_2.jpg"></a>

php使用each批次大量接收變數-教學撰寫:徐嘉裕Neil hsu

2021-11-12補充說明 注意:在PHP8.0中each()函數已被棄用,如您使用PHP8.0開發模組請參考以下工作心得 php8.0使用foreach批次大量接收變數的方法 https://neohsuxoops.blogspot.com/2021/11/phpforeach-neil-hsu.html 在php中如果要接收變數($_GET or $_POST)按照老師教的方法應該是要這樣寫! $var=isset($_REQUEST['var'])?$_REQUEST['var']:""; 然後$var就是接收變數值 因此檔頭通常會會寫一大串的接收變數COED 變數越多,擋頭接收變數區就越長,因為當初老師就是這樣教的所以我就這樣寫習慣了.... 最近發現可以用更簡單的方法來批次接收變數,不用寫落落長的變數接收CODE了!方法如下! 使用each來接收變數再用while解出變數key跟value值,再用$$var直接吧變數的key值變成變數名稱 //接收變數區 while (list($var, $value) = each($_REQUEST)) { $$var=trim(isset($value)?$value:""); } 這樣就能批次接收全部變數,上面那一排落落長的code可以清除了,精簡程式結構增加開發效能,有需要的朋友參考看看! 2019-9-27補充說明 上面的方法是可以吧任何post過來的值參都自動變成新變數,但這樣反而會有讓駭客有攻擊癱瘓系統的機會,因為不管傳什麼$$var都會形成一個新變數。 例如駭客故意在網址GET傳送 www.testweb.com/index.php ?test=123456789 那在PHP中就會自動產生一個$test的變數值為123456789 如果惡意插入512KB位元組的文字就會導致1MB 的記憶體被消耗,那像中國網軍群控系統一台電腦可以群控100多個作業系統,每個作業系統再開10個視窗用機器人腳本不斷送變數進網站,伺服器記憶體很快就會被消耗殆盡。 解決方法就是吧需要用的變數設為白名單,吧允許傳送的變數name預先用陣列建構起來,在於while迴圈中判斷這些變

jQuery在function中回傳$.ajax變數的方法-教學撰寫:徐嘉裕Neil hsu

正常來說,如果要在function中回傳變數只需要使用return即可! 例如 function test(){ var $result='12345'; return result; } alert(test()); //顯示12345 那如果在function中執行$.ajax不就是 function test(){ $.ajax({ url : 'test.php', type : "post", data : {}, async : false, success : function(data) { var result =data ; } }); return result; } 很抱歉這樣寫是什麼值都回傳不出去的,因為$.ajax的data變數是在test.php完成操作後接收回傳值產生的,所以$.ajax預設是不存在data變數,這樣會導致function在執行時 return result;並無變數而產生程式錯誤(js變數需要宣告),解決方法就是在function中宣告一個變數預設值即可! function test(){ var result =false ; //預設值 $.ajax({ url : 'test.php', type : "post", data : {}, async : false, success : function(data) { result =data ; //回傳值 } }); return result; } 這樣就沒問題了,可以吧function中$.ajax的data回傳變數使用return回傳出去! 有需要的朋友參考看看! 教學撰寫: 徐嘉裕 Neil hsu

解決AJAX中使用session重複引用積存阻塞問題-教學撰寫:徐嘉裕Neil hsu

基本上發明session的時候還沒AJAX技術,所以session設計上根本沒考慮到AJAX非同步切換時儲存積存阻塞的問題,換句話說如果用AJAX重複切換某個項目,而該項目會觸發session寫入資料,就會產生積存阻塞,後面的值完全存不進去session,所以解決方法可以使用PHP7的session_start函數來變更session的php.ini初始值設定,但還是必須要透過刪除session切換才能防止session積存阻塞。 舉例來說,像這樣的ajax多層選單切換觸發內容的session寫入! 如果每切換一層就觸發一次session寫入那用什麼方法都沒用,一定會積存阻塞,所以做一個送出按鈕來取選單最後的值,這樣就不會在開啟選單時觸發session寫入!如果變動選單則吧選單的var清空,重新用按鈕來取值! 然後ajax.php結構就能這樣寫! if(empty($of_sortid)){      //選單空值時 unset($_SESSION['xoops_mod_name']);    //刪除session //CODE內容略.......................... }else{      //選單有值時 session_start([     //初始化session_start設定 'cache_limiter' => 'private', 'cache_expire' => 0, 'cookie_lifetime'=>0, 'read_and_close' => true, ]); $_SESSION['xoops_mod_name'] = $var;    //存入session //CODE內容略.......................... } 經測試這樣用AJAX連動選單重複存入session已無積存阻塞問題,數值都能寫入session中,目前能用的方法只能這樣了!其他都試過了不可行!!有需要的朋友參考看看! 教學撰寫: 徐嘉裕 Neil hsu

使用AJAX+PHP+JS取得facebook影片縮圖的方法(非常麻煩)-教學撰寫:徐嘉裕Neil hsu

最近在開發影片模組需要能夠崁入facebook影片,這部分技術上倒不是很困難,但遇到一個非常棘手的問題,就是facebook影片沒有提供縮圖網址服務,不像youtube那麼善心有專門的影片縮圖網址輸入帶入影片ID就能取用,如果首頁同時也多個FB影片要展示然後直接用影片播放器那網站就會整個死當在那裡,需要大量讀取頻寬會被消耗殆盡,所以必須去取得facebook影片縮圖才行。 首先facebook影片並不是沒有縮圖,如果吧影片崁入播放還沒play之前預設其實就是代表圖,像是下圖紅框的就是代表圖。 但縮圖是包在整個html5播放器裡面的(在iframe的src裡面),沒有參數可以拿,網址也是獨立的,要拿縮圖真的非常的困難,但天下沒有解決不了的事情,花了些時間還是找到取得縮圖的方法。 試過無效的方法 1、如果想用js直接解析iframe的src提取圖檔連結是不可能的,因為js不允許跨域取得子框架參數。 2、如果用php的file_get_contents開啟iframe中頁面也是不可能的,FB禁止檔案被外部讀取。 唯一能用的只有curl_init讀取FB檔案,而且還必須偽裝成是Google Bot爬蟲才行! 整個取得facebook影片縮圖的方法如下,因為非常的麻煩,如果沒耐心的建議可以跳過了。 1、HTML結構 需要有一個文字框可以輸入FB影片網址 <form  id='preventDefault'  class="form-horizontal" role="form" action='<{$xoops_url}>/modules/模組ID/videocenter.php' method='post' > <input type='text' id='url' class=' form-control' name='url'  value='' placeholder='輸入影片連結'> <input type='hidden' name='tmburl'

Bootstrap3瀑布流排版用JS套件-Masonry-教學撰寫:徐嘉裕Neil hsu

Bootstrap3是一個非常好用的排版線格線統,但如果區塊高度不一致(長短腳)是無法排出瀑布流料果的,會變成下面這樣內容空缺一塊。 解決方法就是使用【Masonry】瀑布流套件整合Bootstrap3版框,問題就能解決。 1、先在頁腳加上以下JS代碼 <script src="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.min.js"></script> <script> $(function(){ $('.masonry').masonry({ itemSelector: '.item' }); }); </script> 2、在Bootstrap的class增加 紅字 的masonry樣式 <div id='videocenterbox'> <div class="row masonry "> <{foreach item=neilvideoshowbox from=$videoshow.neilvideoshowbox}> <div class="col-sm-6 col-md-4 item "> <div class="thumbnail"> 內容內容內容內容內容內容內容 </div> </div> <{/foreach}> </div> </div> masonry加在 row後面 item 加在 col-md-4後面 這樣就OK了,來看一下效果! 長短腳都能填滿版面形成瀑布流排版,Masonry套件好用的地方是能夠完全整合Bootstrap3框架,不用再另外寫一推CSS了,大推~讚~!! 2020/1/13補充 Masonry瀑布流套件如遇圖片太多未全部讀取完成,則區塊會有相疊的情況,解決方法就是在原本Masonry的JS執行區下方再加上imagesLoaded套件即可解決! <script sr

寫一個Xoops判斷模組分類群組管理權的function-工作心得撰寫:徐嘉裕Neil hsu

最近在開發新模組需要用到在每個分類定義可管理的會員群組,然後被指定的分類群組的會員就能在新增內容(包括管理),寫了一個分類群組管理權的function可重複使用,說明如下: 模組需要在分類能定義管理的群組像是這樣!! 所以資料表會有每個分類跟該分類儲存的可管理群組id 寫一個function以後全部模組都能使用,可加快模組開發流程,code如下。 在模組的function.php中加上以下程式 //引入共用函數 include_once XOOPS_ROOT_PATH."/modules/neillibrary/function.php"; //群組權限判斷 function grouppermission($dbneme="",$where="",$var="",$type=""){ global $xoopsUser,$isAdmin; if($isAdmin==false && !empty($type)){ $groupsArr=databasetablewhile($dbneme,$where); foreach($groupsArr as $key=> $val){ $admingroup[$key]=phpconversion($conversion=$groupsArr[$key][$var],$type="unserialize"); if(!empty($xoopsUser)){ //會員 foreach($xoopsUser->getGroups() as $i){ if(in_array("$i",$admingroup[$key])){ $group=true; } } }else{ //訪客 if(in_array("3",$admingroup[$key])){ $group=true; } } } }else{ $group=true; } return $group; } 然後在模組頁面的php檔中呼叫function並給予判斷,如果回傳直

PHP隨機陣列取值方法-教學撰寫:徐嘉裕Neil hsu

我發現其實用rand()函數也能做到陣列隨機取值,而且還滿好用的,方法如下: $Arr = array(); //建構陣列 $Arr['0']="AAA"; $Arr['1']="BBB"; $Arr['2']="CCC"; 所以共有三個陣列,KEY值為0~2 echo $Arr[ rand(0,2) ];   //這樣就能隨機取得陣列KEY值0到2的陣列內容,rand(0,2)左邊參數是起始值,右邊的參數是隨機總量值,所以設成0,2即可 有需要的朋友參考看看!! 教學撰寫: 徐嘉裕 Neil hsu

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

neilambilight2.91正式版主要是針對Xoops官網新發佈的Xoops2.5.10及php7.3.6與Tad新版模組兼容做的升級更新,與修正一些php7.3語法與函數的問題,另外增加了兩項功能,分別是隨機小語功能替換已老舊的randomquote模組,聯絡我們增加全選批次刪除與一鍵清除全部資料功能,neilambilight2.91可以在最新版的Xoops2.5.10運行,也能兼容到Xoops2.5.8,包括tad最新釋出的模組全部都有做兼容測試,符合各種環境與不同版本的運行需求。 Xoops免費佈景-Neil佈景測試站 http://demoweb.neodw.com/themesdemo/ neilambilight2.91 更新內容 ============================== 1、修正neothemesadmin佈景管理模組滑動按鈕區塊按照排序設定無效問題。 2、快速加入模組連結加到佈景選單功能增加base64編碼與解碼,解決網址中帶有第二變數GET無法傳送問題。 3、neothemesadmin佈景管理模組新增加隨機小語功能,能自訂小語底色及ICON功能。 4、增加隨機小語區塊功能,增加自訂切換秒數及長寬定義功能。 5、修正php7.3.6無法安裝neothemesadmin佈景管理模組問題(php7.3升級)。 6、使用OpenSSL加密替換neillibrary函數庫模組中使用的Mcrypt加密函數(php7.3升級) 7、修正聯絡我們郵件寄送程式錯誤問題(Xoops2.5.10升級)。 8、修正neothemesadmin佈景管理模組->佈景設定上傳icon指定PNG格式錯誤問題。 9、修正區塊管理classificationmenu()函數錯誤問題(php7.3升級)。 10、修正佈景註冊區塊AJAX防機器人設置出錯問題(php7.3升級)。 11、neothemesadmin佈景管理模組->聯絡我們管理新增加全部核取刪除功能。 12、neothemesadmin佈景管理模組->聯絡我們管理新增加一鍵清空全部資料功能。 13、完成Xoops2.5.10升級後全部tad新版模組與neilambilight佈景兼容測試。 14、完成舊版Xoops2.5.9及PHP

修正tad_faq2.54新增資料Error : Error: Class 'CkEditor' not found問題-教學撰寫:徐嘉裕Neil hsu

安裝tad_faq2.54進行測試時發現一個問題,就是新增資料時會出現 Error : Error: Class 'CkEditor' not found 本地端測試環境 Xoops2.5.10 php7.36 MySQL10.3.15-MariaDB Tad Tools 工具包3.28 以上都是最新本版的狀態, 所以不會是版本或環境差異造成的 ,那一定是code有問題,開除錯查一下發現index.php少了CkEditor類的引入,加上就正常了!! 找到以下檔案用筆記本打開 modules/tad_faq/index.php 找到第160行,在$faq_cate_opt = get_faq_cate_opt($fcsn);後面加上一段 include_once XOOPS_ROOT_PATH . "/modules/tadtools/ck.php";    //整段code     $faq_cate_opt = get_faq_cate_opt($fcsn);     include_once XOOPS_ROOT_PATH . "/modules/tadtools/ck.php";  //插入這段     $CkEditor = new CkEditor('tad_faq', 'content', $content);     $CkEditor->setHeight(400);     $editor = $CkEditor->render(); 這樣就能恢復正常了 工作心得撰寫: 徐嘉裕 Neil hsu

升級Xoops2.5.10方法-教學撰寫:徐嘉裕Neil hsu

我已經吧Xoops2.5.10升級包整理好了,裡面包括會發生函數衝突的tadtools模組最新版跟導致後台一片空白的tad後臺佈景最新版,所以不用再去下載這兩支檔,升級包裡面就有,按照以下升級說明即可完成Xoops2.5.10升級操作。 1、下載Xoops2.5.10升級包 https://drive.google.com/drive/folders/1pbo3ASRfbhQlc15-yALAXx7_9JwV-xoZ?usp=sharing 2、解壓縮後,吧XoopsCore25-2.5.10 - 升級用\XoopsCore25-2.5.10\ htdocs 資料裡面的資料全部複製,貼到您Xoops的網站根目錄覆蓋舊檔 2、吧xoops_data跟xoops_lib這兩個資料夾複製到您網站原本放置這兩個資料夾的位置覆蓋舊檔 XoopsCore25-2.5.10 - 升級用\XoopsCore25-2.5.10\ xoops_data XoopsCore25-2.5.10 - 升級用\XoopsCore25-2.5.10\ xoops_lib 3、吧XoopsCore25-2.5.10 - 升級用\XoopsCore25-2.5.10\ upgrade   放到您的Xoops網站根目錄中 這樣就完成升級準備,然後在您的網站網址輸入 http://您的網址/upgrade/ 就會出現升級畫面 點選繼續,出現系統管理更新頁面,選擇更新此模組->更新 這樣就完成升級工作了, 最後還有一件工作要做,很重要,就是吧放在網站根目錄的upgrade升級包刪除掉,記得一定要刪除喔。 教學撰寫: 徐嘉裕 Neil hsu

jQuery製作全部核取和取消全部核取方框的語法-教學撰寫:徐嘉裕Neil hsu

如果想做一個核取按鈕點了之後可以吧全部的核取框都變成核取狀態,再點一下取消全部選取,類似下圖這樣 方法如下 //HTM結構 //這是全部核取跟取消核取的按鈕 <label class=' checkbox-inline checkboxeach'><input id='checkbox'   type='checkbox' name='checkboxall'  value='1'>選取</label>  //js取name值 //這裡是php迴圈跑出來的內容 <label class=' checkbox-inline checkboxeach'><input id='checkbox'   type='checkbox' name='readtrue4'  value='1'></label> <label class=' checkbox-inline checkboxeach'><input  id='checkbox'    type='checkbox' name='readtrue5'  value='1'></label> <label class=' checkbox-inline checkboxeach'><input  id='checkbox'   type='checkbox' name='readtrue6'  value='1'></label> //js取id 值 //jQuery語法 //全部選取/取消選取 $(document).ready(function(){ $('input[name=checkboxall]').click(function(){ if( $('input

php7.3->使用OpenSSL來代替Mcrypt加解密的function製作方法-教學撰寫:徐嘉裕Neil hsu

之前寫過一篇PHP7的AES資料加密function教學 https://neohsuxoops.blogspot.com/2018/05/php7aesfunction.html 但因為php7.1之取消了Mcrypt加密套件,所以原本的方法就不能使用了,必須改用OpenSSL來加密資料,以下為吧Mcrypt加密function替換為OpenSSL加密function的方法,只需要更動function內容即可,在模組中引入的function及傳入值參都不須更動。 原本的Mcrypt加密function //AES 資料加密 function encryptdecode($var="",$types="",$key=""){ //製作SHA384-KEY $hash_string = $key; $hash = hash('SHA384', $hash_string, true); $app_cc_aes_key = substr($hash, 0, 32); $app_cc_aes_iv = substr($hash, 32, 16); //加密 if($types==encrypt){ $data = $var; $padding = 16 - (strlen($data) % 16); $data .= str_repeat(chr($padding), $padding); $encrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $app_cc_aes_key, $data, MCRYPT_MODE_CBC, $app_cc_aes_iv); $encrypt_text = base64_encode($encrypt); $returnvar=$encrypt_text; } //解密 if($types==decryption){ $encrypt =base64_decode($var); $data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $app_cc_aes_key, $encrypt, MCRYPT_MODE_CBC, $app_cc

XAMPP for Windows 7.3.6 快速更改mysql密碼方法-教學撰寫:徐嘉裕

按照XAMPP官網說明修改phpMyAdmin密碼簡單很多不用那麼麻煩了,只需要開啟XAMPP Shell命令提示符下指令跟修改config.inc.php即可,方法如下: 開啟XAMPP Control Panel,點選右邊的Shell按鈕 2,輸入以下的指令-按Enter送出 mysqladmin.exe -u root password secret 紅字部分為mysql的登入密碼,可以改成自己需要的 3、找到config.inc.php這支檔 xampp/phpMyAdmin/config.inc.php用筆記本打開 $cfg['Servers'][$i]['auth_type'] = 'http';  //這裡改成http $cfg['Servers'][$i]['user'] = 'root'; $cfg['Servers'][$i]['password'] = 'secret';  //這裡改成剛剛變更的密碼 $cfg['Servers'][$i]['extension'] = 'mysqli'; $cfg['Servers'][$i]['AllowNoPassword'] = true; $cfg['Lang'] = ''; 儲存後,再次進入phpMyAdmin就會跳出輸入密碼框,輸入設定的密碼就可以進入管理資料表了!! 教學撰寫: 徐嘉裕 Neil hsu

Xoops內建圖標Font Awesome的使用方法!!-教學撰寫:徐嘉裕Neil hsu

xoops2.59之後在media資料夾裡面就有放置font-awesome資料夾了,所以不用引入font-awesome.min.css也能直接使用Font Awesome圖標喔! 網站: https://fontawesome.com/ 選擇圖標: https://fontawesome.com/v4.7.0/icons/ 使用方法只要在佈景上或是區塊及模組樣板上放上Font Awesome標籤跟class定義就好了! 例如要使用以下圖標 吧紅框的中的 <i class="fa fa-user-circle-o" aria-hidden="true"></i>  貼到樣板或區塊就能使用了 另外還能調整icon的大小及多項設定,好朋友可以參考看看! 其他設定:  https://fontawesome.com/v4.7.0/examples/ 工作心得教學撰寫: 徐嘉裕 Neil hsu

bootstrap4顏色選擇器插件套用方法!-教學撰寫:徐嘉裕Neil hsu

最近剛好要做到一個可以讓客戶自訂背景顏色的功能,發現這個bootstrap4顏色選擇器插件還真不錯用,基本色都能鍵入,這裡分享套用方法。 1、先去下載bootstrap4套件包  https://github.com/davkhun/color-palette-picker 2、引入套件包裡面的css跟js檔 <link href="bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet"> <script src="js/jquery.min.js"></script> <script src="js/popper.min.js"></script> <script src="js/bootstrap.min.js"></script> <script src="js/colorpalettepicker.js"></script> 3、在input上方丟一個div區塊<div id='colorpalettediv'></div>  結構 <div id='colorpalettediv'></div>  <input type='text' id='color' class=' form-control' name='color' value='rgb(0, 0, 255)' placeholder='背景顏色'> 4、在頁面最下方呼叫colorPalettePicker函式,並吧color值傳入input中 <script type='text/javascript'> $('#colorpalettediv').colorPalettePicker({ lines:2, b

寫一個偵測Google翻譯套件切換語言調整頁面css樣式的方法-教學撰寫:徐嘉裕Neil hsu

Google翻譯套件是可以崁在網頁上面讓user自行切換的網頁程式,目前雖然已經停止申請必須使用Chrome瀏覽器的內建翻譯功能,但如果是ie或是ff還是可以用Google翻譯套件,之前有寫過一個教學有需要的朋友可以參考看看!! https://neohsuxoops.blogspot.com/2018/12/googlejs.html 這些是前言,目前遇到需要處理的問題是如果網站是繁體中文,切換成英文或日文因為字元變多了,會導致版面變形,像下圖這樣: 文字都疊再一起了,物件也跑位了,所以必須寫一段code去偵測切換的語言來調整css的文字大小的字句間距,方法如下: //Google翻譯套件程式區 <div id="google_translate_element"></div><script type="text/javascript"> function googleTranslateElementInit() { new google.translate.TranslateElement({pageLanguage: 'zh-TW', includedLanguages: 'en,ja,zh-TW,zh-CN', layout: google.translate.TranslateElement.InlineLayout.SIMPLE}, 'google_translate_element'); } </script><script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script> //判斷Google翻譯套件語言自定義css樣式區 <script> $(document).ready(function(){ $('#google_translate_element').bind(&#

分享一個PHP好用的去除副檔名跟取得副檔名function-教學撰寫:徐嘉裕Neil hsu

通常在處理檔案上傳的時候會吧檔名跟副檔名分開處理,這時候就需要移調副檔名或移調檔名了,透過G大神找到神友寫的一篇教學,我吧他程式function起來以方便使用,CODE如下: //吧以下的CODE丟到function.php裡面然後在需要使用的檔案中引入function.php //去除副檔名跟取得副檔名 function strriposfunction($val="",$type=""){ switch($type){ case "1": //去除副檔名 $fileName = $val; if (false !== $pos = strripos($fileName, '.')) { $fileName = substr($fileName, 0, $pos); } break; case "2": //取得副檔名 $fileName = $val; if(false !== $pos = strripos($fileName, '.')) { $fileName = substr($fileName, $pos+1, strlen($fileName)); } break; } return $fileName; } 這樣只需要呼叫 strriposfunction()就能完成去除副檔名跟取得副檔名操作了!! //去除副檔名 $val=test.php; echo strriposfunction($val=$val,$type="1"); //$type=1 去副檔名 得到:test //取得副檔名 echo strriposfunction($val=$val,$type="2");  //$type=2  取得副檔名 得到:php 有需要的朋友參考看看 參考資料來源: https://blog.xuite.net/choubee/blog/39503508-php+-+%E5%8E%BB%E9%99%A4%2F%E5%8F%

製作AJAX讀取條的方法-教學撰寫:徐嘉裕Neil hsu

如果要做一個AJAX讀取條,像是用在瀑布流讀取資料這樣的特效,方法如下: 使用JQuery AJAX 中的complete,beforeSend這兩個參數。 complete:請求完成時執行的函式(不論結果是success或error)。 beforeSend:發送請求之前會執行的函式。 //AJAX-CODE $.ajax({ url: xoopsjsurl + '/modules/neilwenchuang/ajax.php', type: 'POST', data: { id: $id, sortid:$sortid, number:$number }, cache:false, ifModified :true, async:false, success: function(response) { if(response=="") return false; //空值終止程式 $("#waterfallsflowformboxajax").before("<div id='waterfallsflowformboxajax"+$number+"'>"+response+"</div>"); }, beforeSend:function(){  //發送請求之前會執行的函式 $('#allrecordsimg').show(); }, complete:function(){ //請求完成時執行的函式 $('#allrecordsimg').hide(); },    error: function() { console.log('ajax error!'); } }) //HTML-CODE <p id='allrecordsimg'></p> //

AJAX+jQuery瀑布流作法-教學撰寫:徐嘉裕Neil hsu

客戶剛好需要做一個瀑布流功能的介面,瀑布流主要功能就是當捲軸拉到瀏覽器底時觸發資料,像是下圖這樣。 詳細程式結構就不描述了,這裡主要是說明透過jQuery觸發ajax讀取資料及控制顯示數量的操作方式,之後如果有需要可以再做其他延伸開發,code如下: HTML結構 <div id='centerbox'> <div class="row customrow"> <{foreach item=boxArr from=$wenchuangshow.neilwenchuangbox}> <div class="col-md-6 customrowcol-md-6"> <div id='contentbox'> <{$boxArr.contentbox}> </div> </div> <{/foreach}> <div id='waterfallsflowbox' name='1,<{$wenchuangshow.sortidDB}>'></div> //瀑布流取值 <div id='waterfallsflowformboxajax' name='0' ></div> //建構瀑布流區 //備註:name='0'為預設值,到時候會透過AJAX回傳數量然後JS在讀取數量來控制顯示筆數 </div> </div> JS結構 //偵測捲軸位置如果到底觸發waterfallsflowboxajax()函數 $(window).scroll(function(){ var scrollint = $(window).scrollTop(); if ($(window).height() + $(window).scrollTop() == $(document).height()) { $ajaxsetup = $("#waterfallsflowbox&qu

jQuery使用修改name值做一個點擊左右滑動css3動畫區塊特效-教學撰寫:徐嘉裕Neil hsu

最近需要幫客戶做一個jQuery區塊特效,就是點了按鈕左區塊會往左滑出內容區,然後再點一次按鈕左區塊又會往右滑回內容區, 這裡比較特殊工法的是利用修改name值來判斷區塊開啟還是關閉,這樣也能使用.css()來控制區塊的移動特效,方法如下: //html結構 <div id='leftboxdiv'> <div id='switchbtn' name=' go '></div>  //name值預設是go 內容內容內容內容內容內容內容內容內容內容內容 </div> //js-code //滑入滑出左區塊 $(document).ready(function(){ $("#switchbtn").click(function(){ if($(this).attr("name")=="go"){ $("#leftboxdiv").css({"animation-name":"leftboxdivgo","left":"-293px"}); $(this).attr('name','back');  //吧name值改成back }else{ $("#leftboxdiv").css({"animation-name":"leftboxdivback","left":"0px"}); $(this).attr('name','go');    //吧name值改成go } }); }); //css #leftboxdiv{ position: absolute; width: 293px; height: 1076px; background: url(../../img/blocks/travelerliving-commodity_01.png) repeat