一、第一種更換FLASH
ECShop默認的的Flash輪播圖片(首頁主廣告)樣式有以下幾種, 那麼怎麼樣自定義個性化的flash輪播呢?
以上幾個flash播放器對應的位置分別是/data/flashdata下的:default、dynfocus、prinkfocus、redfocus
隨便打開其中一個文件夾可以看到有四個文件:cycle_image.js、data.js、preview.jpg、*.swf
現在開始定製自己的播放器。複製其中一個文件夾,比如說redfocus,重命名爲:zbird
然後開始修改zbird文件夾下的文件。
1,修改cycle_image.js
文件開頭的註釋修改爲:
------------------------------------------------------------------------------------
$importjs不用修改。
將function show_flash()中出現redfocus的地方替換爲zbird:
document.getElementByIdx_x('flash_cycle_image').innerHTML = '
';
------------------------------------------------------------------------------------
2,data.js不用修改,在ecshop後臺切換播放器樣式的時候,程序會把上傳的圖片信息寫入到data.js中供播放器調用。
3,preview.jpg是播放器的預覽圖,在後臺供用戶點擊以選擇播放器樣式,可用本文開頭那張圖。
4,zbird.swf:刪除複製來的redfocus.swf,你需要更酷的,我用這是這個(zbird),當然你不一定非要用這個。
來到後臺,系統設置->首頁廣告管理,可以看到新增加的播放器樣式已經出來了:
選中zbird樣式爲當前樣式,這時到首頁刷新頁面,falsh並不顯示。
這時要修改模板裏面library/下的index_ad.lbi文件,它是控制flash slide顯示的庫文件,只保留如下內容即可:
現在刷新首頁就可以看到新的flash slide樣式了。
還沒完。修改輪播圖片地址和鏈接後再刷新首頁發現flash slide裏的內容並沒有改變。因爲flash slide讀取的是data.js裏的內容,說明data.js裏的內容並沒有改變。經過分析可以知道,在切換樣式時(即在點擊要切換的flash slide樣式的時候)程序會把新的數據寫入到data.js中。顯然,在切換成zbird樣式時,新建目錄zbird下的data.js並沒有被寫入新的數據。那麼,現在跟蹤程序看切換樣式時發生了什麼。“首頁主廣告管理”的鏈接是:/admin/flashplay.php?act=list,打開flashplay.php發現list動作display的是flashplay_list.htm模板文件。打開/admin/templates下的flashplay_list.htm找到47行:
------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
可見當樣式快照被點擊時觸發了setupFlashTpl()函數。在flashplay_list.htm的82行,可以看到function setupFlashTpl的實現,核心語句如下:
Ajax.call('flashplay.php?is_ajax=1&act=install', 'flashtpl=' + tpl, setupFlashTplResponse, 'GET', 'JSON');
那再到flashplay.php中insall的實現過程。284-314行是install動作的實現過程,點擊樣式快照時執行的操作。注意第296行:
------------------------------------------------------------------------------------
if (set_flash_data($flash_theme, $error_msg))
{
make_json_error($error_msg);
}
else
{
make_json_result($flash_theme, $_LANG['install_success']);
}
------------------------------------------------------------------------------------
set_flash_data()函數功能顧名思義就是設置flash的數據。再跟蹤到set_flash_data()的實現,flashplay.php的860行開始,檢查以下代碼:
------------------------------------------------------------------------------------
switch($tplname)
{
case 'uproll':
$msg = set_flash_uproll($tplname, $flashdata);
break;
case 'redfocus':
case 'pinkfocus':
case 'dynfocus':
$msg = set_flash_focus($tplname, $flashdata);
break;
case 'default':
default:
$msg = set_flash_default($tplname, $flashdata);
break;
}
------------------------------------------------------------------------------------
可以發現如果切換到系統自工帶的幾個樣式:redfocus、pinkfocus、dynfocus時都執行了set_flash_focus()函數,那麼我們新建的zbird也是同樣道理。修改set_flash_data()如下 :
------------------------------------------------------------------------------------
switch($tplname)
{
case 'uproll':
$msg = set_flash_uproll($tplname, $flashdata);
break;
case 'redfocus':
case 'pinkfocus':
// add here for zbird
case 'zbird':
case 'dynfocus':
$msg = set_flash_focus($tplname, $flashdata);
break;
case 'default':
default:
$msg = set_flash_default($tplname, $flashdata);
break;
}
------------------------------------------------------------------------------------
其實就是讓程序實現切換到zbird樣式時也執行set_flash_focus()函數。
再到刷新首頁就可以看到flash slide已經和後臺修改的數據對應了。
總結:
1,在/data/flashdata/下新建目錄(或直接複製自 redfocus文件夾),如名爲zbird,裏面包含四個文件:cycle_image.js、data.js、preview.jpg、zbird.swf。
2,修改新建的樣式目錄下的文件:修改cycle_image.js(如:把cycle_image.js中的出現的redfocus替換爲zbird)、替換preview.jpg爲相應樣式的快照、找來自定義flash樣式的swf文件(如:zbird.swf)。
3,修改庫文件/themes/模板名/library/index_ad.lbi,去掉所有if判斷。
4,修改flashplay.php文件,找到set_flash_data()函數,在大概878行加上:“ case 'zbird': ”。
第二種:直接在首頁模板中調取
這裏有個更簡單點的函數,把這個函數插入到index.php中最下面即可,
------------------------------------------------------------------------------------
function get_index_ad(){
$sql = 'SELECT ad_type, content,ad_name,url FROM ' . $GLOBALS['ecs']->table("ad_custom") ;
$res = $GLOBALS['db']->getAll($sql);
$ads = array();
foreach ($res AS $adx => $row)
{
$ads[$adx]['ad_type'] = $row['ad_type'];
$ads[$adx]['content'] = $row['content'];
$ads[$adx]['url'] = $row['url'];
$ads[$adx]['ad_name'] = $row['ad_name'];
}
return $ads;
}
------------------------------------------------------------------------------------
然後在那一堆smarty中定義一個標籤即可(不過到時候後臺添加圖片是在首頁主廣告那裏自定義添加)
$smarty->assign('index_adlist', get_index_ad());
然後在DWT文件中引用即可
如:
------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
循環來自標籤'index_adlist' 其中url爲圖片鏈接地址 content爲圖片 ad_name爲圖片名稱
{if $flashtpl.screenshot}{/if} |