温江 交通运输职业学校:ecshop二次开发 结构分析和代码研究 呵呵

来源:百度文库 编辑:偶看新闻 时间:2024/05/26 16:21:56

ecshop二次开发 结构分析和代码研究 呵呵

    博客分类:
  • ECshop开发研究
数据结构PHP脚本配置管理Flash

Ecshop包括的文件夹有admin、api、cert、data、images、includes、js、languages、plugins、temp、theme、wap、widget这些文件夹,和根目录下的所有.php文件。这些文件和文件夹组成了整个ecshop。如果从软件工程角度分析ecshop的话,ecshop的二级可以看成admin和前台两个部分。admin主要是面向服务端的,而前台是面向客户端的,这是这两个部分的最明显的差别。下面给出ecshop的二级流程图:

 

此二级流程图给出了admin模块、前台显示模块和数据库模块之间的一个关系。从上面的图示可以看出,admin模块要对数据库进行读和写,这里的读和写组成了整个的后台的管理,包括商品的增加和删减、留言的管理、订单的处理等等。前台模块也要对数据库进行读和写,它的读写主要是完成交易的过程,写的内容基本都是和商品数量、点击数量这些在商品交易中一定要改变的数字。在admin模块也可以对前台显示部分进行写,这个写的过程主要是完成前台显示方式的改变,比如admin模块可以选择模板;同样也可以改变每个小模块在某个页面中是否显示,以及显示的位置(如果显示)。

 

Images文件夹:

这个文件夹下有子文件夹,在这些子文件夹下面存放着当前网站商品的原始图片和缩略图。这些子文件夹命名有规律的,它们的文件名是它们目录下商品加入的年月份。也就是说在同一个月份加入的商品,它们的图片是在同一个文件夹下的,且这个文件夹的名字就是当前的年月份。后台每添加一个带图片的商品,这边都会在某个文件夹下出现提交图片的副本。

Data文件夹:

这个文件夹是包括一些固定的数据,比如固定的配置、图片等等。在data这个文件夹下的config.php记录了数据库的一些固定的信息,afficheimg文件夹下存放这首页最中间的flash的图片源。实现将afficheimg文件夹下的图片加载到首页的flash中是通过文件夹flashdata下面文件夹dynfocus中的javascript来实现的。文件夹brandlogo下存放这有品牌商品的公司的logo,另外文件夹captcha下存放这验证码的背景图片。

Theme文件夹:

页面的显示是有theme这个文件夹全权负责的。而这些准备的数据是怎么在theme下的.dwt中显示的呢?数据是通过smarty加载进去的。在根目录下每个.php文件中都会有类似$smarty->assign(’page_title’, $position['title']);这样的句子,这样page_title在对应的dwt文件中就可以作为一个变量使用了。这样就将php文件很dwt文件很好的结合好了。

下面稍微说一下dwt这个文件。这个文件中大部分的信息是自动生成的。在dwt文件中都会看到这样的块,这个快就是用来确定每个模块显示的位置的,如果在后台将某个模块选择显示在“左边区域”,那么这个模块的代码会在上面的这个区域生成。当然在dwt文件中我们也会到处看到这里面的代码全都是自动生成的,要改也只能该.lbi文件。还有就是在出现之前,这两个标志之间不能直接编辑代码,要加入自己的代码必须要在和下一个BeginLibraryItem之前插入。

程序:

程序主要是包括(这里说的是关于前台的)根目录下的所有的php脚本、includes,js文件夹,这些所有的脚本完成了前台显示的数据准备。所以它们在整个ecshop的结构中占着相当重要的地位,对ecshop的修改也主要集中在这些脚本中,这些脚本的具体分析会在后期中一一给出。

在上一篇中给大家带来了ecshop的总体的框架。从总体上看ecshop,相信大家的思路应该很清楚。作为一个对开源项目修改者你来说,能对ecshop有个初步的了解就行了,下面我会给大家带来我在修改ecshop的过程中的一些体会。

记得在上一篇中我们聊到了Adobe的模板。下面我们来根据ecshop跟大家讨论一下模板。说到模板,这就是ecshop前台显示的主要文件,如果你能很好理解theme下模板文件和样式表文件,对于ecshop前台显示应该没有任何问题了。Ecshop中页面到底是怎么显示的呢?这个问题我们先放在一边,我们先研究一下ecshop是怎么将一系列从数据库中读取出来,然后传到显示页面中的。要解决这个问题我们要用根目录下的index.php和theme/default下的index.dwt来作为用例。之所以用对应的两个文件夹,是因为在index.dwt中要显示的数据是通过smarty从index.php中加载进来的。在index.php中有如下代码:

$position = assign_ur_here();$smarty->assign('page_title', $position['title']); // 页面标题$smarty->assign('ur_here', $position['ur_here']); // 当前位置

首先它是调用函数assign_ur_here,这样得到了变量$position,在变量$position中有title和ur_here这两个变量。在index.dwt中会有如下代码:

 

 

{$page_title}<title></font></pre><p> </p><p><font size="2">是的,一旦$smarty->assign(’page_title’, $position['title'])执行完,$page_title就会在index.dwt中成为一个可以使用的变量。那么到目前为止我们知道如何从php脚本中往dwt文件中传我们需要的变量了。smarty就是通过这种机制将需要显示的内容传到对应的dwt文件中,这样就实现了页面与内容的分离。Php脚本中的数据我们已经有办法在dwt文件中得到了,下面就是要解决如何显示这些数据。凡是通过smarty加载到dwt文件中的变量,在显示的时候都是加上{}来显示的。如果加载过来的是数组那么就要通过smarty的循环来显示,如果我传进来一个数组是 $school并且数组的每个条目中有name,那么下面的代码就是实现在页面中显示数组的每个条目的name。</font></p><pre><font size="2">Foreach($school as $k){echo $k[‘name’] . ‘ ’;}</font></pre><p><font size="2">这样就会在页面中将数组的内容全部打印出来了。</font></p><p><font size="2">下面我们来举个例子来说明一下dwt到底是怎么显示的。</font></p><p><font size="2">在index.php中的某个地方写上 smarty->assign(‘test’, ‘This is just a test!’);</font></p><p><font size="2">然后在index.dwt中某个地方写上{$test},然后在首页中就会有“This is a test!”。当然它显示的地方跟你把{$test}放在哪里有关系。当然这个位置是有规定的,dwt中不是任何的地方都可以编辑的,有些地方是不能动的,这些我们会在后面一一给出讲解。这个时候如果在你的首页中没有出现“This is a test!”这个内容,那么你也不要担心,因为ecshop中默认的cache是开着的,不能显示肯定是cache的问题,这个我们在后面也会给出讲解。今天就到这里,今天我们讨论了如何往dwt中传参数和参数的显示。下一次会给出上面遗留问题的讲解,Thanks。</font></p><p><font size="2">大家好,今天我们来解决上次遗留下的问题。上次我们谈到了如何从php脚本中往dwt模板中传参数,同时我们留下了两个问题,第一是dwt中有的地方是不可以编辑的;第二是往dwt中传参数并且让它显示,它不一定显示出来。</font></p><p><font size="2">首先我们来讨论一下第一个问题——为什么有的地方不可以编辑。我们通过讨论index.dwt来分析一下这个问题的原因。在index.dwt中我们会看到好多形如</font></p><p> </p><p> </p><p><font size="2">这样的语句。如果对ecshop的后台的管理有点了解的朋友们对“左边区域”这几个字应该很熟悉吧!不错,在后台的模板管理->设置模板中你会看到如下的图片</font></p><p> </p><p><font size="2">从表面上看,大家都应该知道,比如“商品分类树”是在整个页面的中间区域显示。那么为什么在后台这边重新选择一下并且确定,在页面显示就会按照你的选择来显示呢了?它的实质是这样的,上面每个模块是对应一个库文件(就是theme下library下的lbi文件),当你把上面的这些按照你的布局设置好后点击确定,程序就会按照你的布局的选择将每个lbi文件的内容写入到index.dwt中,那么lbi文件中的内容往哪里写呢,这个时候上面的</font></p><p> </p><p> </p><p> </p><p><font size="2">这句话就起到作用了,比如上面“销售排行”是选择的右边区域,那么当你确定以后,程序会对index.dwt重写一边,其中“销售排行”对应的lbi(就是top10.lbi)中的内容会被完全的读取并且写到index.dwt中和之间。那么这个时候大家可能有一个疑问,如果有很多的内容要往右边区域写,那哪个先写呢?上面的图中有个“序号”,这个就是决定写的顺序的。下面是写之后index.dwt文件中和之间的一段代码:</font></p><pre><font size="2"> <div class="box"> <div class="box_2"> <div class="top10Tit"</font><font size="2">>div> <div class="top10List"> <ul>  <li><mip-img src="../images/top_{$smarty.foreach.top_goods.iteration}.gif"> <a title="{$goods.name|escape:html}" href="{$goods.url}">{$goods.short_name}</font><font size="2">a>  </font><font size="2">li</font><font size="2">>ul> </font><font size="2">div> </font><font size="2">div></font><font size="2">div><div class="blank5"</font><font size="2">>div>  </font></pre><p><font size="2">好的,到了这里相信大家应该清楚很多了,那么到底是为什么index.dwt中有些的地方是不可以编辑的。大家想一想上面这段代码是从哪边而来的,对的,是从top10.lbi中读取出来的,然后写到这里的,如果你编辑这里,然后下次再重新布局后,这边的内容不是要被重写掉了嘛!所以在index.dwt中类似和之间的内容是动态生成的,是不可编辑的,如果真的想编辑这边的内容,就就编辑对应的lbi文件。</font></p><p><font size="2">相信大家已经清楚,为什么dwt文件中部分地方是不可编辑的。那么今天就和大家谈到这里,下次我们来研究一下cache的问题。我感觉这个很是头疼(如果你自己添加了session)。</font></p><p><font size="2">上次我们主要讨论了关于模板的问题,最后我们留下了一个问题——cache的问题。我觉得这个问题到目前位置先不要讨论好,再往后一点我们再来分析这个问题。到现在我们知道了模板的一些操作了,但是我们还是很郁闷,因为我们只是在ecshop的前台框架的控制之下。那么我们如何能够脱离出来呢?如果我们能做到自己添加属于自己或者可以放自己想要放的东西的模板,那么应该算是到了一个更高的台阶来看ecshop了。</font></p><p><font size="2">要做到添加一个模板就必须做到前台可以显示这个模板,后台可以编辑这个模板。下面我们一步一步教大家怎么添加一个属于自己的模板。在添加之前我们先稍微分析一下,对以一个模板,在前台一定有一个php文件和它对应(很显然这个php文件就是实现给这个模板文件传送数据的)。并且在后台可以编辑这个模板对于的模块,也就是在模板管理——设置模板中有你加的模板的选项。下面我们来添加一个home模板。首先在根目录下新建home.dwt和home.php。然后将index.dwt和index.php中的内容分别拷贝到home.dwt和home.php中。对于这个模板的内容完全由你自己决定,你的内容就会决定你要怎么修改home.dwt和home.php。当然这个模板的内容是受限制的,首先要home这个模板的候选的库文件是存在的。这个是什么意思呢?这句话的意思就是对于每个模板文件,可以调用的库文件是固定的,并且这些可以调用的库文件在文件admin/includes/lib_templete.php中定义的。首先要在后台将home这个模板放入到可设置内容的模板中,部分代码如下:</font></p><p> </p><pre><font size="2">/* 可以设置内容的模板 */$template_files = array('home.dwt','index.dwt','zhiku.dwt','article.dwt','article_cat.dwt','brand.dwt','category.dwt','user_clips.dwt','compare.dwt','gallery.dwt',</font></pre><p><font size="2">在上面的代码中就将home.dwt加入到后台的可编辑模板中,这个时候你就可以在后台的模板管理->设置模板中编辑home模板了。但是到这里我们发现一个很小的问题,那就是这个home模板在后台是显示成什么名字。其实这个很简单,只要在文件language/zh_cn/admin/template.php中添加$_LANG['template_files']['home'] = ‘home模板’;这样的语句,那么在后台看到的home模板的名称就是“home模板”,当然这里也可以设置成其他的名称。在上面我们有说到每个模板可以调用的库文件是固定的,既然说是固定的,那应该是哪些呢?就拿index来说吧,在文件admin/includes/lib_templete.php中有下面这样的代码:</font></p><pre><font size="2">'index' => array('/library/ur_here.lbi' => 0,'/library/search_form.lbi' => 0,'/library/member.lbi' => 0,'/library/new_articles.lbi' => 0,'/library/success_article.lbi' => 0,'/library/dynamic_article.lbi' => 0,'/library/school_article.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' => 0,'/library/promotion_info.lbi' => 0,'/library/cart.lbi' => 0,'/library/order_query.lbi' => 0,'/library/email_list.lbi' => 0,'/library/vote_list.lbi' => 0),</font></pre><p><font size="2">那么这边枚举到的库文件,对于index.dwt都可以调用的。依葫芦画瓢,home.dwt需要调用哪些库文件,那么就对应上面这个写就是了,相信大家都有这个水平。好的,到目前为止一个模板文件添加成功了,那么它在浏览器中的显示就要通过后台的设置模板来确定了。好的,添加一个自己的模板我就说到这里,我们下期继续讨论ecshop。Thanks!!!</font></p></blockquote></div>
        <div class="zuoye-list-a">
                                     
                <a href="/article/biartow">基于internet的多媒体系统结构的分析与研究</a>                        
                                       
                <a href="/article/bhvcznm">人事管理数据库结构和代码</a>                        
                                       
                <a href="/article/bimfinz">分析下面多义词组和结构层次和结构关系</a>                        
                                       
                <a href="/article/bhryrce">益阳劳动力数量和结构分析</a>                        
                                       
                <a href="/article/bhwgsyp">分析我国经济结构的优点和不足??</a>                        
                                       
                <a href="/article/biejdgz">帮偶翻译和分析下结构</a>                        
                                       
                <a href="/article/biahunm">分析结构</a>                        
                                       
                <a href="/article/bigsoim">请教:什么是代码结构和程序框图?</a>                        
                                       
                <a href="/article/bigvqtr">关于启动子结构和活性的研究方法?</a>                        
                                       
                <a href="/article/bhulper">灯饰没有时事分析和市场的发展研究?</a>                        
                                       
                <a href="/article/bidbbky">我过个人所得税流失的原因分析和对策研究</a>                        
                                       
                <a href="/article/bigqgmr">孟子文化在国内外研究领域的现状和趋势分析</a>                        
                                       
                <a href="/article/bhzxmcw">液位传感器的系统结构和分析原理</a>                        
                                       
                <a href="/article/biagrgk">起落架活塞杆的结构分析和工艺规程设计</a>                        
                                       
                <a href="/article/bicwkts">分析体育场和体育馆的结构特点、用途、声学特性</a>                        
                                       
                <a href="/article/bieizlk">从结构上分析汽油机和柴油机有何不同?</a>                        
                                       
                <a href="/article/bieosty">谁知道结构化需求分析常用工具是数据库和()</a>                        
                                       
                <a href="/article/bifkqzc">从结构上分析汽油机和柴油机有何不同?</a>                        
                                       
                <a href="/article/biltabt">mapX+delphi 和mapX+VC 二次开发比较</a>                        
                                       
                <a href="/article/bhvixlz">请分析专家研究</a>                        
                                       
                <a href="/article/bhryqzp">益阳市人口结构分析</a>                        
                                       
                <a href="/article/bhrytia">微处理器存储结构分析</a>                        
                                       
                <a href="/article/bhvxyfh">成本结构怎么样分析</a>                        
                                       
                <a href="/article/biavpjt">英语句子结构分析?</a>                        
                        </div>
  </div>
</div>       
        
    </div>
</div>  

</div> 
</div>

<div id="footer">
  <div class="footerlinks">
  <div class="panel panel-default">
  <div class="panel-heading">相关问题</div>
  <div class="panel-body">
      <a class="btn btn-default" href="/article/bhshqnx" title="真心爱你的男人与逢场作戏的男人的区别">真心爱你的男人与逢场作戏的男人的区别</a>
      <a class="btn btn-default" href="/article/bhshqny" title="破译宝宝的12种啼哭语言">破译宝宝的12种啼哭语言</a>
      <a class="btn btn-default" href="/article/bhshqnz" title="雅韵清心【工笔欣赏18">雅韵清心【工笔欣赏18</a>
      <a class="btn btn-default" href="/article/bhshqoa" title="美食菜谱30000道">美食菜谱30000道</a>
      <a class="btn btn-default" href="/article/bhshqob" title="【引用】【PS教程】给图片加入防盗水印教程">【引用】【PS教程】给图片加入防盗水印教程</a>
      <a class="btn btn-default" href="/article/bhshqoc" title="一个机构操盘手的十年投资心得_每天一小步,记录期货点点滴滴">一个机构操盘手的十年投资心得_每天一小步,记录期货点点滴滴</a>
      <a class="btn btn-default" href="/article/bhshqod" title="维扬卧龙">维扬卧龙</a>
      <a class="btn btn-default" href="/article/bhshqoe" title="一块豆腐的“安全之道”">一块豆腐的“安全之道”</a>
      <a class="btn btn-default" href="/article/bhshqof" title="画写吉祥——中国传统民间年画系列之 窗画">画写吉祥——中国传统民间年画系列之 窗画</a>
      <a class="btn btn-default" href="/article/bhshqog" title="2003-2010年度感动中国颁奖词">2003-2010年度感动中国颁奖词</a>
      <a class="btn btn-default" href="/article/bhshqoh" title="为什么女人认为自慰羞耻? - 精华知识 - 搜搜问问">为什么女人认为自慰羞耻? - 精华知识 - 搜搜问问</a>
      <a class="btn btn-default" href="/article/bhshqoi" title="养睛明目保健法">养睛明目保健法</a>
      <a class="btn btn-default" href="/article/bhshqoj" title="画写吉祥——中国传统民间年画系列之 墙画">画写吉祥——中国传统民间年画系列之 墙画</a>
      <a class="btn btn-default" href="/article/bhshqok" title="新概念英语第二册课堂笔记——lesson 13!">新概念英语第二册课堂笔记——lesson 13!</a>
      <a class="btn btn-default" href="/article/bhshqol" title="美国百万富翁特征:大部分不穿名牌不戴高价表">美国百万富翁特征:大部分不穿名牌不戴高价表</a>
      <a class="btn btn-default" href="/article/bhshqom" title="长相思,莫相负">长相思,莫相负</a>
      <a class="btn btn-default" href="/article/bhshqon" title="百科全说 陈允斌 冬季如何防治小孩感冒">百科全说 陈允斌 冬季如何防治小孩感冒</a>
      <a class="btn btn-default" href="/article/bhshqoo" title="烹调技巧知识大全">烹调技巧知识大全</a>
      <a class="btn btn-default" href="/article/bhshqop" title="根治胃溃疡和十二指肠球部溃疡的一个小方转载">根治胃溃疡和十二指肠球部溃疡的一个小方转载</a>
      <a class="btn btn-default" href="/article/bhshqoq" title="男人性生活前适当憋尿有助于提高性质量">男人性生活前适当憋尿有助于提高性质量</a>
      <a class="btn btn-default" href="/article/bhshqor" title="论坛成员【詹黎明工笔画选集】(35P) - 工笔画欣赏 - 【中国工笔画论坛】 |工笔画|...">论坛成员【詹黎明工笔画选集】(35P) - 工笔画欣赏 - 【中国工笔画论坛】 |工笔画|...</a>
      <a class="btn btn-default" href="/article/bhshqos" title="“破窗理论”=“防微杜渐”? 经济学家和政治学家不同的观点">“破窗理论”=“防微杜渐”? 经济学家和政治学家不同的观点</a>
      <a class="btn btn-default" href="/article/bhshqot" title="自制艾枕艾袋艾垫">自制艾枕艾袋艾垫</a>
      <a class="btn btn-default" href="/article/bhshqou" title="办公族必备的8个健康午休方法">办公族必备的8个健康午休方法</a>
      <a class="btn btn-default" href="/article/bhshqov" title="四季之冬">四季之冬</a>
      <a class="btn btn-default" href="/article/bhshqow" title="西红柿打卤面2">西红柿打卤面2</a>
      <a class="btn btn-default" href="/article/bhshqox" title="[近代风云]解密林彪之死(来至于林彪家乡的传说)">[近代风云]解密林彪之死(来至于林彪家乡的传说)</a>
      <a class="btn btn-default" href="/article/bhshqoy" title="肉丸子的做法">肉丸子的做法</a>
      <a class="btn btn-default" href="/article/bhshqoz" title="新个税快速计算方法">新个税快速计算方法</a>
      <a class="btn btn-default" href="/article/bhshqpa" title="善良散户必读---证卷股市骗术大全 - 股民论坛 - 华商论坛 陕西|西安|图片|情感|美...">善良散户必读---证卷股市骗术大全 - 股民论坛 - 华商论坛 陕西|西安|图片|情感|美...</a>
      <a class="btn btn-default" href="/article/bhshqpb" title="祛斑、美白、防皱">祛斑、美白、防皱</a>
         
  </div>
</div>  </div>
  <div class="copy-right">
<p>偶看新闻,客观、专业、权威的知识性互动百科全书。</p></div>
</div>  

</div>
<!--mip 运行环境-->
<mip-stats-baidu>
    <script type="application/json">
        {
            "token": "97cc1851a34f9e233119ff36ecf54098",
            "_setCustomVar": [1, "login", "1", 2],
            "_setAutoPageview": [true]
        }
    </script>
</mip-stats-baidu>
<script src="https://c.mipcdn.com/static/v1/mip.js"></script>
        <!--分享组件 代码-->
        <script src="https://c.mipcdn.com/static/v1/mip-share/mip-share.js"></script>
        <!--百度统计组件 代码-->
        <script src="https://c.mipcdn.com/static/v1/mip-stats-baidu/mip-stats-baidu.js"></script>
  </body>
</html>