给ecshop新新手的引导语

动态网站,与静态网站的最大区别是在于动态网站要从数据库拿数据。要即时更新。所以mysql为王。
一个网站,即使再动态,也无非是一张报纸。把信息登上去,让别人阅读。
只是在这张报纸上加上图片,加点会动的信息。网站上登什么信息,就像报社的老板的嘴,他说发什么,
就发什么了。报纸上的内容哪里来?放在mysql数据库里。mysql数据库里放那么多东西,一张报纸页面
那么小,要拿哪些内容。这就要通过php来决定。php通过你的操作,来决定从哪张表里拿到哪些信息。
最终显示到页面上。

如果你没想过这一套,那你就会一直觉得php,mysql什么的是有多么深奥。

我们来看一下这大概的流程:
1.php在前面费了一些周折,最终写出一条sql语句,以期达到它想要的那些数据。
2.php页面执行sql语句。从mysql拿数据。
3.返回的数据一定是数组。这个数组是mysql默认的数据格式,为了方便显示,你一定是想把这个查询得来的数据,
重新赋给一个数组,这样的话,你可以给这个数组加上下标,以便在模板页里显示。从mysql数据库里得来的数据,
是一条一条记录的一个大的二维数组。你把这个大数组数据格式赋给一个数组的结果是,你无法从这个新的数组里
准确地拿出你想要的那条数据。这个时候,你需要把$res查询的结果放在foreach循环里。这
要你把查询结果循环拿出来。把新的数组也要放在foreach里,这样每循环出一条记录,就赋给数组一次

看例子吧,不然晕。
foreach ($res AS $idx => $row)
{
$arr[$idx]['id'] = $row['article_id'];
$arr[$idx]['title'] = $row['title'];
$arr[$idx]['short_title'] = $GLOBALS['_CFG']['article_title_length'] > 0 ?
sub_str($row['title'], $GLOBALS['_CFG']['article_title_length']) : $row['title'];
$arr[$idx]['cat_name'] = $row['cat_name'];
$arr[$idx]['add_time'] = local_date($GLOBALS['_CFG']['date_format'], $row['add_time']);
$arr[$idx]['url'] = $row['open_type'] != 1 ?
build_uri('article', array('aid' => $row['article_id']), $row['title']) : trim($row['file_url']);
$arr[$idx]['cat_url'] = build_uri('article_cat', array('acid' => $row['cat_id']), $row['cat_name']);
}
4.得到你想要的数据之后,第4步就是把这个数组传到模板页面。通过smarty标签显示你想要显示的那条数据。

贯穿整个ecshop的php执行过程莫过于此。

了解了这个大概流程之后,你再看ecshop的程序时,你会减少云里雾里的困惑。
做什么事情都是这

样,纲举目张,你才会拨云见日。

二次开发有喜有悲。
喜于,你不用自己写一个网站底层,你不用做架构,你不用写太多代码,你不用有多少万行的代码书写量。你就可以改程序做网站。
悲于,程序是别人写的,你不知道从哪下手,你不知道怎么改。不了解,何谈二次开发?

很多朋友和我一样,只知道变量的赋值是$a=5;$b=6;$c=$a+$b;只知道mysl_fetch_array(),知道mysql_num_rows(),知道while for foreach
可是当你接解一整套程序的时候,并没有这样的赋值,并没有这样的mysql简单查询。
当你想改一个东西时,找到对应的页面,却发现,突然一个变量的出现,或者一个函数的出现,让你彻底蒙B了。不知道从哪里来,到哪城找。一个突然出现的$GLOBALS全局变量,足够你郁闷一两个小时。

很多朋友像我一样,想象,有没有一个技术文档,能够让你专心读一遍,试一遍,你就可以摆平ecshop了,那是降龙十八掌,那是九阴真经,那是有牛B的老师亲手传授的。当然,那也要靠百炼成钢的。

当然,这个世界上,像洪七公,像欧阳锋这样的师傅很难遇见。因为你不是杨过。

如果你找得到这样的老师,他也懒得教你,因为他自己学完之后都想吐,真正能把自己的所学贡献出来的,大部分是有自己的利益和目的。而像齐永东那样分享的人,也很少见了。虽然他也是为自己的知名度,和流量吧。

如果你找得到这样的老师,你也花不起学费,花不起银子。

好了,说这么多废话,无非是想说明一个问题,很多朋友都幻想有没有捷径用最短的时间最快的速度了解ecshop的全部。

告诉你,没有。

用齐永东的一句话说,这是我的笨办法 。

笨办法就是,从ecshop的index.php从第一行,看到最后一行。
你可能没办法了解每一句是什么意思,但是你可以大致了解他想干什么,他干了什么。

有的人说,从dwt文件开始看。那致标不致本。
从php页面开始看。釜底抽薪。
当然,你不用把全部的php页面都看完。可能你看完一个index.php、category.php、good.php三个页面之后,就会对整个ecshop的程序架构有了一个很多的了解了。

好了,废话不多说,从index.php开始。
1 index.php第一行。
define('IN_ECS', true);

ecshop很多页面第一行都会有下面这样一行判断。
if (!defined('IN_ECS'))
{
die('Hacking attempt');
}
这是什么意思呢?
大多数情况是这个页面是被另一个页面包含进去的。
加这行判断的意思是说,如果没有定义这个常量,那么,这个页面被访问是黑客的攻

击所进行的操作。
这也就是所说的防跳墙处理。

index.php页面中包含了很多页面,在第一行就定义了这个常量,当它包含进来其它页面的时候,如果浏览器的地址访问到的这个页面不是由index.php入口到达的,那么说明是黑客攻击,程序终止。

2.第18行到40行。
这一部分是对https://www.360docs.net/doc/112694578.html,/xxx?xxxx
对于首页地址的一个处理,其中包括了\转换成/ ,地址不对返回index.php等处理。

3.40行到73行。
shopex地址转换。这个不必研究。如果你的ecshop要与shopex进行转换的时候,它会有用。

4.74到90行
判断是否有ajax请求。
这个地方先不用看。后面我会整理一篇ecshop关于ajax的文档。

5.到了92行。
这个位置已经开始向模板页面传递数值了,这里就是首页的大部分操作了。
第100行,assign_template();这个函数从哪来?它干了什么呢?
$position = assign_ur_here();它又是从哪得到的值呢?//这个变量得到的数据是当前位置。


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

/* meta information */
$smarty->assign('keywords', htmlspecialchars($_CFG['shop_keywords']));
$smarty->assign('description', htmlspecialchars($_CFG['shop_desc']));
$smarty->assign('flash_theme', $_CFG['flash_theme']); // Flash轮播图片模板

$smarty->assign('feed_url', ($_CFG['rewrite'] == 1) ? 'feed.xml' : 'feed.php'); // RSS URL

$smarty->assign('categories', get_categories_tree()); // 分类树
$smarty->assign('helps', get_shop_help()); // 网店帮助
$smarty->assign('top_goods', get_top10()); // 销售排行

$smarty->assign('best_goods', get_recommend_goods('best')); // 推荐商品
$smarty->assign('new_goods', get_recommend_goods('new')); // 最新商品
$smarty->assign('hot_goods', get_recommend_goods('hot')); // 热点文章
$smarty->assign('promotion_goods', get_promote_goods()); // 特价商品
$smarty->assign('brand_list', get_brands());
$smarty->assign('promotion_info', get_promotion_info()); // 增加一个动态显示所有促销信息的标签栏

$smarty->assign('invoice_list', index_get_invoice_query()); // 发货查询
$smarty->assign('new_articles', index_get_new_articles()); // 最新文章
$smarty->assign('group_buy_goods', index_get_group_buy()); // 团购商品
$smarty->assign('auction_list', index_get_auction()); // 拍卖活动
$smarty->assign('shop_notice', $_CFG['shop_notice']); // 商店公告
在此不予介绍smarty相关内容,很简单,一了解就会。所以不废话。


看后面的数值有的是函数,有的是数组 $_CFG这些都是从哪来呢?????

原来在前面的时候忘掉了一行代码,那么回过头去看。就是这一行了。

第18行。require(dirname(__FILE__) . '/includes/init.php');

好,看到这里你就要花费一些时间去来研究一下ecshop/includes/init.php文件了。

这个文件里面有百分之八十你想要的函数。当然了,ecshop的include文件夹下面的文件都是重要文件。大部分功能文件都在这下面了。

不多不少,先说到这。看源代码还是自己的事情,别人再怎么说也没有你一行一行的自己体会理解得更深。

我们所看到的。ecshop并不是那么完善。他有很多功能可以进行二次开发,他有很多页面可以修改成更利于用户体验的。可是,它并没有把这些全部做完,有的东西,即使是开源,完全开源,也是无法做到完全都整合好,再整个发给你直接就能用的。

商品的相册功能,商品尺寸选择,属性库存颜色变化功能,简化购物流程,ajax更新购物车,等等。
前端页面的修改与美化,增强用户体验等。

正是ecshop,有了这样一个优秀的开源框架,给了我们无限的可能。真心的希望ecshop团队财源广进,ecshop越来越发展壮大。

相关文档
最新文档