模板檔案中的模組呼叫
控制檔案呼叫模板檔案,解析模板檔案,取出頁面上呼叫的模組,在模板解析檔案頭部新增
<?php block_get(『977』),模板檔案模組所在處替換為:<?php block_display('977');?>
處理函式說明:
function_core.php --- function_block.php
block_get -> block_get_batch
block_display->block_display_batch
block_get_batch 取得模組資料items
block_display_batch 資料+模板=資料的html**(重新獲取模組資料,如果有推送資料,則優先選擇模組推送資料)
/**
* 獲取模組配置資訊,模組資料
*/function block_get_batch($parameter)
}if($styleids)
if(!($bids = array_diff($bids, array_keys($cachedata)))) }}
$items = $prelist = array();
//獲取模組資料,去除過期資料,取出固定當前可用資料,全部可用資料(除過期的
foreach(c::t('common_block_item')->fetch_all_by_bid($bids) as $item) elseif($item['itemtype'] == '1' && (!$item['startdate'] || $item['startdate'] <= timestamp))
$prelist[$item['bid']][$item['displayorder']] = $item;
}$items[$item['bid']][$item['displayorder']] = $item;
}foreach(c::t('common_block')->fetch_all($bids) as $bid => $block)
if(!empty($items[$bid]))
} else else
} else }}
}ksort($newitem);
}$block['itemlist'] = empty($newitem) ? $items[$bid] : $newitem;
}$block['param'] = $block['param'] ? dunserialize($block['param']) : array();
$_g['block'][$bid] = $block;
if(c::t('common_block')->allowmem) }}
if($styleids)
}
/**
* 更新模組資料,獲取指定條數資料
* @global type $_g
* @param type $bid 模組bid
* @param type $items 模組規則,推送(優先)獲取的資料
* @return type $showlist 最終模組顯示的資料列表
*/function block_updateitem($bid, $items=array())
$_g['block'][$bid] = $block;
}$block['shownum'] = max($block['shownum'], 1);
$showlist = array();
$archivelist = array();
$prelist = array();
$oldvalue = $fixedvalue = $fixedkeys = array();
/*** 獲取原模組資料,取出固定的資料,固定位置可能有多條資料,預訂,使用,過期 2013-2-20 added
*/foreach(c::t('common_block_item')->fetch_all_by_bid($bid, true) as $value) elseif(!isset($oldvalue[$key])) else
}/**
* 處理 重新獲取的資料
* key:原資料中已有指定key的固定資料,重新獲取資料刪除此條記錄
* 原資料中已有指定key的非固定資料,如果修改,則使用原資料中的key值,否 更新重新獲取的資料的itemid為原key資料的itemid
*/$processkeys = array();
$itemcount = count($items);
for($k = 0; $k < $itemcount; $k++) elseif(isset($oldvalue[$key]) && !isset($processkeys[$key])) else
unset($oldvalue[$key]);
$processkeys[$key] = 1;
} elseif(isset($processkeys[$key]))
}$items = array_filter($items);
foreach($oldvalue as $value)
/*** 重新獲取模組資料
* 如有指定位置固定的原資料,預訂:保留,重新獲取資料;有效:顯示;過期:刪除,重新獲取資料
* $jump == false 重新獲取指定位置的資料
*/for($i = 1; $i <= $block['shownum']; $i++) elseif((!$value['startdate'] || $value['startdate'] <= timestamp)
&& (!$value['enddate'] || $value['enddate'] > timestamp)) else }}
if(!$jump)
$curitem['displayorder'] = $i;
$curitem['makethumb'] = 0;
if($block['picwidth'] && $block['picheight'] && $curitem['picflag'])
if($ftp->ftp_size($thumbpath) > 0)
} else if(file_exists($_g['setting']['attachdir'].$thumbpath))
$curitem['thumbpath'] = $thumbpath;
}if(is_array($curitem['fields']))
$showlist = $curitem;}}
foreach($items as $value)
}/**
* 刪除無效的,多出的資料
*/if($archivelist)
/*** 模組資料最終儲存的資料是 有效的資料和預存的資料,資料條數之和為shownum
*/$inserts = $itemlist = array();
$itemlist = array_merge($showlist, $prelist);
c::t('common_block_item')->insert_batch($bid, $itemlist);
$showlist = array_filter($showlist);
return $showlist;
}
門戶管理模組資料列表,更新模組資料是否固定和位置
./source/include/portalcp/portalcp_block.php
elseif($op == 'data')
if(submitcheck('updatesubmit'))
$items = array();
foreach(c::t('common_block_item')->fetch_all($ids) as $value)
}foreach($items as $key=>$value) }}
showmessage('do_success', 'portal.php?mod=portalcp&ac=block&op=data&bid='.$bid, array('bid'=>$bid, 'eleid'=> $_get['eleid']));
}$itemlist = array();
if($bid)
$value['ispreorder'] = false;
if($value['itemtype']==1) else
}$value['itemtypename'] = lang('portalcp', 'itemtypename'.$value['itemtype']);
$itemlist[$value['itemid']] = $value;
}if($preorders) }}
}$block['param']['bannedids'] = !empty($block['param']['bannedids']) ? $block['param']['bannedids'] : '';
}
使用LUA 熱更新模組
最近準備在手機專案客戶端中使用lua,以前一直在伺服器使用luabind.另外,tolua 也體驗過,luaplus也在早年用過.以下是本人對這些繫結庫的個人感覺 luabind 利用boost機制把繫結做到極致,比較適合主c 弱lua的指令碼框架.作者已經停止更新,在windows linux編譯...
Python中使用dateutil模組解析時間
最近剛接觸專案組內的python專案,發現所有的時間格式都是用的iso8601,同事美其名曰說是為了專案的國際化 其實使用者量最多幾百人吧,還都集中在公司內部,哪來的國際化,哈哈哈哈!所以決定對該時間格式深入研究下,發現了python中的dateutil模組。datetime轉iso8601格式,直...
列舉 反射 解耦業務多流程,實現模組化
1.列舉 列舉是乙個被命名的整型常數的集合,用於宣告一組帶識別符號的常數.宣告列舉 author yangyang version 1.0 date 2020 9 30 9 11 describe 支付列舉 data tostring public enum payserviceenum retur...