發表文章

目前顯示的是 八月, 2018的文章

JS外部載入延遲加載的方法-教學撰寫:徐嘉裕Neil hsu

圖片
最近遇到一個問題,就是佈景的災害示警區塊外連js解析拖慢站其他JS解析的問題,災害示警區塊是讀取https://alerts.ncdr.nat.gov.tw網站的JS後API橋接顯示在網站容器中的內容,如果遇到https://alerts.ncdr.nat.gov.tw網站流量塞爆或是或是外連頻寬不穩,就會發生因為瀏覽器解析JS一直在等待https://alerts.ncdr.nat.gov.tw網站的資料回傳,所以其他的JS解析都被卡住了,然後像是圖片播放器JS功能突然失效,JS動畫突然要很久才會播放,反正跟JS有關的解析都會因為一個外部JS讀取LOG全部都卡住。




上網估狗了一下找到一個簡單的解決方法分享給大家!!

只需要在外連的script標籤中加上defer="defer"延遲加載屬性期可,這樣被加上屬性的script就會等其他沒有屬性的script全部腳本解析完畢後才開始下載解析

 <script defer="defer"  type="text/javascript" src="https://alerts.ncdr.nat.gov.tw/temp/StaticFiles/Immediately/<{$alertsncdr}>"></script>
 <script>

即使https://alerts.ncdr.nat.gov.tw網站頻寬嚴重塞車也不會拖慢網站的其他JS解析運作,有需要的朋友參考看看!


教學撰寫:徐嘉裕 Neil hsu

Xoops任意模組取得指定模組的$xoopsModuleConfig設定方法!!-教學撰寫:徐嘉裕Neil hsu

在開發Xoops模組的時候如果有用到偏好設定的欄位時,會在模組根目錄中的xoops_version.php檔案建立以下的設定,例如果們要建一個偏好設定欄位名為text1


//---偏好設定---//
$modversion['config'] = array();
$i=1;
$modversion['config'][$i]['name']= "text".$i."";  //欄位名為text1
$modversion['config'][$i]['title']= '_MI_XOOPS_VERSION5';
$modversion['config'][$i]['description']= '_MI_XOOPS_VERSION5';
$modversion['config'][$i]['formtype']= 'text';
$modversion['config'][$i]['valuetype']= 'int';
$modversion['config'][$i]['default']= '1'; //0不啟用1啟用
$i++;

更新模組後,Xoops會自動吧text1欄位即設定新增到config資料表中

如果是同一個模組要取得text1的conf_value值很簡單,只需要!

global  $xoopsModuleConfig;

echo $xoopsModuleConfig['text1'];

即可,但如果遇到不是同一個模組時候呢?例如模組A想讀取模組B的conf_value值,這方法就不行了,因為$xoopsModuleConfig預設只能讀取自己模組的config欄位數值,無法取得其他模組的,解決方法是使用Xoops內建函數來取的

例如模組A->讀取模組B的conf_value

    $modhandler        = &xoops_gethandler('module'…

用PHP做一個自動判斷學年度跟上下學期的方法-教學撰寫:徐嘉裕Neil hsu

圖片
目前一個模組開發專案剛好要用到學年度跟上下學期功能,本來是想說後台做個選單讓管理員自己建立,但發現每個學校的學年度跟上下學期都是一樣的全國統一格式,因此就不用那麼麻煩還要進資料表,直接抓時間函數來判斷就好了,方法如下:


1、在模組檔案函數最上方引入neillibrary模組的function.php
include_once XOOPS_ROOT_PATH . "/modules/neillibrary/function.php";

2、進行時間判斷
//學年度計算
$year=timedate($datevar="Y")-1911;

//上下學期判斷
$month=timedate($datevar="m") >='08' && timedate($datevar="m") >='02' ? _MD_CONTENTPHP55 : _MD_CONTENTPHP54; // get TRUE
/輸出標題
$content['title']=sprintf(_MD_CONTENTPHP56,$year,$month);

//記得輸出$content到樣板上 $xoopsTpl->assign( "contentbox" , $content) ;

3、然後在語系檔main.php中加上語系
define("_MD_CONTENTPHP54","下學期"); define("_MD_CONTENTPHP55","上學期"); define("_MD_CONTENTPHP56","%s學年度-%s");
4、在樣板上讀取標題 <div class="alert alert-info" role="alert"><span class="glyphicon glyphicon-calendar" aria-hidden="true"></span><{$co…

js取得下拉選單中文字後輸出input送出變數的方法-教學撰寫:徐嘉裕Neil hsu

我們都知道下拉選單select本身可以設定一個name值,然後會吧作用中的選單value值post出去,但如果要連同選單中文字一起post出去,那就用另外用js來撈取作用中選單中數值在透過input傳送出去,方法如下:

選單結構:

<select size='1' name='options[2]' id='select' >
<option value='0' >選擇影片分類</option>
<option value=1 selected='selected'>活動影片</option>
<option value=2 >宣導影片</option> <option value=3 >校園新聞</option>
</select>

<div id='hiddenbox'><input  type='hidden' name='options[3]' value='".$options[3]."'></div> 
 //這是要讓js傳值建立input的容器
js-code: $(document).ready(function(){
$('#select').change(function(){
$classification=$(this).find(':selected').text();
hiddenbox($classification);
});
function hiddenbox($classification){
$('#hiddenbox').html("<input type='hidden' name='options[3]' value='"+$classification+"'>");
}
});

這樣就能吧作用中的選單文字以name='options[3]…

Xoops取得newblocks資料表中bid數值的方法(包含複製後區塊bid數值)-教學撰寫:徐嘉裕Neil hsu

圖片
如果建立Xoops區塊都會在newblocks資料表中寫入一筆設定資料,其中的bid數值就是區塊的編號,包含複製區塊也會產生編號,




雖然佈景樣板中是有<{$block.id}>變數可以取得區塊的bid值,但在模組區塊中卻無法使用<{$block.id}>變數,上網查了Xoops結構說明手冊發現都要用class的方法來撈數值,實在太麻煩了,所以自己寫了一個取得bid的函數,分享給大家,方法如下:

1、在模組blocks資料架的區塊檔案函數最上方引入neillibrary模組的function.php
include_once XOOPS_ROOT_PATH . "/modules/neillibrary/function.php";

貼上以下function


//區塊取得bid

function bidnamefunction($op="",$bid=""){

//取得newblocks資料表最新一筆編號

$dbneme="newblocks"; //資料表名稱

$where=" order by bid DESC"; //where數值

$newblocksList=moduledb($dbneme,$where);

//最新編號+1

$newbid=$newblocksList['bid']+1;

//判斷複製還是編輯

$bid=$op==edit ? $bid : $newbid; // get TRUE

return $bid;

}
2、在編輯區塊函數裡面增加以下設定(block_edit)

//取得變數
$op=isset($_REQUEST['op'])?$_REQUEST['op']:"";
$bid=isset($_REQUEST['bid'])?$_REQUEST['bid']:"";

$bid=bidnamefunction($op=$op,$bid=$bid);

加上儲存options設定

<input type='hidden' name='options[0]&…