在ecshop後臺模版設置頁面進行廣告設置時,添加了一個廣告位置,但是保存後沒有顯示在頁面上。後來檢查數據庫發現,數據是已經保存到了數據裏裏面了,但是就是沒有生成到指定頁面的指定位置上。
通過調試發現,ecshop的template.php頁面遍歷所有可編輯區域,竟然沒有我添加的那塊內容。檢查了lib_template.php頁面裏的正則,發現了一些貓膩。程序通過正則表達式進行可編輯區域的獲取
$result = preg_match_all('/([\s|\S]{0,20})(<!--\\s#BeginLibraryItem\\s")([^"]+)("\\s-->)/',
$matches[2], $lib_matches, PREG_SET_ORDER);
$i = 0;
if ($result && $result > 0)
{
foreach ($lib_matches AS $k => $v)
{
$v[3] = strtolower($v[3]);
$libs[] = array('library' => $v[3], 'region' => $val, 'lib'=>basename(substr($v[3], 0, strpos($v[3], '.'))), 'sort_order' => $i);
$i++;
}
}
而我定義的可編輯區域的name中,攜帶了一些正則裏面的元素,比如“[]”,果斷去除該元素,發現程序也正常了,添加廣告列表易如反掌了。
總結一下:在ecshop裏面定義可編輯區域名稱時,一定不能使用正則所用到的符號,比如“[”,"]“等等