2009年4月19日 星期日

库存无货,购买按钮显示无货状态的修改

打开所在的goods.dwt模板,搜索购物那个按钮(提示:图片另存就知道文件名),之后看到以下代码
<li id="itemBtnList" class="item_img">
<a href="javascript:addToCart({$goods.goods_id})"><img src="images/add_cart.gif" alt="" /></a>
<a href="javascript:collect({$goods.goods_id})"><img src="images/collect.gif" alt="加入收藏" /></a>
修改成一下代码就可以了:
<li id="itemBtnList" class="item_img">
<!-- {if $goods.goods_number neq 0} -->
<a href="javascript:addToCart({$goods.goods_id})"><img src="images/add_cart.gif" alt="" /></a>
<!-- {else} -->
<img src="images/wuhuo.gif" alt="库存暂时无货,等有货再购买,谢谢" />
<!-- {/if} -->
<a href="javascript:collect({$goods.goods_id})"><img src="images/collect.gif" alt="加入收藏" /></a>

这个wuhuo.gif自己做个,放到images文件夹,如果想增加缺货登记,那么,再wuhuo.gif所在的位置增加一个连接
<a href="user.php?act=add_booking&id={$goods.goods_id}"><img src="images/wuhuo.gif" alt="库存暂时无货,等有货再购买,谢谢" />
</a>

功能详解

根据论坛里频繁问题我来分析一下

第一:注册页面增加其他注册项

a、首先打开ecs_user 建我们需要注册项的字段 比如 公司名字 company_name 记得varchar 值要大一点。

b、打开user_passport.dwt 在原有注册项上面添加 比如

1. <tr>
2. <td align="right">公司名称</td>
3. <td>
4. <input name="other[comany_name]" type="text" size="25" class="inputBg"/>
5. </td>
6. </tr>

复制代码

c、打开lib_passport 文件的register函数 找到 //定义other合法的变量数组
$other_key_array = array('msn', 'qq', 'office_phone', 'home_phone', 'mobile_phone'); 这一地方 在原来基础上增加company_name
完成操作 去测试。

如果要明白过程的话 如下:
打开 user.php 找到 act=='act_register' 会发现我们的添加的值以other数组的形式post过来了 然后找到register($username, $password, $email, $other) 发现 这个数组是register的一个参数传递到这个函数里 我们跟踪函数 当然是cart+f 你会找到同样的俩个函数我们用的是lib_passport.php里函数 分析它 :

这个函数又来调用add_user这个函数 把重要的邮箱地址 用户名 密码已经插入数据库 如果有ucenter的话 也要插入ucenter实现同步 等插入后 返回user_id
有了user_id 在去修改user表 既把other的数据update进去 sql语句是

1. $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('users'), $other, 'UPDATE', 'user_id = ' . $_SESSION['user_id']);

复制代码


所以你在.dwt文件加了company_name就不用担心 。

有网友问我如何对ecshop进行二次开发 以上就是我的修改一个功能的完整思路,不光是这个功能是这样 其他功能也是这样 以这种方式去分析他 这样一步一步的跟踪分析他 就会得到结果。时间久了你就熟悉整个系统的架构过程。感谢ec 。

Ecshop系统框架分析 一

Ecshop系统框架分析 一

bbs里好多朋友说好久没见你发贴了 , 是因为今年来了事情有点太多。
bbs上面有好多朋友是会php但对ec系统不是很熟悉,针对这 我今天简单的先分析一下 :

第一 、整体框架结构 : 个人认为 整个系统是层结构 有数据层 有外观层 比如 我们index.php 是外观层(和用户打交道的层) 那推荐产品来说吧 在index.php 是对数据层函数的调用 get_recommend_goods('new') 这个函数 那么他是在include 目录下的lib_goods.php进行定义 既数据层。

第二、重要目录:首先大多前台程序是在根目录下

admin 这个文件夹 是我们后台的文件夹 后台的模板文件是在下一层的templates 里。这里我强调几个后台文件 首先需要了解 init.php 这个是对后台session 访问权限 调用模板的路径 等功能的设置 第二个文件是 inc_menu.php 这是定义功能菜单文件
看到论坛有人要把后台一些功能去掉 你就可以改这文件把里面的一些模块删了即可。templates下 _list.htm 是列表页 _info.htm是修改 添加页的 模板文件。

data 文件夹 里面我们用的最多的是 要打开 config.php对 数据库参数进行修改 (移动代码 不安装的情况下需要在这修改数据库参数) order_print.html 这个也很重要 有些客户要修改订单打印页的效果 需要在这修改。

includes 文件夹 是很重要的 里面经常打开的文件 init.php lib_common.php是共同函数 lib_goos.php是处理前台所有商品调用的函数库 lib_order.php当然是处理订单的文件 cls_transport.php处理会员中心功能的文件 lib_article.php 文章数据层
lib_insert.php 这个文件也不可忽视 有点时候会让你一些东西找不到 结果就在他里面 比如 购入车 就是在这文件里 广告调用 浏览历史 比如 浏览历史的函数 为了可以显示图片 你就可以在这个地方改 。

显示销售排行榜第一个商品的图片

第一步:打开top10.lib
在下面这行代码下:
<!-- {foreach name=top_goods from=$top_goods item=goods}-->
添加:
<!-- {if $smarty.foreach.top_goods.iteration == 1} -->
<a href="{$goods.url}"><img src="{$goods.goods_thumb}" alt="{$goods.goods_name}" /></a>
<!-- {/if} -->

第二步:打开lib_goods.php
找到:
* 调用当前分类的销售排行榜
在其下面这段代码中找到:(大概是116行)
$sql = 'SELECT g.goods_id, g.goods_name, g.goods_img, SUM(og.goods_number) as goods_number ' .
修改为:
$sql = 'SELECT g.goods_id, g.goods_name, g.goods_thumb,g.goods_img, SUM(og.goods_number) as goods_number ' .
即增加了一个读取缩略图的字段:g.goods_thumb

再找到:
$arr[$i]['goods_img'] = get_image_path($arr[$i]['goods_id'], $arr[$i]['goods_img']);
在下面添加这行:
$arr[$i]['goods_thumb'] = get_image_path($arr[$i]['goods_id'], $arr[$i]['goods_thumb']);

ecshop后台目录改名

ecshop里的一个设计确实很不周到,就是后台目录不能够改名字的,这样大家知道你的商城后,加一个/admin就可以访问你的 后台,(比如我们的网站: http://www.maisz.cn/ 那么后台就是加一个/admin )这样真的很危险。特别是人家知道原来你是用ecshop的,马上可以去研究ecshop的代码找漏洞。这样真的很危险!
有一个方便点的办法是采用 引用页作为桥接的方式:
比如你在后台建立一个文件夹 名字为 dfkjsdifsdif 总之就乱起就行。
dfkjsdifsdif 这个文件夹下 建立一个文件index.html ,里边弄一个链接 链接到 /admin/privilege.php?act=login 或者直接用js跳转到 /admin/privilege.php?act=login
如:
<script language="javascript" type="text/javascript">window.location.href="/admin/privilege.php?act=login";
</script>
然后再admin文件夹下的 privilege.php 前面加一个判断。只有
来这个页面的 Referer 包含你那个文件夹的名字 如 dfkjsdifsdif 才能够继续下去 否则就返回空给他!
如:
if(empty($_REQUEST['username'])&&(empty($_SERVER[HTTP_REFERER])||!strpos($_SERVER[HTTP_REFERER],"dfkjsdifsdif ")))
{
exit();
}
这样你以后要登录就可以从 /dfkjsdifsdif/ 登录就可以了

當兵ing

2063梯
903旅
步一營步一連
903r1b1c
第六班班頭經理班
即將邁入第二階段
成為憲兵
在兩個禮拜