今天算是仔细学习ecshop 的第一天,实话说,如果不是任务紧,肯定不用这个东西。2013年之后都不再维护了。使用起来万一出什么BUG 就不好了。而且不是纯粹的MVC ,看代码也是怪怪的呢。但是都已经选择了,用一用吧。

1. ecshop的 MVC 
虽然ecshop 不是纯粹的MVC ,但是人家还是使用 smarty  模板技术的。模板技术的出现就是为了更好的分离后台php代码和前台html 代码。在 ecshop 里面,cls_template.php 是核心文件,是一个精简的 smarty 模板引擎。对应的我们可以看到根目录下面有许多.php 文件:

根据名字就可以很清晰的知道这个 php 文件的作用,实际上就相当于我们其他框架里面的controller 部分了。我们随便打开几个文件看看怎么使用的:
index.php :

user.php:

可以看到,在 user.php 里面没有一个方法,通篇就是各种 if 判断,然后 各种 assign 和各种 display 给前台传递数据。同样的前面的 index.php 里面也是一样的:

通篇一共就这么几个函数,然后就是大段的代码,给前台传递数据(中间可能用些逻辑需要重复使用,就封到几个小函数里面了)。咱不能说这种结构不好,毕竟这是近十年前的项目了嘛。总之这里 controller 向 view 层传递数据的逻辑就是这个样子,没有什么特别的。至于 controller 层怎么跟数据库打交道呢? 我们就不详细谈了,ecshop 没有使用ORM 技术,代码里面各种大段大段的 sql 语句。让我想到万一将来某一天需要在表里添加什么字段是不是要大段大段的找sql 语句改呢?算了,先搞定手头,先不管那么多了。
2. view 层的组织方式
其实对于这种相对成熟的开源项目,改controller 的机会很少的,也就是改哪些.php 的机会很少,大多数时候,所谓的二次开发都是针对前台页面,改改样式罢了。那么这里就需要我们去探究一下究竟ec 的前台是怎么组织的。
首先介绍一下,ec 里面,跟前台view相关的有两种文件,一种是.dwt 文件,一种是.lib 文件:

搞明白前台结构的第一点,就是搞清楚这两种文件的联系。
玩过discuz的同学都知道 discuz 有个 diy 功能,diy 相当于一个独立的块。我们可以自己写.htm 文件,然后在 .htm 里面加入 diy 区块,然后自己通过点点点傻瓜式操作把后台数据读取出来:

像上面这样,这里我要说的是,其实ec 也有这样的功能,自定义的 diy 区块就相当于 .lib 文件,这个区块可以被其他地方使用,举个例子,比如你有好几个页面需要用到历史浏览。你总不能在每个页面都写同样的逻辑吧? 那么我们就可以把历史浏览定义成一个.lib 文件,而且数据也已经准备好了。当我们在写不同页面的时候,我们直接使用:

如上,在BeginLibraryItem 和 EndLibraryItem  之间的就是一个区块
  1. <!-- TemplateBeginEditable name="首页公告下广告" -->
  2. <!-- #BeginLibraryItem "/library/ad_position.lbi" -->
  3. .lib文件 里面的东东
  4. <!-- #EndLibraryItem -->
也就是说 .dwt 文件 是搭架子,具体某个地方需要用一些小部件的话,可以直接调用 .lib 文件。其实,.dwt 和 .lib 文件里面的内容很像,毕竟都是前台哪些东西嘛:

如上,其实你也分不清那种文件是.dwt ,那种是.lib 。都一样的。按照功能不同分这么两种东西,然后.dwt 可以调用.lib 区块内容。
下面该说一个重点,重点,重点。重要话说三遍,你要记住.dwt 文件并不是所有地方都是可以编辑的。一般一个地方如果引用了.lib 文件,你再进行编辑是不起作用的。示例如下:
  1. <div class="mod1con shop_notice">
  2. <!-- TemplateBeginEditable name="商店公告" -->
  3. <!-- #BeginLibraryItem "/library/cat_articles.lbi" -->
  4. <h1 class="mod2tit" style="height:0"><a href="{$articles_cat.url}" class="more" style="margin-top:3px;">更多</a></h1>
  5. <div class="mod2con clearfix">
  6. <ul>
  7. {foreach from=$new_articles item=article_item}
  8. <li style="width:250px; margin-right:20px; display:inline; height:25px; line-height:25px;" class="fl"><a href="{$article_item.url}" title="{$article_item.title|escape:html}" class="txtdot">{$article_item.short_title}</a></li>
  9. {/foreach}
  10. <ul>
  11. </div>
  12. <script type="text/javascript">divheight("catArticles");</script>
  13. <!-- #EndLibraryItem -->
  14. <!-- TemplateEndEditable -->
  15. </div>
看上面代码,在.lib 控制范围内,又写了一些代码,很明显是执行不了的(我为这个问题纠结了半个小时呢)。这是看别人模板的写法,也执行不出来,结果是各种纠结啊。算了,不说了。总之 view 层就是这个情况。看着办就行。

总结:后台查数据库,写sql 语句;后台往前台传数据使用smarty 模板; 前台使用这些数据直接{$value} 就行了,会点框架尝试的应该都明白。 就这么点知识,继续改代码了,写日记又废了半个多小时了。。。














ECSHOP 开发总结的更多相关文章

  1. ecshop开发日志之支付插件开发

    ecshop开发一个支付插件的方法(例如要新建一个为paytest-----支付测试)1.languages/zh_cn/payment/目录下新建一个paytest.php文件  内容如下: < ...

  2. EcShop开发手册

    Ecshop文件结构 ecshop文件架构说明 ECShop 结构图及各文件相应功能介绍 ECShop upload 的目录 ┣ activity.php 活动列表 ┣ affiche.php 广告处 ...

  3. ecshop开发日志之手机端虚拟商品自动发货

    在ecshop官方模版收,web端的虚拟商品购买后不能像pc端那般直接在付款后出现虚拟商品的卡号,密码,截止日期一下为让手机购买也可以在付款后自动显示发货并能显示卡号密码截止日期首 先找到pc端的fl ...

  4. ecshop开发帮助

    http://www.ecshop.com/template_tutorial/ ECSHOP模板结构说明 http://help.ecshop.com/index.php ECSHOP帮助中心 ht ...

  5. Ecshop开发

    http://www.cnblogs.com/xcxc/category/579565.html

  6. ecshop开发日志之虚拟商品发送邮件通知

    购买虚拟商品,系统会在支付后自动发送邮件到用户填写的邮件地址中,追踪过程如下首先在订单列表中可以获得到处理订单的php文件为flow.php,之后在最后一步url地址显示为http://localho ...

  7. 微信支付之扫码支付开发:我遇到的坑及解决办法(附:Ecshop 微信支付插件)

    前段时间帮一个朋友的基于ecshop开发的商城加入微信扫描支付功能,本以为是很简单的事儿——下载官方sdk或开发帮助文档,按着里面的做就ok了,谁知折腾了两三天的时间才算搞定,中间也带着疑问在网上找了 ...

  8. ecshop 实现购物车退出不清空

    ecshop模板在使用过程中会遇到会员退出再登陆时购物车里面的商品会被清空掉的,通过ecshop开发中心的技术,整理的文档,对程序做简单修改即可实现会员退出不清空购物车 ECShop版本:V2.7.3 ...

  9. ecshop去掉“云服务中心”或者是“模板堂知识库”

    ECSHOP开发中心(www.68ecshop.com)教程介绍一下如何去除后台云服务中心菜单: 打开admin/templates/menu.htm,把415行的 document.getEleme ...

随机推荐

  1. 在spring中进行基于Executor的任务调度

    Executor java.util.concurrent.Executor接口的主要目的是要将“任务提交”和“任务执行”两者分离解耦.该接口定义了任务提交的方法,实现者可以提供不同的任务运行机制,解 ...

  2. Global.asax 文件说明

    引用 来自  http://www.cnblogs.com/jianshao810/archive/2011/02/03/1948912.htm 在网上找了N多相关的东西总说的不够细,现在终于找到了. ...

  3. 网络分析shell脚本(实时流量+连接统计)

    介绍一个强大的分析网络的shell脚本,此脚本是从EZHTTP拆分出来的,觉得有必要单独介绍下.脚本运行效果截图: 此脚本包含的功能有: 1.实时监控任意网卡的流量 2.统计10秒内平均流量 3.统计 ...

  4. Java核心技术卷1Chapter7笔记 图形程序设计

    Swing是指被绘制的用户界面类,AWT是指像事件处理这样的窗口工具箱的底层机制. SWT,JavaFX是可能的代替技术. 创建框架 在Java中,顶层窗口(就是没有包含在其他窗口中的窗口)被称为框架 ...

  5. mysql 数据库热备份

    https://www.percona.com/doc/percona-xtrabackup/2.2/index.html

  6. poco vs Boost[ZZ]

    http://wooce.iteye.com/blog/634395 POCO的优点: 1) 比boost更好的线程库,特别是一个活动的方法的实现,并且还可设置线程的优先级. 2) 比 boost:a ...

  7. 关于mysql使用dbForge调试的问题:Object 'test.p_insertRoute' does not exist.

    mysql中使用dbForge6.1版本调试存储过程,如果存储过程中定义的变量时枚举类型,那么就会报出该存储过程没有报出的错误,这个应该是dbForge6.1版本的bug

  8. Storm的数据可靠性(理论)

    Storm的数据可靠性(理论) .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB& ...

  9. C#实现邮件发送功能

    发送邮件所用的核心知识点 微软封装好的MailMessage类:主要处理发送邮件的内容(如:收发人地址.标题.主体.图片等等) 微软封装好的SmtpClient类:主要处理用smtp方式发送此邮件的配 ...

  10. 关于“#ifdef __cplusplus”

    CC++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定 ...