ecshop 404页面设置的方法

404页面是HTTP状态码中的一种,简单的说就是当用户输入了错误的链接时返回的提示页面。别小看404,它会影响到流量,影响到网页排名,影响到用户体验,影响到xxoo…

什么是404错误
HTTP 404 错误意味着链接指向的网页不存在,即原始网页的URL失效,这种情况经常会发生,很难避免,比如说:网页URL生成规则改变、网页文件更名或移动位置、导入链接拼写错误等,导致原来的URL地址无法访问;当Web 服务器接到类似请求时,会返回一个404 状态码,告诉浏览器要请求的资源并不存在。但是,Web服务器默认的404错误页面,无论Apache还是IIS,均十分简陋、呆板且对用户不友好,无法给用户提供必要的信息以获取更多线索,无疑这会造成用户的流失。

404页面的作用
搜索引擎通过HTTP状态码来识别网页的状态。当搜索引擎获得了一个错误链接时,网站应该返回404状态码,告诉搜索引擎放弃对该链接的索引。而如果返回 200或302状态码,搜索引擎就会为该链接建立索引,这导致大量不同的链接指向了相同的网页内容。结果是,搜索引擎对该网站的信任度大幅降低。

如何检查自定义404页面能够返回“404”状态码
在自定义404错误页面设置完毕后,一定要检查一下其是不是能够正确地返回“404”状态码。检查的方法也相当简单,输入一个网站内不存在网页的url,查看一下HTTP Header的返回情况,确信其返回的是“404”状态码。

404页面的正确做法

Apache服务器404页面的设置方法
在.htaccess 文件中加入代码:ErrorDocument 404 /Error.html
建立一个简单的html404页面命名 Error.html
把 Error.html放置在网站根目录即可。

ecshop专题伪静态化的配置方法

伪静态的设置方法,需要看下服务器和虚拟主机是什么样的,是windows2003 还是windows2008的 或者是linux的,这样才能更好的去设置你网站的伪静态

下面PHP二次开发教大家如何去设置ecshop专题页面的伪静态

将ecshop专题伪静态化的规则方法
IIS规则:
RewriteRule ^(.*)/topic-([0-9]+).html$ $1/topic.php?topic_id=$2

Apache规则:
RewriteRule ^topic-([0-9]+).html$ topic.php?topic_id=$1 [QSA,L]

为了避免重复收录动态的页面,建议robots里加上

Disallow: /topic.php?

ECShop修改商品的近期购买记录显示所有

直接上修改方法,找到文件:includes/lib_insert.php

找到这句话:

[代码]php代码:

$sql = \'SELECT u.user_name, og.goods_number, oi.add_time, IF(oi.order_status IN (2, 3, 4), 0, 1) AS order_status \' .           \'FROM \' . $GLOBALS[\'ecs\']->table(\'order_info\') . \' AS oi LEFT JOIN \' . $GLOBALS[\'ecs\']->table(\'users\') . \' AS u ON oi.user_id = u.user_id, \' . $GLOBALS[\'ecs\']->table(\'order_goods\') . \' AS og \' .           \'WHERE oi.order_id = og.order_id AND \' . time() . \' - oi.add_time getAll($sql);

将其修改为:

[代码]php代码:

$sql = \'SELECT u.user_name, og.goods_number, oi.add_time, IF(oi.order_status IN (2, 3, 4), 0, 1) AS order_status \' .           \'FROM \' . $GLOBALS[\'ecs\']->table(\'order_info\') . \' AS oi LEFT JOIN \' . $GLOBALS[\'ecs\']->table(\'users\') . \' AS u ON oi.user_id = u.user_id, \' . $GLOBALS[\'ecs\']->table(\'order_goods\') . \' AS og \' .           \'WHERE oi.order_id = og.order_id AND og.goods_id = \' . $arr[\'id\'] . \' ORDER BY oi.add_time DESC LIMIT 50\';    $bought_notes = $GLOBALS[\'db\']->getAll($sql);

再找到下面这句:

[代码]php代码:

$sql = \'SELECT count(*) \' .           \'FROM \' . $GLOBALS[\'ecs\']->table(\'order_info\') . \' AS oi LEFT JOIN \' . $GLOBALS[\'ecs\']->table(\'users\') . \' AS u ON oi.user_id = u.user_id, \' . $GLOBALS[\'ecs\']->table(\'order_goods\') . \' AS og \' .           \'WHERE oi.order_id = og.order_id AND \' . time() . \' - oi.add_time getOne($sql);

将其修改为:

[代码]php代码:

$sql = \'SELECT count(*) \' .           \'FROM \' . $GLOBALS[\'ecs\']->table(\'order_info\') . \' AS oi LEFT JOIN \' . $GLOBALS[\'ecs\']->table(\'users\') . \' AS u ON oi.user_id = u.user_id, \' . $GLOBALS[\'ecs\']->table(\'order_goods\') . \' AS og \' .           \'WHERE oi.order_id = og.order_id AND og.goods_id = \' . $arr[\'id\'];    $count = $GLOBALS[\'db\']->getOne($sql);

找到文件:includes/goods.php

找到这段话:

[代码]php代码:

$sql = \'SELECT u.user_name, og.goods_number, oi.add_time, IF(oi.order_status IN (2, 3, 4), 0, 1) AS order_status \' .               \'FROM \' . $ecs->table(\'order_info\') . \' AS oi LEFT JOIN \' . $ecs->table(\'users\') . \' AS u ON oi.user_id = u.user_id, \' . $ecs->table(\'order_goods\') . \' AS og \' .               \'WHERE oi.order_id = og.order_id AND \' . time() . \' - oi.add_time  1) ? ($page-1) : 0) * 50 . \',50\';

将其修改为:

[代码]php代码:

$sql = \'SELECT u.user_name, og.goods_number, oi.add_time, IF(oi.order_status IN (2, 3, 4), 0, 1) AS order_status \' .               \'FROM \' . $ecs->table(\'order_info\') . \' AS oi LEFT JOIN \' . $ecs->table(\'users\') . \' AS u ON oi.user_id = u.user_id, \' . $ecs->table(\'order_goods\') . \' AS og \' .               \'WHERE oi.order_id = og.order_id AND og.goods_id = \' . $goods_id . \' ORDER BY oi.add_time DESC LIMIT \' . (($page > 1) ? ($page-1) : 0) * 50 . \',50\';

再往下找到这段:

[代码]php代码:

$sql = \'SELECT count(*) \' .               \'FROM \' . $ecs->table(\'order_info\') . \' AS oi LEFT JOIN \' . $ecs->table(\'users\') . \' AS u ON oi.user_id = u.user_id, \' . $ecs->table(\'order_goods\') . \' AS og \' .               \'WHERE oi.order_id = og.order_id AND \' . time() . \' - oi.add_time < 2592000 AND og.goods_id = \' . $goods_id;

将其修改为:

[代码]php代码:

$sql = \'SELECT count(*) \' .               \'FROM \' . $ecs->table(\'order_info\') . \' AS oi LEFT JOIN \' . $ecs->table(\'users\') . \' AS u ON oi.user_id = u.user_id, \' . $ecs->table(\'order_goods\') . \' AS og \' .               \'WHERE oi.order_id = og.order_id AND og.goods_id = \' . $goods_id;

最后更新缓存即可。

ecshop模板循环foreach的使用方法及参数详解

ecshop模板中foreach使用规则,他有以下几个参数 from ,item name iteration index,下面我们一起来看它的用法。

1:foreach使用规则,他有以下几个参数 from ,item name iteration index

2:如何使用foreach循环

  如果php要传递一个数组(如:$array)给ecshop的smarty模板.那么我们将通过from=$array 来接受,写法是
{foreach from = $array item = item}

3:ecshop中smarty的下标如何表示,请看下面的例子:
{foreach from = $array item = item name=name}
{$smarty.foreach.name.iteration}
{/foreach}

这里的iteration就是从1开始的下标,
如果要从0开始的下标,应该使用{$smarty.foreach.name.index}

4:如何判断是否是foreach循环的开始和结束,最后一个元素.
{if $smarty.foreach.last}表示循环的最后一个元素.{if $smarty.freach.first}表示循环的开始.

5:如何使用双重循环.

举例如下:

{foreach from = $test item =item}

{foreach from=$item.children item=child}
{$child.name}
{/foreach}
{/foreach}

上面五条是官方找到的,下面我通过几天的应用,总结出了ec模版中foreach的常见用法。

假如后台:$smarty->assign(\’test\’,$test);

{foreach from=$test item=list name=listone}

{$list}

{/foreach}

from 表示assign过来对应的第一个参数\’test\’,item 就是下面要循环的变量,name是用于访问foreach属性的foreach循环的名称,key当前键名的变量名。

但是我们经常会看到这样的写法:

{$list}

其实这两种都是一样的,只是加了 之后,你有没有发现用dreamwearver打开这些语句会以注释一样的灰色显示,这样一眼能看出标签;还有就是调试模版时候,用浏览器打开,加了会注释掉if foreach等这些,而不影响模版原来的样子,更能方便调试模版。

多重循环(两次循环):

{$cat.name}

只循环出前两条数据:

{$list.name}

foreachelse :

{$list.name}

no data

如果{foreach from=$categories item=list}一条数据也没有,那么就执行下面的{foreachelse}{/foreach}里面的内容。

ECSHOP发货同步支付宝接口【支持多次付款同步发货】

一、在数据库order_info中添加trade_no 字段
SQL语句:
[代码]sql代码:

ALTER TABLE `ec_order_info` ADD COLUMN `trade_no`  varchar(100) NOT NULL DEFAULT \'\' AFTER `pay_name`;

注意:ec_order_info “ec_” 改成自己的数据库表前缀

二、修改 admin/order.php 文件

1.查找以下代码
[代码]sql代码:

     $smarty->assign(\'action_list\', $act_list);    /* 模板赋值 */    $smarty->assign(\'delivery_order\', $delivery_order);    $smarty->assign(\'goods_list\', $goods_list);    $smarty->assign(\'delivery_id\', $delivery_id); // 发货单id

2.代码之上添加以下代码
[代码]php代码:

    /*判断支付方式是否支付宝*/    $alipay    = false;    $order     = order_info($delivery_order[\'order_id\']);  //根据订单ID查询订单信息,返回数组$order    $payment   = payment_info($order[\'pay_id\']);           //取得支付方式信息    if($payment[\'pay_code\'] == \"alipay\" && $delivery_order[\'status\'] == 2 && !empty($order[\'trade_no\']))           {        $alipay    = true;        }    $smarty->assign(\'alipay\', $alipay);

三、 上传附件代码直接覆盖 OK 测试一下吧

2.7.2-gbk.rar

2.7.2-utf-8.rar

ecshop init.php的代码详解

 在includes/init.php目录下

  因为工作原因,需要对ecshop二次开发,顺便记录一下对ecshop源代码的一些分析:

  首先是init.php文件,这个文件在ecshop每个页面都会 调用到,习惯就先分析它:

[代码]php代码:

= \'5.1\' && !empty($timezone)){    date_default_timezone_set($timezone);//date_default_timezone_set 设置时区}//$_SERVER[\'PHP_SELF\']返回当前页面,获取$_SERVER[\'PHP_SELF\']最好用htmlspecialchars过滤一下,存在XSS漏洞$php_self = isset($_SERVER[\'PHP_SELF\']) ? $_SERVER[\'PHP_SELF\'] : $_SERVER[\'SCRIPT_NAME\'];if (\'/\' == substr($php_self, -1))//如果是\"/\"结尾,则加上index.php{    $php_self .= \'index.php\';}define(\'PHP_SELF\', $php_self);//放入常量require(ROOT_PATH . \'includes/inc_constant.php\');//包含预定义常量文件require(ROOT_PATH . \'includes/cls_ecshop.php\');//基础类 文件require(ROOT_PATH . \'includes/cls_error.php\');//错误类 文件require(ROOT_PATH . \'includes/lib_time.php\');//时间函数require(ROOT_PATH . \'includes/lib_base.php\');//基础函数库require(ROOT_PATH . \'includes/lib_common.php\');//基础函数库require(ROOT_PATH . \'includes/lib_main.php\');//公用函数库require(ROOT_PATH . \'includes/lib_insert.php\');//动态内容函数库require(ROOT_PATH . \'includes/lib_goods.php\');//商品相关函数库require(ROOT_PATH . \'includes/lib_article.php\');//文章及文章分类相关函数库/* 对用户传入的变量进行转义操作。*/if (!get_magic_quotes_gpc()){    if (!empty($_GET))    {        $_GET  = addslashes_deep($_GET);    }    if (!empty($_POST))    {        $_POST = addslashes_deep($_POST);    }    $_COOKIE   = addslashes_deep($_COOKIE);    $_REQUEST  = addslashes_deep($_REQUEST);}/* 创建 ECSHOP 对象 */$ecs = new ECS($db_name, $prefix);//参数说明:数据库名 表前缀define(\'DATA_DIR\', $ecs->data_dir());//数据目录define(\'IMAGE_DIR\', $ecs->image_dir());//图片目录/* 初始化数据库类 */require(ROOT_PATH . \'includes/cls_mysql.php\');$db = new cls_mysql($db_host, $db_user, $db_pass, $db_name);/* 设置不允许进行缓存的表 */$db->set_disable_cache_tables(array($ecs->table(\'sessions\'), $ecs->table(\'sessions_data\'), $ecs->table(\'cart\')));$db_host = $db_user = $db_pass = $db_name = NULL;/* 创建错误处理对象 */$err = new ecs_error(\'message.dwt\');/* 载入系统参数 */$_CFG = load_config(); //载入配置信息函数在lib_common.php/* 载入语言文件 */require(ROOT_PATH . \'languages/\' . $_CFG[\'lang\'] . \'/common.php\');if ($_CFG[\'shop_closed\'] == 1){    /* 商店关闭了,输出关闭的消息 */    header(\'Content-type: text/html; charset=\'.EC_CHARSET);    die(\'

\' . $_LANG[\'shop_closed\'] . \'

\' . $_CFG[\'close_comment\'] . \'

\');}//判断是否为搜索引擎蜘蛛 函数在lib_main.phpif (is_spider()){ /* 如果是蜘蛛的访问,那么默认为访客方式,并且不记录到日志中 */ if (!defined(\'INIT_NO_USERS\')) { define(\'INIT_NO_USERS\', true); /* 整合UC后,如果是蜘蛛访问,初始化UC需要的常量 */ if($_CFG[\'integrate_code\'] == \'ucenter\') { $user = & init_users(); } } $_SESSION = array(); $_SESSION[\'user_id\'] = 0; $_SESSION[\'user_name\'] = \'\'; $_SESSION[\'email\'] = \'\'; $_SESSION[\'user_rank\'] = 0; $_SESSION[\'discount\'] = 1.00;}//非搜索引擎蜘蛛,记录sessionif (!defined(\'INIT_NO_USERS\')){ /* 初始化session */ include(ROOT_PATH . \'includes/cls_session.php\'); $sess = new cls_session($db, $ecs->table(\'sessions\'), $ecs->table(\'sessions_data\')); define(\'SESS_ID\', $sess->get_session_id());}//如果使用Smartyif (!defined(\'INIT_NO_SMARTY\')){ header(\'Cache-control: private\'); header(\'Content-type: text/html; charset=\'.EC_CHARSET); /* 创建 Smarty 对象。*/ require(ROOT_PATH . \'includes/cls_template.php\'); $smarty = new cls_template; $smarty->cache_lifetime = $_CFG[\'cache_time\'];//缓存时间 $smarty->template_dir = ROOT_PATH . \'themes/\' . $_CFG[\'template\'];//模板所在 $smarty->cache_dir = ROOT_PATH . \'temp/caches\';//缓存所在 $smarty->compile_dir = ROOT_PATH . \'temp/compiled\';//模板编译后的文件所在 if ((DEBUG_MODE & 2) == 2)//如果常量DEBUG_MODE值为 2、3、6、7.时 { $smarty->direct_output = true; //不使用缓存直接输出 $smarty->force_compile = true; //强行编译 } else { $smarty->direct_output = false; $smarty->force_compile = false; } $smarty->assign(\'lang\', $_LANG); $smarty->assign(\'ecs_charset\', EC_CHARSET); if (!empty($_CFG[\'stylename\']))//如果自己定义样式文件就用自己的 { $smarty->assign(\'ecs_css_path\', \'themes/\' . $_CFG[\'template\'] . \'/style_\' . $_CFG[\'stylename\'] . \'.css\'); } else { $smarty->assign(\'ecs_css_path\', \'themes/\' . $_CFG[\'template\'] . \'/style.css\'); }}//非搜索引擎爬虫,记录用户信息if (!defined(\'INIT_NO_USERS\')){ /* 会员信息 初始化会员数据 lib_common.php */ $user =& init_users(); if (!isset($_SESSION[\'user_id\'])) { /* 获取投放站点的名称 */ $site_name = isset($_GET[\'from\']) ? $_GET[\'from\'] : addslashes($_LANG[\'self_site\']); $from_ad = !empty($_GET[\'ad_id\']) ? intval($_GET[\'ad_id\']) : 0; $_SESSION[\'from_ad\'] = $from_ad; // 用户点击的广告ID $_SESSION[\'referer\'] = stripslashes($site_name); // 用户来源 unset($site_name); if (!defined(\'INGORE_VISIT_STATS\')) { visit_stats(); } } if (empty($_SESSION[\'user_id\'])) { if ($user->get_cookie()) { /* 如果会员已经登录并且还没有获得会员的帐户余额、积分以及优惠券 */ if ($_SESSION[\'user_id\'] > 0) { update_user_info(); } } else { $_SESSION[\'user_id\'] = 0; $_SESSION[\'user_name\'] = \'\'; $_SESSION[\'email\'] = \'\'; $_SESSION[\'user_rank\'] = 0; $_SESSION[\'discount\'] = 1.00; if (!isset($_SESSION[\'login_fail\'])) { $_SESSION[\'login_fail\'] = 0; } } } /* 设置推荐会员 */ if (isset($_GET[\'u\'])) { set_affiliate(); } if (isset($smarty)) { $smarty->assign(\'ecs_session\', $_SESSION); }}if ((DEBUG_MODE & 1) == 1)//如果常量DEBUG_MODE值为 1、3、5、7.时{ error_reporting(E_ALL);//报告全部错误}else{ error_reporting(E_ALL ^ E_NOTICE); //报告除E_NOTICE以外的所有错误}if ((DEBUG_MODE & 4) == 4)//如果常量DEBUG_MODE值为 4、5、6、7.时,调试程序{ include(ROOT_PATH . \'includes/lib.debug.php\');//}/* 判断是否支持 Gzip 模式 如果使用SMARTY同时设置了网页压缩,则启用压缩 */if (!defined(\'INIT_NO_SMARTY\') && gzip_enabled()){ ob_start(\'ob_gzhandler\');//压缩后放入缓冲区}else{ ob_start();//打开缓冲区,把下面要显示的内容先缓在服务器}/*ob_start相关函数了解:1、Flush:刷新缓冲区的内容,输出。函数格式:flush()说明:这个函数经常使用,效率很高。2、ob_start :打开输出缓冲区函数格式:void ob_start(void)说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。、ob_get_contents :返回内部缓冲区的内容。使用方法:string ob_get_contents(void)说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE 。4、ob_get_length:返回内部缓冲区的长度。使用方法:int ob_get_length(void)说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活。则返回 FALSE。5、ob_end_flush :发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区。使用方法:void ob_end_flush(void)说明:这个函数发送输出缓冲区的内容(如果有的话)。6、ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区使用方法:void ob_end_clean(void)说明:这个函数不会输出内部缓冲区的内容而是把它删除!7、ob_implicit_flush:打开或关闭绝对刷新使用方法:void ob_implicit_flush ([int flag])说明:使用过Perl的人都知道$|=x的意义,这个字符串可以打开/关闭缓冲区,而ob_implicit_flush函数也和那个一样,默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()*/?>

ecshop模板里截取字符串的方法

标题字符串的截取基本上时所有网站建设都会遇到的问题,每个系统都有不同的方法。总的来说一般有两种方法,在服务端截取和客户端截取。ecshop也是这两种方式,下面来说下:

服务端截取字符串

这个是写在Php里的,就是在读取标题字段的时候进行截取,一般你可以自己写截取多少个,也可以使用系统设置的。截取的函数是substr。像article里的short_title和goods里的short_title都是这样来的。

客户端截取
这个需要使用smarty的标签:truncate,比如:{$article.title|truncate:30}表示截取标题前30个字符

给支付宝接口增加收货地址等参数,跳转到支付页不需再次填写地址 …

适用范围:适用于中介担保支付(2.7版本)

官方的支付宝接口里没有挂地址,收货人,邮编等参数,从而到了支付页面还要填写一遍地址,收货人,比较的麻烦

增加地址,收货人参数后就不再重复劳动了。

修改以下地方:

1.flow.php

找到
[代码]php代码:

/* 插入支付日志 */$order[\'log_id\'] = insert_pay_log($new_order_id, $order[\'order_amount\'], PAY_ORDER);

在其后加入:
[代码]php代码:

/* 取得收货区域(国家/省份/城市等)*/$order[\'buyer_region\'] = get_buyer_region($new_order_id);

在flow.php文件底部加入如下函数:

[代码]php代码:

/*** 取得收货地址区域名  2009-11-10* @param $order_id 订单号* @return string*/function get_buyer_region($order_id){    /* 取得区域名 */    $sql = \"SELECT concat(IFNULL(c.region_name, \'\'),IFNULL(p.region_name, \'\'), \" .                    \" IFNULL(t.region_name, \'\'), IFNULL(d.region_name, \'\')) AS region \" .                \"FROM \" . $GLOBALS[\'ecs\']->table(\'order_info\') . \" AS o \" .                    \"LEFT JOIN \" . $GLOBALS[\'ecs\']->table(\'region\') . \" AS c ON o.country = c.region_id \" .                    \"LEFT JOIN \" . $GLOBALS[\'ecs\']->table(\'region\') . \" AS p ON o.province = p.region_id \" .                    \"LEFT JOIN \" . $GLOBALS[\'ecs\']->table(\'region\') . \" AS t ON o.city = t.region_id \" .                    \"LEFT JOIN \" . $GLOBALS[\'ecs\']->table(\'region\') . \" AS d ON o.district = d.region_id \" .                \"WHERE o.order_id = \'$order_id\'\";    return $GLOBALS[\'db\']->getOne($sql);}

2.includesmodulespaymentalipy.php

找到
[代码]php代码:

\'seller_email\'      => $payment[\'alipay_account\'],

在其后增加如下配置:
[代码]php代码:

/* 收货人,地址信息*/\'receive_name\'         => $order[\'consignee\'],\'receive_address\'    => $order[\'buyer_region\'].$order[\'address\'],\'receive_zip\'    => $order[\'zipcode\'],

ps:地址是urldecode过的

官方原版的支付宝地址如下:

https://www.alipay.com/cooperate/gateway.do?_input_charset=utf-8&agent=C4335319945672464113&logistics_fee=0&logistics_payment=BUYER_PAY&logistics_type=EXPRESS&notify_url=http://127.0.0.1/ecshop/respond.php?code=alipay&out_trade_no=200911105213010&partner=2088002692045431&payment_type=1&price=16.00&quantity=1&return_url=http://127.0.0.1/ecshop/[email protected]&service=trade_create_by_buyer&subject=2009111052130&sign=8894ebd13e248d043f90a6e0c41b6a68&sign_type=MD5

支付宝的地址就变成如下:

https://www.alipay.com/cooperate/gateway.do?_input_charset=utf-8&agent=C4335319945672464113&logistics_fee=0&logistics_payment=BUYER_PAY&logistics_type=EXPRESS&notify_url=http://127.0.0.1/ecshop/respond.php?code=alipay&out_trade_no=200911105213010&partner=2088002692045431&payment_type=1&price=16.00&quantity=1&receive_address=中国广东深圳南山区竹子林1050号&receive_name=侯琳琳&receive_zip=8126743&return_url=http://127.0.0.1/ecshop/[email protected]&service=trade_create_by_buyer&subject=2009111052130&sign=8894ebd13e248d043f90a6e0c41b6a68&sign_type=MD5

ecshop商品类型标记价格后前台展示凌乱的解决方法

修改之前的展现形式:

修改方法,找到文件:includes/lib_goods.php

找到这个方法:

function get_goods_properties

将里面的这句话:

[代码]php代码:

/* 获得商品的规格 */    $sql = \"SELECT a.attr_id, a.attr_name, a.attr_group, a.is_linked, a.attr_type, \".                \"g.goods_attr_id, g.attr_value, g.attr_price \" .            \'FROM \' . $GLOBALS[\'ecs\']->table(\'goods_attr\') . \' AS g \' .            \'LEFT JOIN \' . $GLOBALS[\'ecs\']->table(\'attribute\') . \' AS a ON a.attr_id = g.attr_id \' .            \"WHERE g.goods_id = \'$goods_id\' \" .            \'ORDER BY a.sort_order, g.attr_price, g.goods_attr_id\';

修改为:

[代码]php代码:

/* 获得商品的规格 */    $sql = \"SELECT a.attr_id, a.attr_name, a.attr_group, a.is_linked, a.attr_type, \".                \"g.goods_attr_id, g.attr_value, g.attr_price \" .            \'FROM \' . $GLOBALS[\'ecs\']->table(\'goods_attr\') . \' AS g \' .            \'LEFT JOIN \' . $GLOBALS[\'ecs\']->table(\'attribute\') . \' AS a ON a.attr_id = g.attr_id \' .            \"WHERE g.goods_id = \'$goods_id\' \" .            \'ORDER BY a.sort_order, g.goods_attr_id\';

修改完成后,清理缓存,刷新页面即可看到效果。

ecshop中{insert name=\\\’history\\\’}修改方法

{insert name=\’history\’} ,是用来显示浏览历史的。
跟踪代码会发现,控制语句是在 includes/lib_insert.php 文件。这个文件是ECSHOP 动态内容函数库。

里面定义各个函数的格式都是 function insert_*() ,每个函数都是一个功能控制模块,
在模板中可以使用 {insert name=‘*’ } 的方法进行调用。

注:PHP二次开发要回家过端午节了,暂停更新博客两天,感谢大家的支持。端午节快乐!

ecshop模板判读某个元素在不在数组内的方法

判断方法:
[代码]xml代码:

 {if in_array($yuansu,$array)}      这里填写元素在数组内运行的代码{else}     这里填写元素不在数组内运行的代码{/if}

经测试,可以。
不过对于smarty还有一种方法; {if $current_item|in_array:$selected_array}
这个据说在smarty中可以,不过在ecshop中测试,会报错,可能ecshop的开发人员对smarty做过更改。

ECSHOP商品页购买记录的每页条数修改方法

ECSHOP商品详情页的购买记录,默认显示5条销售记录,就开始翻页,

想改成显示10条记录后再翻页,修改方法如下:

首先来修改 includes/lib_insert.php 文件里的 insert_bought_notes($arr) 函数部分

找到
[代码]php代码:

\' ORDER BY oi.add_time DESC LIMIT 5\'


[代码]php代码:

$pager[\'size\']         = $size = 5;

将那个 5 都改成 10

接着打开 /goods.php 文件,
找到($page-1) : 0) * 5. \’,5\’;
修改为($page-1) : 0) * 10 . \’,10\’;

找到$pager[\’size\’] = $size = 5;
修改为$pager[\’size\’] = $size = 10;

然后刷新缓存即可。

ecshop忘记管理员密码的解决办法

本文讲解的是使用phpmyadmin修改忘记的管理员密码。服务器可以上传一个phpmyadmin,虚拟主机一般会有的,在数据库高级管理里。

1、进入phpmyadmin,进入ecshop的数据库,进入表ecs_admin_user 打开,如下图

2、找到ID为1的那个记录,可能你的不是叫admin,但user_id为1的才是最高权限的管理员。

3、点击编辑,修改password字段,前面的函数选择 MD5 ,输入你要设置的新密码,如111111 ,下图 ① 。另外,重要的一部,修改ec_salt字段 ,勾选后边的框,如下图 ② 。因为密码不仅是设置的密码MD5加密,还包含一个随机字符段,这里打钩以后才没有了那个随机字符串。

4、点击执行,这样你就可以用你设置的新密码去登陆后台了。

ecshop团购商品调用商品的原价及详细信息

找到文件:/includes/lib_goods.php

找到函数:
[代码]php代码:

function group_buy_info($group_buy_id, $current_num = 0)

再函数的结尾处看到这样一段话:
[代码]php代码:

$group_buy[\'start_time\'] = $group_buy[\'formated_start_date\'];    $group_buy[\'end_time\'] = $group_buy[\'formated_end_date\'];

再起下方加入这样一段话:

[代码]php代码:

    //调用团购商品原价    $group_buy[\'shop_price\'] = $GLOBALS[\'db\']->getOne(\"select shop_price from ecs_goods where goods_id=\".$group_buy[\'goods_id\']);        //调用商品的详细信息    $group_buy[\'goods_desc\'] = $GLOBALS[\'db\']->getOne(\"select goods_desc from ecs_goods where goods_id=\".$group_buy[\'goods_id\']);

找到模板文件:group_buy_goods.dwt

通过这样调用原价:{$group_buy.shop_price}

通过这样调用商品的描述:{$group_buy.goods_desc}

ecshop IIS伪静态实现方法

1.下载软件:isapi_rwl_x86_0078.msi
提示:可以下载免费版的
2.安装到服务器,默认安装即可
3.默认安装的目录是:C:Program FilesHelicon
到目录:C:Program FilesHeliconISAPI_Rewrite 找到httpd.ini文件,把只读属性去掉。打开此文件,把里面的内容修改成:

[代码]xml代码:

[ISAPI_Rewrite]

# 为了确保重写规则不影响服务器上的其他站点
# 请将下面的语句前的#号去掉,并将(?:www.)?admin.com改为商店所在域名

#RewriteCond %{HTTP:Host} (?:www.)?yjgw365.com

RewriteRule ^(.*)/index.html$                $1/index.php          [I]                      
RewriteRule ^(.*)/category$                  $1/index.php          [I]
RewriteRule ^(.*)/feed-c([0-9]+).xml$        $1/feed.php?cat=$2    [I]
RewriteRule ^(.*)/feed-b([0-9]+).xml$        $1/feed.php?brand=$2 [I]
RewriteRule ^(.*)/feed.xml$                  $1/feed.php           [I]
RewriteRule ^(.*)/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*)-([0-9]+)-(.+)-([a-zA-Z]+)(.*).html$    $1/category.php?id=$2&brand=$3&price_min=$4&price_max=$5&filter_attr=$6&page=$7&sort=$8&order=$9 [I]
RewriteRule ^(.*)/category-([0-9]+)-b([0-9]+)-min([0-9]+)-max([0-9]+)-attr([^-]*).html$                            $1/category.php?id=$2&brand=$3&price_min=$4&price_max=$5&filter_attr=$6                          [I]
RewriteRule ^(.*)/category-([0-9]+)-b([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*).html$                                $1/category.php?id=$2&brand=$3&page=$4&sort=$5&order=$6                                          [I]
RewriteRule ^(.*)/category-([0-9]+)-b([0-9]+)-([0-9]+)(.*).html$                                        $1/category.php?id=$2&brand=$3&page=$4                                                           [I]
RewriteRule ^(.*)/category-([0-9]+)-b([0-9]+)(.*).html$                                            $1/category.php?id=$2&brand=$3                                                                   [I]
RewriteRule ^(.*)/category-([0-9]+)(.*).html$                                 $1/category.php?id=$2                              [I]
RewriteRule ^(.*)/goods-([0-9]+)(.*).html$                                  $1/goods.php?id=$2  
RewriteRule ^(.*)/union-([0-9]+)(.*).html$                                  $1/union.php?user_id=$2  
RewriteRule ^(.*)/union2-([0-9]+)(.*).html$                                  $1/union2.php?user_id=$2                                 [I]
RewriteRule ^(.*)/article_cat-([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+)(.*).html$ $1/article_cat.php?id=$2&page=$3&sort=$4&order=$5 [I]
RewriteRule ^(.*)/article_cat-([0-9]+)-([0-9]+)(.*).html$                   $1/article_cat.php?id=$2&page=$3                   [I]
RewriteRule ^(.*)/article_cat-([0-9]+)(.*).html$                            $1/article_cat.php?id=$2                           [I]
RewriteRule ^(.*)/article-([0-9]+)(.*).html$                                $1/article.php?id=$2                               [I]
RewriteRule ^(.*)/brand-([0-9]+)-c([0-9]+)-([0-9]+)-(.+)-([a-zA-Z]+).html   $1/brand.php?id=$2&cat=$3&page=$4&sort=$5&order=$6 [I]
RewriteRule ^(.*)/brand-([0-9]+)-c([0-9]+)-([0-9]+)(.*).html                $1/brand.php?id=$2&cat=$3&page=$4                  [I]
RewriteRule ^(.*)/brand-([0-9]+)-c([0-9]+)(.*).html                         $1/brand.php?id=$2&cat=$3                          [I]
RewriteRule ^(.*)/brand-([0-9]+)(.*).html                                   $1/brand.php?id=$2                                 [I]
RewriteRule ^(.*)/tag-(.*).html                                             $1/search.php?keywords=$2                          [I]
RewriteRule ^(.*)/snatch-([0-9]+).html$                                     $1/snatch.php?id=$2                                [I]
RewriteRule ^(.*)/group_buy-([0-9]+).html$                                  $1/group_buy.php?act=view&id=$2                    [I]
RewriteRule ^(.*)/auction-([0-9]+).html$                                    $1/auction.php?act=view&id=$2                      [I]

然后复制一份到网站根目录。

4.进入ecshop后台——商店设置——基本设置——URL重写,修改为:简单重写。

5.清理一下网站的缓存,刷新网站,既可以看到效果。

ecshop去掉底部乱跳的powered by ecshop版权

找到文件:js/common.js

找到这个方法:

[代码]js代码:

onload = function(){    var link_arr = document.getElementsByTagName(String.fromCharCode(65));    var link_str;    var link_text;    var regg, cc;    var rmd, rmd_s, rmd_e, link_eorr = 0;    var e = new Array(97, 98, 99,                      100, 101, 102, 103, 104, 105, 106, 107, 108, 109,                      110, 111, 112, 113, 114, 115, 116, 117, 118, 119,                      120, 121, 122                      );  try  {    for(var i = 0; i < link_arr.length; i++)    {      link_str = link_arr[i].href;      if (link_str.indexOf(String.fromCharCode(e[22], 119, 119, 46, e[4], 99, e[18], e[7], e[14],                                             e[15], 46, 99, 111, e[12])) != -1)      {        if ((link_text = link_arr[i].innerText) == undefined)        {            throw \"noIE\";        }        regg = new RegExp(String.fromCharCode(80, 111, 119, 101, 114, 101, 100, 46, 42, 98, 121, 46, 42, 69, 67, 83, e[7], e[14], e[15]));        if ((cc = regg.exec(link_text)) != null)        {          if (link_arr[i].offsetHeight == 0)          {            break;          }          link_eorr = 1;          break;        }      }      else      {        link_eorr = link_eorr ? 0 : link_eorr;        continue;      }    }  } // IE  catch(exc)  {    for(var i = 0; i < link_arr.length; i++)    {      link_str = link_arr[i].href;      if (link_str.indexOf(String.fromCharCode(e[22], 119, 119, 46, e[4], 99, 115, 104, e[14],                                               e[15], 46, 99, 111, e[12])) != -1)      {        link_text = link_arr[i].textContent;        regg = new RegExp(String.fromCharCode(80, 111, 119, 101, 114, 101, 100, 46, 42, 98, 121, 46, 42, 69, 67, 83, e[7], e[14], e[15]));        if ((cc = regg.exec(link_text)) != null)        {          if (link_arr[i].offsetHeight == 0)          {            break;          }          link_eorr = 1;          break;        }      }      else      {        link_eorr = link_eorr ? 0 : link_eorr;        continue;      }    }  } // FF  try  {    rmd = Math.random();    rmd_s = Math.floor(rmd * 10);    if (link_eorr != 1)    {      rmd_e = i - rmd_s;      link_arr[rmd_e].href = String.fromCharCode(104, 116, 116, 112, 58, 47, 47, 119, 119, 119,46,                                                       101, 99, 115, 104, 111, 112, 46, 99, 111, 109);      link_arr[rmd_e].innerHTML = String.fromCharCode(                                        80, 111, 119, 101, 114, 101, 100,38, 110, 98, 115, 112, 59, 98,                                        121,38, 110, 98, 115, 112, 59,60, 115, 116, 114, 111, 110, 103,                                        62, 60,115, 112, 97, 110, 32, 115, 116, 121,108,101, 61, 34, 99,                                        111, 108, 111, 114, 58, 32, 35, 51, 51, 54, 54, 70, 70, 34, 62,                                        69, 67, 83, 104, 111, 112, 60, 47, 115, 112, 97, 110, 62,60, 47,                                        115, 116, 114, 111, 110, 103, 62);    }  }  catch(ex)  {  }}

把它注释掉即可

修改ecshop后台表格鼠标滑过颜色

效果如图:
ecshop默认的效果图:

默认的效果很不明显,不仔细看根本看不出来。

修改后的效果图:

修改后,效果很明显。

修改方法如下:

找到文件:admin/templates/pagefooter.htm

在里面找到这样一句:
[代码]xml代码:

if (row.cells[i].tagName != \"TH\") row.cells[i].style.backgroundColor = \'#F4FAFB\';

修改为:
[代码]xml代码:

if (row.cells[i].tagName != \"TH\") row.cells[i].style.backgroundColor = \'#bbdde5\';

即修改后面的颜色值即可。

修改完,刷新,即可以看到效果。

修改部分ecshop代码让ecshop支持PHP5.5及以上版本

php版本已经更新到7.0了,使用php5.2/5.3的人越来越少,更多的人转向使用更高的php版本。可以通过修改部分ecshop代码让其支持PHP5.5及以上版本。

1、Deprecated:Assigning the return value of new by reference is deprecated in F:xampphtdocsecsphp5includeslib.debug.php on line 303

  1. $pa = &new Print_a_class;
  2. //修改为:
  3. $pa = new Print_a_class;

PHP5.3+废除了”=&”符号,对象复制用”=”即可,详细如下:
PHP5对象复制是采用引用的方式。
如果不采用引用方式,则需要在复制对象时加关键字 clone。
如果在复制的过程中,同时要变更某些属性,则增加函数_clone()。

2、Deprecated:preg_replace():The/e modifier is deprecated,use preg_replace_callback instead *

出现这个错误的原因是 preg_replace() 函数修饰符/e 在 PHP5.5.x 中已经被弃用了,若出现这个错误可以用 preg_replace_callback 进行代替。(一般的可以直接去掉 e 函数,但以下需要用preg_replace_callback代替)

2.1 includescls_template.php 文件中的 fetch_str()函数

  1. return preg_replace(\"/{([^}{n]*)}/\", \"$this->select(\'1\');\", $source);
  2. //修改为
  3. return preg_replace_callback(\"/{([^}{n]*)}/\",
  4. function ($match){
  5. return $this->select($match[1]);
  6. }, $source);

2.2 includescls_template.php 文件中的 smarty_prefilter_preCompile()函数

  1. $replacement = \"\'{include file=\'.strtolower(\'1\').}\'\";
  2. $source = preg_replace_callback($pattern, $replacement, $source);
  3. //修改为
  4. $source = preg_replace_callback($pattern, function($match){
  5. return \'{include file=\"\'.strtolower($match[1]).\'\"}\';
  6. }, $source);

2.3 includescls_template.php 文件中的 get_val()函数

  1. $val = preg_replace(\"/[([^[]]*)]/eis\", \"\'.\'.str_replace(\'$\',\'$\',\'1\')\", $val);
  2. //修改为
  3. $val = preg_replace_callback(\"/[([^[]]*)]/is\",function($match){
  4. return \".\".str_replace(\'$\',\'$\',$match[1]);
  5. }, $val);

2.4 includescls_template.php 文件中的 select()函数

  1. //$out = \"<?php n\" . \'$k = \' . preg_replace(\"/(\'$[^,]+)/e\" , \"stripslashes(trim(\'1\',\'\'\'));\", var_export($t, true)) . \";n\";
  2. //修改为
  3. $out = \"<?php n\" . \'$k = \' . preg_replace_callback(\"/(\'$[^,]+)/\" , function($match){
  4. return stripslashes(trim($match[1],\'\'\'));
  5. }, var_export($t, true)) . \";n\";

*\”>3、 Strict Standards:Only variables should be passed by reference in*

5.3以上默认只能传递具体的变量,而不能通过函数返回值。可做类似以下修改;

  1. //includeslib_main.php
  2. $ext = end(explode(\'.\', $tmp));
  3. //修改为
  4. $ext_arr = explode(\'.\', $tmp);
  5. $ext = end($ext_arr);
  1. //includescls_template.php on line 422
  2. $tag_sel = array_shift(explode(\' \', $tag));
  3. //修改为
  4. $tag_arr = explode(\' \', $tag);
  5. $tag_sel = array_shift($tag_arr);

4、Strict Standards:Non-static method cls_image::gd_version() should not be called statically

  1. //修改 cls_image 类
  2. function gd_version()
  3. //修改为
  4. static function gd_version()

5 Strict Standards:mktime():You should be using the time() function instead

直接用time 代替mktime即可。

PHP5.1版后调用mktime()不带参数,等同于调用time(),,应用其代替。

6 Strict Standards:Redefining already defined constructor for class

将同名构造函数放在__construct()之后。

PHP类,有两种构造函数,一种是跟类同名的函数,一种是__construct()。从PHP5.4开始,对这两个函数出现的顺序做了最严格的定义,必须是__construct()在前,同名函数在后。

涉及到的修改文件有

文件名 文件大小 最后修改时间 状态 admin/ 被修改:5 cloud.php “8167 Bytes” 2016/2/3 20:56 被修改 privilege.php “25918 Bytes” 2014/12/12 11:14 被修改 shop_config.php “13702 Bytes” 2016/2/3 20:56 被修改 sms_url.php “1186 Bytes” 2016/2/3 20:56 被修改 sql.php “4634 Bytes” 2014/12/12 11:19 被修改 admin/includes/ 被修改:1 cls_sql_dump.php “14094 Bytes” 2016/2/6 18:39 被修改 includes/ 被修改:6 cls_captcha.php “8734 Bytes” 2016/2/3 20:59 被修改 cls_image.php “23083 Bytes” 2016/2/2 23:10 被修改 cls_mysql.php “27347 Bytes” 2016/2/6 18:40 被修改 cls_template.php “44542 Bytes” 2016/2/6 19:49 被修改 lib.debug.php “25893 Bytes” 2016/2/2 21:59 被修改 lib_main.php “67400 Bytes” 2016/2/2 22:52 被修改 includes/modules/payment/ 被修改:15 alipay.php “6661 Bytes” 2016/2/6 18:10 被修改 balance.php “2146 Bytes” 2016/2/6 18:10 被修改 bank.php “2091 Bytes” 2016/2/6 18:10 被修改 cappay.php “12133 Bytes” 2016/2/6 18:10 被修改 chinabank.php “5521 Bytes” 2016/2/6 18:10 被修改 cod.php “2208 Bytes” 2016/2/6 18:10 被修改 epay.php “5708 Bytes” 2016/2/6 18:10 被修改 ips.php “5554 Bytes” 2016/2/6 18:11 被修改 kuaiqian.php “13153 Bytes” 2016/2/6 18:11 被修改 paypal.php “8200 Bytes” 2016/2/6 18:11 被修改 paypal_ec.php “8429 Bytes” 2016/2/6 18:11 被修改 post.php “2134 Bytes” 2016/2/6 18:11 被修改 shenzhou.php “15209 Bytes” 2016/2/6 18:11 被修改 tenpay.php “8425 Bytes” 2016/2/6 18:12 被修改 tenpayc2c.php “8679 Bytes” 2016/2/6 18:12 被修改

修改后

后台


首页效果

ecshop之数据库备份

在ecshop后台,数据库管理,数据备份里面,点击之后,能够看到这样的画面:

默认的是标准备份,备份的表格包括:

\’admin_user\’,\’area_region\’,\’article\’,\’article_cat\’,\’attribute\’,\’brand\’,\’cart\’,\’category\’,\’comment\’,\’goods\’,\’goods_attr\’,\’goods_cat\’,\’goods_gallery\’,\’goods_type\’,\’group_goods\’,\’link_goods\’,\’member_price\’,\’order_action\’,\’order_goods\’,\’order_info\’,\’payment\’,\’region\’,\’shipping\’,\’shipping_area\’,\’shop_config\’,\’user_address\’,\’user_bonus\’,\’user_rank\’,\’users\’,\’virtual_card\’

基本上涵盖了常用的表格。

最小备份,备份的表格包括:

\’attribute\’,\’brand\’,\’cart\’,\’category\’,\’goods\’,\’goods_attr\’,\’goods_cat\’,\’goods_gallery\’,\’goods_type\’,\’group_goods\’,\’link_goods\’,\’member_price\’,\’order_action\’,\’order_goods\’,\’order_info\’,\’shop_config\’,\’user_address\’,\’user_bonus\’,\’user_rank\’,\’users\’,\’virtual_card\’

后台有相应说明,不多说。

主要说下自定义备份,点击自定义备份,能够看到ecshop说有的表格,不过这个表格必须是在安装ecshop的时候,有统一的前缀。勾上全选就可以备份所有的表格。不过要说明一点,如果在二次开发的时候,建立了不同前缀的表格,就无法做到全部备份,如果想全部备份,需要修改下php代码,让表格全部显示。

找到文件:admin/database.php

找到这样一句话:
[代码]php代码:

$tables = $db->GetCol(\"SHOW TABLES LIKE \'\" . mysql_like_quote($ecs->prefix) . \"%\'\");

把其改成这样一句话:
[代码]php代码:

$tables = $db->GetCol(\"SHOW TABLES LIKE \'%\'\");

这样就可以在选择自定义备份的时候,显示所有本数据库里面的所有表格,勾上全选就可以全部备份了。

使用扩展插入(Extended Insert)方式:推荐选择“否”,选“是”可能会导致数据恢复的时候由于 SQL 语句过长而超时等问题。两种方式优缺点对比:选“是”:备份数据会比较小;选“否”:备份数据的兼容性比较高。

还有一个需要注意的地方,分卷备份 – 文件长度限制(kb),默认的是小于2M,可以修改这个参数,尤其是数据库比较大的时候,如果想在一个文件里面备份全部内容,就一定要修改这个参数。

注意:如果可以通过命令窗口连接数据库,最好还是使用命令备份数据库,那样是最安全的。

ecshop添加热门搜索

通常做商城,都喜欢在商品的搜索框下面加上热门搜索,如图:

下面说下,ecshop怎么加热门搜索。
找到对应的模板页面,再其要加入热门搜索的地方加入以下代码:
[代码]xml代码:

{if $searchkeywords}{$lang.hot_search}:{foreach from=$searchkeywords item=val}{$val}{/foreach}{/if}

这个代码即是调用ecshop热门搜索的代码,热门搜索的词条管理,在ecshop后台——系统设置——商店设置——显示设置——首页搜索的关键字,对应的文本框修改即可,关键词之间用英文的逗号隔开。

ecshop如何添加设置模板的区域

在ecshop后台的模板管理,里面有一样是设置模板。
设置模板的使用方法,本文不再表述,在搜索引擎中搜索,能够找到很多相关的教程。
ecshop中的设置模板,给很多不懂代码的站长带来了很大的便利,根本不用去写代码,同样在网站上也可以弄出自己需要的布局。网站上自带了一部分区域,能够直接在后台设置,不过如果想自己添加区域,应该如何操作呢?
首先要找到需要添加区域的模板文件,比如我们现在首页添加,那么找到这个文件:themesdefaultindex.dwt

在里面找到想要添加的位置,然后写入这样一段代码:
[代码]xml代码:


TemplateBeginEditable这个就相当于一个标签,既有开始标签,也有结束标签。
其name属性值就是我们在后台,区域这里的下拉框,看到的名称:

选中相关的区域,即可以对其进行操作。

ecshop团购列表页面调用团购状态

找到文件:group_buy.php

找到这样一个函数:
[代码]php代码:

function group_buy_list($size, $page)

在函数的结尾处看到这样一段话:
[代码]php代码:

/* 处理链接 */        $group_buy[\'url\'] = build_uri(\'group_buy\', array(\'gbid\'=>$group_buy[\'group_buy_id\']));

在其下方加入这样一段话:
[代码]php代码:

//团购状态        $group_buy[\'status\'] = group_buy_status($group_buy);

模板调用方法:
[代码]xml代码:

未开始运行代码段进行中代码段已结束代码段团购成功代码段团购失败代码段

ecshop首页设置模板促销商品改为可设置区域

ecshop在后台设置模板功能里面,默认的促销商品是不可编辑的区域,有时候想再首页展示促销商品,可以通过一下方法,更改成可编辑的区域:
找到文件:themes/default/libs.xml,打开,在里面看到这样一段话:
[代码]xml代码:

            cart      category_tree      top10      promotion_info      auction      group_buy      order_query      invoice_query      vote_list      email_list                  recommend_best      recommend_new      recommend_hot      

把其更改为这样一段话:
[代码]xml代码:

            cart      category_tree      top10      promotion_info      auction      group_buy      order_query      invoice_query      vote_list      email_list                  recommend_best      recommend_new      recommend_hot	  recommend_promotion      

也就是在:recommend_hot这句话的下面,加入这样一句话:recommend_promotion

然后再在首页要显示促销商品的地方加入这样一段话:
[代码]xml代码:


保存好后,进入后台,再刷新模板设置页面,就可以设置了。

ecshop后台管理左侧菜单添加与实现设置权限方法

在对ecshop进行二次开发的时候,在后台增加一些功能,下面给大家说说,ecshop如何在后台添加新栏目
首先要找到相关的文件,这些文件时我们要修改的文件
(1)admin 文件下admin/includes/inc_menu.php
(2)languageszh_cnadmincommon.php
接下来说添加的方法,
首先:先在languageszh_cnadmincommon.php添加栏目的名字,关于这个是添加后台在页面显示所需的文字的文件(我做的是添加今日订单管理菜单)

[代码]php代码:

$_LANG[\'17_torder\'] = \'今日订单管理\';           //这个是一级栏目名字

[代码]php代码:

/*今日订单管理*/$_LANG[\'02_torder_list\'] = \'今日成交订单明细\';

然后:admin/includes/inc_menu.php 文件中添加对应的二级栏目的数组链接

[代码]php代码:

/*今日订单管理*/$modules[\'17_torder\'][\'02_torder_list\'] = \'torder_order.php\'

链接为一级的数组元素,不明白的话,最好先看看这两个文件

然后说怎样实现在分配权限里面管理它,
打开admin/includes/inc_priv.php文件
新建栏目权限数组 数组元素和admin/includes/inc_menu.php页面的数组相同,对应的值自定义
并将自定义的该值添加的表ecs_admin_action表中
首先在表中新建你的一级栏目parent_id 为0 action_code 为数组元素的名字
然后添加二级栏目的 信息 parent_id为你的一级菜单的action_id
action_code 为打开admin/includes/inc_priv.php文件中 自定义的值
好了,就样你就添加的一个后台管理栏目,并可在新建管理后进行权限管理