You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

496 lines
16 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
/**
* $Author: wayne $
* $Id: navigator.php 17217 2011-01-19 06:29:08Z wayne $
*/
define('IN_ASC', true);
require(dirname(__FILE__) . '/includes/init.php');
admin_priv('navigator');
$exc = new exchange($ecs->table("nav"), $db, 'id', 'name');
/*------------------------------------------------------ */
//-- 自定義導航欄列表
/*------------------------------------------------------ */
if ($_REQUEST['act'] == 'list')
{
$smarty->assign('ur_here', $_LANG['navigator']);
$smarty->assign('action_link', array('text' => $_LANG['add_new'], 'href' => 'navigator.php?act=add'));
$smarty->assign('full_page', 1);
$navdb = get_nav();
$smarty->assign('navdb', $navdb['navdb']);
$smarty->assign('filter', $navdb['filter']);
$smarty->assign('record_count', $navdb['record_count']);
$smarty->assign('page_count', $navdb['page_count']);
assign_query_info();
$smarty->display('navigator.htm');
}
/*------------------------------------------------------ */
//-- 自定義導航欄列表Ajax
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'query')
{
$navdb = get_nav();
$smarty->assign('navdb', $navdb['navdb']);
$smarty->assign('filter', $navdb['filter']);
$smarty->assign('record_count', $navdb['record_count']);
$smarty->assign('page_count', $navdb['page_count']);
$sort_flag = sort_flag($navdb['filter']);
$smarty->assign($sort_flag['tag'], $sort_flag['img']);
make_json_result($smarty->fetch('navigator.htm'), '', array('filter' => $navdb['filter'], 'page_count' => $navdb['page_count']));
}
/*------------------------------------------------------ */
//-- 自定義導航欄增加
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'add')
{
if (empty($_REQUEST['step']))
{
$rt = array('act'=>'add');
$sysmain = get_sysnav();
$smarty->assign('action_link', array('text' => $_LANG['go_list'], 'href' => 'navigator.php?act=list'));
$smarty->assign('ur_here', $_LANG['navigator']);
assign_query_info();
$smarty->assign('sysmain',$sysmain);
$smarty->assign('rt', $rt);
$smarty->display('navigator_add.htm');
}
elseif ($_REQUEST['step'] == 2)
{
$item_name = $_REQUEST['item_name'];
$item_url = $_REQUEST['item_url'];
$item_ifshow = $_REQUEST['item_ifshow'];
$item_opennew = $_REQUEST['item_opennew'];
$item_type = $_REQUEST['item_type'];
$vieworder = $db->getOne("SELECT max(vieworder) FROM ". $ecs->table('nav') . " WHERE type = '". $item_type ."'");
$item_vieworder = empty($_REQUEST['item_vieworder']) ? $vieworder+1 : $_REQUEST['item_vieworder'];
if($item_ifshow == 1 && $item_type == 'middle')
{
//如果設置為在中部顯示
$arr = analyse_uri($item_url); //分析URI
if($arr)
{
//如果為分類
set_show_in_nav($arr['type'], $arr['id'], 1); //設置顯示
$sql = "INSERT INTO " . $GLOBALS['ecs']->table('nav') . " (name,ctype,cid,ifshow,vieworder,opennew,url,type) VALUES('$item_name','".$arr['type']."','".$arr['id']."','$item_ifshow','$item_vieworder','$item_opennew','$item_url','$item_type')";
}
}
if(empty($sql))
{
$sql = "INSERT INTO " . $GLOBALS['ecs']->table('nav') . " (name,ifshow,vieworder,opennew,url,type) VALUES('$item_name','$item_ifshow','$item_vieworder','$item_opennew','$item_url','$item_type')";
}
$db->query($sql);
clear_cache_files();
$links[] = array('text' => $_LANG['navigator'], 'href' => 'navigator.php?act=list');
$links[] = array('text' => $_LANG['add_new'], 'href' => 'navigator.php?act=add');
sys_msg($_LANG['edit_ok'], 0, $links);
}
}
/*------------------------------------------------------ */
//-- 自定義導航欄編輯
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'edit')
{
$id = $_REQUEST['id'];
if (empty($_REQUEST['step']))
{
$rt = array('act'=>'edit','id'=>$id);
$row = $db->getRow("SELECT * FROM " . $GLOBALS['ecs']->table('nav') . " WHERE id='$id'");
$rt['item_name'] = $row['name'];
$rt['item_url'] = $row['url'];
$rt['item_vieworder'] = $row['vieworder'];
$rt['item_ifshow_'.$row['ifshow']] = 'selected';
$rt['item_opennew_'.$row['opennew']] = 'selected';
$rt['item_type_'.$row['type']] = 'selected';
$sysmain = get_sysnav();
$smarty->assign('action_link', array('text' => $_LANG['go_list'], 'href' => 'navigator.php?act=list'));
$smarty->assign('ur_here', $_LANG['navigator']);
assign_query_info();
$smarty->assign('sysmain',$sysmain);
$smarty->assign('rt', $rt);
$smarty->display('navigator_add.htm');
}
elseif ($_REQUEST['step'] == 2)
{
$item_name = $_REQUEST['item_name'];
$item_url = $_REQUEST['item_url'];
$item_ifshow = $_REQUEST['item_ifshow'];
$item_opennew = $_REQUEST['item_opennew'];
$item_type = $_REQUEST['item_type'];
$item_vieworder = (int)$_REQUEST['item_vieworder'];
$row = $db->getRow("SELECT ctype,cid,ifshow,type FROM " . $GLOBALS['ecs']->table('nav') . " WHERE id = '$id'");
$arr = analyse_uri($item_url);
if($arr)
{
//目標為分類
if($row['ctype'] == $arr['type'] && $row['cid'] == $arr['id'])
{
//沒有修改分類
if($item_type != 'middle')
{
//位置不在中部
set_show_in_nav($arr['type'], $arr['id'], 0);
}
}
else
{
//修改了分類
if($row['ifshow'] == 1 && $row['type'] == 'middle')
{
//原來在中部顯示
set_show_in_nav($row['ctype'], $row['cid'], 0); //設置成不顯示
}
elseif($row['ifshow'] == 0 && $row['type'] == 'middle')
{
//原來不顯示
}
}
//分類判斷
if($item_ifshow != is_show_in_nav($arr['type'], $arr['id']) && $item_type == 'middle')
{
set_show_in_nav($arr['type'], $arr['id'], $item_ifshow);
}
$sql = "UPDATE " . $GLOBALS['ecs']->table('nav') .
" SET name='$item_name',ctype='" . $arr['type'] . "',cid='" . $arr['id'] . "',ifshow='$item_ifshow',vieworder='$item_vieworder',opennew='$item_opennew',url='$item_url',type='$item_type' WHERE id='$id'";
}
else
{
//目標不是分類
if($row['ctype'] && $row['cid'])
{
//原來是分類
set_show_in_nav($row['ctype'], $row['cid'], 0);
}
$sql = "UPDATE " . $GLOBALS['ecs']->table('nav') .
" SET name='$item_name',ctype='',cid='',ifshow='$item_ifshow',vieworder='$item_vieworder',opennew='$item_opennew',url='$item_url',type='$item_type' WHERE id='$id'";
}
$db->query($sql);
clear_cache_files();
$links[] = array('text' => $_LANG['navigator'], 'href' => 'navigator.php?act=list');
sys_msg($_LANG['edit_ok'], 0, $links);
}
}
/*------------------------------------------------------ */
//-- 自定義導航欄刪除
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'del')
{
$id = (int)$_GET['id'];
$row = $db->getRow("SELECT ctype,cid,type FROM " . $GLOBALS['ecs']->table('nav') . " WHERE id = '$id' LIMIT 1");
if($row['type'] == 'middle' && $row['ctype'] && $row['cid'])
{
set_show_in_nav($row['ctype'], $row['cid'], 0);
}
$sql = " DELETE FROM " . $GLOBALS['ecs']->table('nav') . " WHERE id='$id' LIMIT 1";
$db->query($sql);
clear_cache_files();
ecs_header("Location: navigator.php?act=list\n");
exit;
}
/*------------------------------------------------------ */
//-- 編輯排序
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'edit_sort_order')
{
check_authz_json('nav');
$id = intval($_POST['id']);
$order = json_str_iconv(trim($_POST['val']));
/* 檢查輸入的值是否合法 */
if (!preg_match("/^[0-9]+$/", $order))
{
make_json_error(sprintf($_LANG['enter_int'], $order));
}
else
{
if ($exc->edit("vieworder = '$order'", $id))
{
clear_cache_files();
make_json_result(stripslashes($order));
}
else
{
make_json_error($db->error());
}
}
}
/*------------------------------------------------------ */
//-- 切換是否顯示
/*------------------------------------------------------ */
if ($_REQUEST['act'] == 'toggle_ifshow')
{
$id = intval($_POST['id']);
$val = intval($_POST['val']);
$row = $db->getRow("SELECT type,ctype,cid FROM " . $GLOBALS['ecs']->table('nav') . " WHERE id = '$id' LIMIT 1");
if($row['type'] == 'middle' && $row['ctype'] && $row['cid'])
{
set_show_in_nav($row['ctype'], $row['cid'], $val);
}
if (nav_update($id, array('ifshow' => $val)) != false)
{
clear_cache_files();
make_json_result($val);
}
else
{
make_json_error($db->error());
}
}
/*------------------------------------------------------ */
//-- 切換是否新窗口
/*------------------------------------------------------ */
if ($_REQUEST['act'] == 'toggle_opennew')
{
$id = intval($_POST['id']);
$val = intval($_POST['val']);
if (nav_update($id, array('opennew' => $val)) != false)
{
clear_cache_files();
make_json_result($val);
}
else
{
make_json_error($db->error());
}
}
function get_nav()
{
$result = get_filter();
if($result === false)
{
$filter['sort_by'] = empty($_REQUEST['sort_by']) ? 'type DESC, vieworder' : 'type DESC, '.trim($_REQUEST['sort_by']);
$filter['sort_order'] = empty($_REQUEST['sort_order']) ? 'ASC' : trim($_REQUEST['sort_order']);
$sql = "SELECT count(*) FROM " .$GLOBALS['ecs']->table('nav');
$filter['record_count'] = $GLOBALS['db']->getOne($sql);
/* 分頁大小 */
$filter = page_and_size($filter);
/* 查詢 */
$sql = "SELECT id, name, ifshow, vieworder, opennew, url, type".
" FROM ".$GLOBALS['ecs']->table('nav').
" ORDER by " . $filter['sort_by'] . ' ' . $filter['sort_order'] .
" LIMIT " . $filter['start'] . ',' . $filter['page_size'];
set_filter($filter, $sql);
}
else
{
$sql = $result['sql'];
$filter = $result['filter'];
}
$navdb = $GLOBALS['db']->getAll($sql);
$type = "";
$navdb2 = array();
foreach($navdb as $k=>$v)
{
if(!empty($type) && $type != $v['type'])
{
$navdb2[] = array();
}
$navdb2[] = $v;
$type = $v['type'];
}
$arr = array('navdb' => $navdb2, 'filter' => $filter, 'page_count' => $filter['page_count'], 'record_count' => $filter['record_count']);
return $arr;
}
/*------------------------------------------------------ */
//-- 排序相關
/*------------------------------------------------------ */
function sort_nav($a,$b)
{
return $a['vieworder'] > $b['vieworder'] ? 1 : -1;
}
/*------------------------------------------------------ */
//-- 獲得系統列表
/*------------------------------------------------------ */
function get_sysnav()
{
global $_LANG;
$sysmain = array(
array($_LANG['view_cart'],'flow.php'),
array($_LANG['pick_out'],'pick_out.php'),
array($_LANG['group_buy_goods'],'group_buy.php'),
array($_LANG['snatch'],'snatch.php'),
array($_LANG['tag_cloud'],'tag_cloud.php'),
array($_LANG['user_center'],'user.php'),
array($_LANG['wholesale'], 'wholesale.php'),
array($_LANG['activity'], 'activity.php'),
array($_LANG['myship'], 'myship.php'),
array($_LANG['message_board'], 'message.php'),
array($_LANG['quotation'], 'quotation.php'),
);
$sysmain[] = array('-','-');
$catlist = array_merge(cat_list(0, 0, false), array('-'), article_cat_list(0, 0, false));
foreach($catlist as $key => $val)
{
if (is_array($val)) {
$val['view_name'] = $val['cat_name'];
for($i=0;$i<$val['level'];$i++)
{
$val['view_name'] = '&nbsp;&nbsp;&nbsp;&nbsp;' . $val['view_name'];
}
$val['url'] = str_replace( '&amp;', '&', $val['url']);
$val['url'] = str_replace( '&', '&amp;', $val['url']);
}
@$sysmain[] = array($val['cat_name'], $val['url'], $val['view_name']);
}
return $sysmain;
}
/*------------------------------------------------------ */
//-- 列表項修改
/*------------------------------------------------------ */
function nav_update($id, $args)
{
if (empty($args) || empty($id))
{
return false;
}
return $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('nav'), $args, 'update', "id='$id'");
}
/*------------------------------------------------------ */
//-- 根據URI對導航欄項目進行分析確定其為商品分類還是文章分類
/*------------------------------------------------------ */
function analyse_uri($uri)
{
$uri = strtolower(str_replace('&amp;', '&', $uri));
$arr = explode('-', $uri);
switch($arr[0])
{
case 'category' :
return array('type' => 'c', 'id' => $arr[1]);
break;
case 'article_cat' :
return array('type' => 'a', 'id' => $arr[1]);
break;
default:
break;
}
list($fn, $pm) = explode('?', $uri);
if(strpos($uri, '&') === FALSE)
{
$arr = array($pm);
}
else
{
$arr = explode('&', $pm);
}
switch($fn)
{
case 'category.php' :
//商品分類
foreach($arr as $k => $v)
{
list($key, $val) = explode('=', $v);
if($key == 'id')
{
return array('type' => 'c', 'id'=> $val);
}
}
break;
case 'article_cat.php' :
//文章分類
foreach($arr as $k => $v)
{
list($key, $val) = explode('=', $v);
if($key == 'id')
{
return array('type' => 'a', 'id'=> $val);
}
}
break;
default:
//未知
return false;
break;
}
}
/*------------------------------------------------------ */
//-- 是否顯示
/*------------------------------------------------------ */
function is_show_in_nav($type, $id)
{
if($type == 'c')
{
$tablename = $GLOBALS['ecs']->table('category');
}
else
{
$tablename = $GLOBALS['ecs']->table('article_cat');
}
return $GLOBALS['db']->getOne("SELECT show_in_nav FROM $tablename WHERE cat_id = '$id'");
}
/*------------------------------------------------------ */
//-- 設置是否顯示
/*------------------------------------------------------ */
function set_show_in_nav($type, $id, $val)
{
if($type == 'c')
{
$tablename = $GLOBALS['ecs']->table('category');
}
else
{
$tablename = $GLOBALS['ecs']->table('article_cat');
}
$GLOBALS['db']->query("UPDATE $tablename SET show_in_nav = '$val' WHERE cat_id = '$id'");
clear_cache_files();
}
?>