<?php
|
|
/**
|
* 管理中心模版相关公用函数库
|
*/
|
|
if (!defined('IN_ECS'))
|
{
|
die('Hacking attempt');
|
}
|
|
/* 可以设置内容的模板 */
|
$template_files = array(
|
'index.dwt',
|
'article.dwt',
|
'article_cat.dwt',
|
'brand.dwt',
|
'category.dwt',
|
'user_clips.dwt',
|
'compare.dwt',
|
'gallery.dwt',
|
'goods.dwt',
|
'group_buy_goods.dwt',
|
'group_buy_flow.dwt',
|
'group_buy_list.dwt',
|
'user_passport.dwt',
|
'pick_out.dwt',
|
'receive.dwt',
|
'respond.dwt',
|
'search.dwt',
|
'flow.dwt',
|
'snatch.dwt',
|
'user.dwt',
|
'tag_cloud.dwt',
|
'user_transaction.dwt',
|
'style.css',
|
'auction_list.dwt',
|
'auction.dwt',
|
'message_board.dwt',
|
'exchange_list.dwt',
|
);
|
|
/* 每个模板允许设置的库项目 */
|
$page_libs = array(
|
'article' => array(
|
'/library/ur_here.lbi' => 0,
|
'/library/search_form.lbi' => 0,
|
'/library/member.lbi' => 0,
|
'/library/recommend_best.lbi' => 3,
|
'/library/recommend_hot.lbi' => 3,
|
'/library/comments.lbi' => 0,
|
'/library/goods_related.lbi' => 0,
|
'/library/recommend_promotion.lbi' => 3,
|
'/library/history.lbi' => 0,
|
),
|
'article_cat' => array(
|
'/library/ur_here.lbi' => 0,
|
'/library/search_form.lbi' => 0,
|
'/library/member.lbi' => 0,
|
'/library/category_tree.lbi' => 0,
|
'/library/top10.lbi' => 0,
|
'/library/history.lbi' => 0,
|
'/library/recommend_best.lbi' => 3,
|
'/library/recommend_hot.lbi' => 3,
|
'/library/recommend_promotion.lbi' => 3,
|
'/library/promotion_info.lbi' => 0,
|
'/library/cart.lbi' => 0,
|
'/library/vote_list.lbi' => 0,
|
'/library/article_category_tree.lbi' => 0,
|
),
|
'brand' => array(
|
'/library/ur_here.lbi' => 0,
|
'/library/search_form.lbi' => 0,
|
'/library/member.lbi' => 0,
|
'/library/category_tree.lbi' => 0,
|
'/library/top10.lbi' => 0,
|
'/library/history.lbi' => 0,
|
'/library/recommend_best.lbi' => 3,
|
'/library/goods_list.lbi' => 0,
|
'/library/pages.lbi' => 0,
|
'/library/recommend_promotion.lbi' => 3,
|
'/library/promotion_info.lbi' => 0,
|
'/library/cart.lbi' => 0,
|
'/library/vote_list.lbi' => 0,
|
),
|
'category' => array(
|
'/library/ur_here.lbi' => 0,
|
'/library/search_form.lbi' => 0,
|
'/library/member.lbi' => 0,
|
'/library/category_tree.lbi' => 0,
|
'/library/top10.lbi' => 0,
|
'/library/history.lbi' => 0,
|
'/library/recommend_best.lbi' => 3,
|
'/library/recommend_hot.lbi' => 3,
|
'/library/goods_list.lbi' => 0,
|
'/library/pages.lbi' => 0,
|
'/library/recommend_promotion.lbi' => 3,
|
'/library/brands.lbi' => 3,
|
'/library/promotion_info.lbi' => 0,
|
'/library/cart.lbi' => 0,
|
'/library/vote_list.lbi' => 0
|
),
|
'compare' => array(
|
'/library/ur_here.lbi' => 0,
|
'/library/search_form.lbi' => 0,
|
),
|
'flow' => array(
|
'/library/ur_here.lbi' => 0,
|
'/library/search_form.lbi' => 0,
|
),
|
'index' => array(
|
'/library/ur_here.lbi' => 0,
|
'/library/search_form.lbi' => 0,
|
'/library/member.lbi' => 0,
|
'/library/new_articles.lbi' => 0,
|
'/library/category_tree.lbi' => 0,
|
'/library/top10.lbi' => 0,
|
'/library/invoice_query.lbi' => 0,
|
'/library/recommend_best.lbi' => 3,
|
'/library/recommend_new.lbi' => 3,
|
'/library/recommend_hot.lbi' => 3,
|
'/library/recommend_promotion.lbi' => 4,
|
'/library/group_buy.lbi' => 3,
|
'/library/auction.lbi' => 3,
|
'/library/brands.lbi' => 3,
|
'/library/promotion_info.lbi' => 0,
|
'/library/cart.lbi' => 0,
|
'/library/order_query.lbi' => 0,
|
'/library/email_list.lbi' => 0,
|
'/library/vote_list.lbi' => 0
|
),
|
'goods' => array(
|
'/library/ur_here.lbi' => 0,
|
'/library/search_form.lbi' => 0,
|
'/library/promotion_info.lbi' => 0,
|
'/library/cart.lbi' => 0,
|
'/library/member.lbi' => 0,
|
'/library/category_tree.lbi' => 0,
|
'/library/goods_attrlinked.lbi' => 0,
|
'/library/history.lbi' => 0,
|
'/library/goods_fittings.lbi' => 0,
|
'/library/goods_gallery.lbi' => 0,
|
'/library/goods_tags.lbi' => 0,
|
'/library/comments.lbi' => 0,
|
'/library/bought_goods.lbi' => 0,
|
'/library/bought_note_guide.lbi' => 0,
|
'/library/goods_related.lbi' => 0,
|
'/library/goods_article.lbi' => 0,
|
'/library/relatetag.lbi' => 0,
|
),
|
'search_result' => array(
|
'/library/ur_here.lbi' => 0,
|
'/library/search_form.lbi' => 0,
|
'/library/member.lbi' => 0,
|
'/library/category_tree.lbi' => 0,
|
'/library/promotion_info.lbi' => 0,
|
'/library/cart.lbi' => 0,
|
'/library/search_result.lbi' => 0,
|
'/library/top10.lbi' => 0,
|
'/library/search_advanced.lbi' => 0,
|
'/library/history.lbi' => 0,
|
'/library/pages.lbi' => 0,
|
),
|
'tag_cloud' => array(
|
'/library/ur_here.lbi' => 0,
|
'/library/search_form.lbi' => 0,
|
'/library/promotion_info.lbi' => 0,
|
'/library/cart.lbi' => 0,
|
'/library/member.lbi' => 0,
|
'/library/category_tree.lbi' => 0,
|
'/library/history.lbi' => 0,
|
'/library/top10.lbi' => 0,
|
'/library/recommend_best.lbi' => 3,
|
'/library/recommend_new.lbi' => 3,
|
'/library/recommend_hot.lbi' => 3,
|
'/library/recommend_promotion.lbi' => 3,
|
),
|
'group_buy_goods' => array(
|
'/library/ur_here.lbi' => 0,
|
'/library/search_form.lbi' => 0,
|
'/library/member.lbi' => 0,
|
'/library/category_tree.lbi' => 0,
|
'/library/promotion_info.lbi' => 0,
|
'/library/cart.lbi' => 0,
|
'/library/history.lbi' => 0,
|
),
|
'group_buy_list' => array(
|
'/library/ur_here.lbi' => 0,
|
'/library/search_form.lbi' => 0,
|
'/library/member.lbi' => 0,
|
'/library/category_tree.lbi' => 0,
|
'/library/promotion_info.lbi' => 0,
|
'/library/cart.lbi' => 0,
|
'/library/top10.lbi' => 0,
|
'/library/history.lbi' => 0,
|
),
|
'search' => array(
|
'/library/ur_here.lbi' => 0,
|
'/library/search_form.lbi' => 0,
|
'/library/member.lbi' => 0,
|
'/library/category_tree.lbi' => 0,
|
'/library/promotion_info.lbi' => 0,
|
'/library/cart.lbi' => 0,
|
'/library/top10.lbi' => 0,
|
'/library/history.lbi' => 0,
|
),
|
'snatch' => array(
|
'/library/ur_here.lbi' => 0,
|
'/library/search_form.lbi' => 0,
|
'/library/member.lbi' => 0,
|
'/library/category_tree.lbi' => 0,
|
'/library/promotion_info.lbi' => 0,
|
'/library/cart.lbi' => 0,
|
),
|
'auction_list' => array(
|
'/library/ur_here.lbi' => 0,
|
'/library/search_form.lbi' => 0,
|
'/library/member.lbi' => 0,
|
'/library/category_tree.lbi' => 0,
|
'/library/promotion_info.lbi' => 0,
|
'/library/cart.lbi' => 0,
|
'/library/history.lbi' => 0,
|
),
|
'auction' => array(
|
'/library/ur_here.lbi' => 0,
|
'/library/search_form.lbi' => 0,
|
'/library/member.lbi' => 0,
|
'/library/category_tree.lbi' => 0,
|
'/library/promotion_info.lbi' => 0,
|
'/library/cart.lbi' => 0,
|
'/library/top10.lbi' => 0,
|
'/library/history.lbi' => 0,
|
),
|
'message_board' => array(
|
'/library/ur_here.lbi' => 0,
|
'/library/search_form.lbi' => 0,
|
'/library/member.lbi' => 0,
|
'/library/category_tree.lbi' => 0,
|
'/library/promotion_info.lbi' => 0,
|
'/library/cart.lbi' => 0,
|
'/library/top10.lbi' => 0,
|
'/library/history.lbi' => 0,
|
'/library/message_list.lbi' => 10,
|
),
|
'exchange_list' => array(
|
'/library/ur_here.lbi' => 0,
|
'/library/cart.lbi' => 0,
|
'/library/category_tree.lbi' => 0,
|
'/library/history.lbi' => 0,
|
'/library/pages.lbi' => 0,
|
'/library/exchange_hot.lbi' => 5,
|
'/library/exchange_list.lbi' => 0,
|
),
|
);
|
|
/* 动态库项目 */
|
$dyna_libs = array(
|
'cat_goods',
|
'brand_goods',
|
'cat_articles',
|
'ad_position',
|
);
|
|
|
/**
|
* 获得模版的信息
|
*
|
* @access private
|
* @param string $template_name 模版名
|
* @param string $template_style 模版风格名
|
* @return array
|
*/
|
function get_template_info($template_name, $template_style='')
|
{
|
if (empty($template_style) || $template_style == '')
|
{
|
$template_style = '';
|
}
|
|
$info = array();
|
$ext = array('png', 'gif', 'jpg', 'jpeg');
|
|
$info['code'] = $template_name;
|
$info['screenshot'] = '';
|
$info['stylename'] = $template_style;
|
|
if ($template_style == '')
|
{
|
foreach ($ext AS $val)
|
{
|
if (file_exists('../themes/' . $template_name . "/images/screenshot.$val"))
|
{
|
$info['screenshot'] = '../themes/' . $template_name . "/images/screenshot.$val";
|
|
break;
|
}
|
}
|
}
|
else
|
{
|
foreach ($ext AS $val)
|
{
|
if (file_exists('../themes/' . $template_name . "/images/screenshot_$template_style.$val"))
|
{
|
$info['screenshot'] = '../themes/' . $template_name . "/images/screenshot_$template_style.$val";
|
|
break;
|
}
|
}
|
}
|
|
$css_path = '../themes/' . $template_name . '/style.css';
|
if ($template_style != '')
|
{
|
$css_path = '../themes/' . $template_name . "/style_$template_style.css";
|
}
|
if (file_exists($css_path) && !empty($template_name))
|
{
|
$arr = array_slice(file($css_path), 0, 11);
|
|
$template_name = explode(': ', $arr[1]);
|
$template_uri = explode(': ', $arr[2]);
|
$template_desc = explode(': ', $arr[3]);
|
$template_version = explode(': ', $arr[4]);
|
$template_author = explode(': ', $arr[5]);
|
$author_uri = explode(': ', $arr[6]);
|
$logo_filename = explode(': ', $arr[7]);
|
$template_type = explode(': ', $arr[8]);
|
$sign = explode(': ', $arr[9]);
|
|
|
$info['name'] = isset($template_name[1]) ? trim($template_name[1]) : '';
|
$info['uri'] = isset($template_uri[1]) ? trim($template_uri[1]) : '';
|
$info['desc'] = isset($template_desc[1]) ? trim($template_desc[1]) : '';
|
$info['version'] = isset($template_version[1]) ? trim($template_version[1]) : '';
|
$info['author'] = isset($template_author[1]) ? trim($template_author[1]) : '';
|
$info['author_uri'] = isset($author_uri[1]) ? trim($author_uri[1]) : '';
|
$info['logo'] = isset($logo_filename[1]) ? trim($logo_filename[1]) : '';
|
$info['type'] = isset($template_type[1]) ? trim($template_type[1]) : '';
|
$info['sign'] = isset($sign[1]) ? trim($sign[1]) : '';
|
|
}
|
else
|
{
|
$info['name'] = '';
|
$info['uri'] = '';
|
$info['desc'] = '';
|
$info['version'] = '';
|
$info['author'] = '';
|
$info['author_uri'] = '';
|
$info['logo'] = '';
|
}
|
|
return $info;
|
}
|
|
/**
|
* 获得模版文件中的编辑区域及其内容
|
*
|
* @access public
|
* @param string $tmp_name 模版名称
|
* @param string $tmp_file 模版文件名称
|
* @return array
|
*/
|
function get_template_region($tmp_name, $tmp_file, $lib=true)
|
{
|
global $dyna_libs;
|
|
$file = '../themes/' . $tmp_name . '/' . $tmp_file;
|
|
/* 将模版文件的内容读入内存 */
|
$content = file_get_contents($file);
|
|
/* 获得所有编辑区域 */
|
static $regions = array();
|
|
if (empty($regions))
|
{
|
$matches = array();
|
$result = preg_match_all('/(<!--\\s*TemplateBeginEditable\\sname=")([^"]+)("\\s*-->)/', $content, $matches, PREG_SET_ORDER);
|
|
if ($result && $result > 0)
|
{
|
foreach ($matches AS $key => $val)
|
{
|
if ($val[2] != 'doctitle' && $val[2] != 'head')
|
{
|
$regions[] = $val[2];
|
}
|
}
|
}
|
|
}
|
|
if (!$lib)
|
{
|
return $regions;
|
}
|
|
$libs = array();
|
/* 遍历所有编辑区 */
|
foreach ($regions AS $key => $val)
|
{
|
$matches = array();
|
$pattern = '/(<!--\\s*TemplateBeginEditable\\sname="%s"\\s*-->)(.*?)(<!--\\s*TemplateEndEditable\\s*-->)/s';
|
|
if (preg_match(sprintf($pattern, $val), $content, $matches))
|
{
|
/* 找出该编辑区域内所有库项目 */
|
$lib_matches = array();
|
|
$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++;
|
}
|
|
}
|
}
|
}
|
|
return $libs;
|
}
|
|
/**
|
* 将插件library从默认模板中移动到指定模板中
|
*
|
* @access public
|
* @param string $tmp_name 模版名称
|
* @param string $msg 如果出错,保存错误信息,否则为空
|
* @return Boolen
|
*/
|
function move_plugin_library($tmp_name, &$msg)
|
{
|
$sql = 'SELECT code, library FROM ' . $GLOBALS['ecs']->table('plugins') . " WHERE library > ''";
|
$rec = $GLOBALS['db']->query($sql);
|
$return_value = true;
|
$target_dir = ROOT_PATH . 'themes/' . $tmp_name;
|
$source_dir = ROOT_PATH . 'themes/' . $GLOBALS['_CFG']['template'];
|
while ($row = $GLOBALS['db']->fetchRow($rec))
|
{
|
//先移动,移动失败试则拷贝
|
if (!@rename($source_dir . $row['library'], $target_dir . $row['library']))
|
{
|
if (!@copy(ROOT_PATH . 'plugins/' . $row['code'] . '/temp' . $row['library'], $target_dir . $row['library']))
|
{
|
$return_value = false;
|
$msg .= "\n moving " . $row['library'] . ' failed';
|
}
|
}
|
}
|
}
|
|
/**
|
* 获得指定库项目在模板中的设置内容
|
*
|
* @access public
|
* @param string $lib 库项目
|
* @param array $libs 包含设定内容的数组
|
* @return void
|
*/
|
function get_setted($lib, &$arr)
|
{
|
$options = array('region' => '', 'sort_order' => 0, 'display' => 0);
|
|
foreach ($arr AS $key => $val)
|
{
|
if ($lib == $val['library'])
|
{
|
$options['region'] = $val['region'];
|
$options['sort_order'] = $val['sort_order'];
|
$options['display'] = 1;
|
|
break;
|
}
|
}
|
|
return $options;
|
}
|
|
/**
|
* 从相应模板xml文件中获得指定模板文件中的可编辑区信息
|
*
|
* @access public
|
* @param string $curr_template 当前模板文件名
|
* @param array $curr_page_libs 缺少xml文件时的默认编辑区信息数组
|
* @return array $edit_libs 返回可编辑的库文件数组
|
*/
|
function get_editable_libs($curr_template, $curr_page_libs)
|
{
|
global $_CFG;
|
$vals = array();
|
$edit_libs = array();
|
|
if ($xml_content = @file_get_contents(ROOT_PATH . 'themes/' . $_CFG['template'] . '/libs.xml'))
|
{
|
$p = xml_parser_create(); //把xml解析到数组
|
xml_parse_into_struct($p,$xml_content,$vals,$index);
|
xml_parser_free($p);
|
|
$i = 0;
|
for (; $i < sizeof($vals); $i++) //找到相应模板文件的位置
|
{
|
if ($vals[$i]['tag'] == 'FILE' && isset($vals[$i]['attributes']))
|
{
|
if ($vals[$i]['attributes']['NAME'] == $curr_template . '.dwt')
|
{
|
break;
|
}
|
}
|
|
}
|
|
while ($vals[++$i]['tag'] != 'FILE' || !isset($vals[$i]['attributes'])) //读出可编辑区库文件名称,放到一个数组中
|
{
|
if ($vals[$i]['tag'] == 'LIB')
|
{
|
$edit_libs[] = $vals[$i]['value'];
|
}
|
}
|
}
|
|
return $edit_libs;
|
}
|
?>
|