發表文章

使用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' value=''> 
//這裡是接收AJA…

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了,大推~讚~!!


教學撰寫:徐嘉裕Neil hsu

寫一個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並給予判斷,如果回傳直是false則表示該會員不具有任何一個分類的管理權限,返回首頁即可!!

//群組管理權限
  if(empt…

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及PHP5.63兼容測試,各項功能均正常。
15、修改佈…

修正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[name=checkboxall]').prop("ch…

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_aes_iv);
$padding = ord($data[s…

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