由于想弄一个商城,因此研究了一下tp_shop,这个据说能完成几乎所有的功能。
考虑到原有的例子过于复杂,因此把所有相关的数据都删除了,结果上来就出错了,查了两天,大致弄清楚了状况。
关于错误的原因
在此文件中:Application/Home/Controller/ChannelController.class.php
运行完
SELECT `id`,`parent_cat_id`,`logo`,`is_hot` FROM `kj_brand` WHERE (
parent_cat_id>0 )
后,
然后运行至:
select goods_id,cat_id,goods_name,shop_price,market_price from kj_goods where
is_on_sale=1 and cat_id in ()
出错,原因是
$sub_id_str=()
然后
$sql = "select goods_id,cat_id,goods_name,shop_price,market_price from
__PREFIX__goods where is_on_sale=1 and cat_id in $sub_id_str ";
这句调用就出错了
另外,提一下日志体系,此日志使用thinkphp的日志体系,可参考:
http://document.thinkphp.cn/manual_3_2.html#log
由于系统封装了日志库,在functions.php中,函数为trace(),因此可在程序的任意地方打印日志,如在
Application/Home/Controller/IndexController.class.php的index()中调用如下代码:
trace('[ '.index.' ] --START--进入首页','','INFO');
则系统进入首页后会在日志文件中产生如下日志:
INFO: [ index ] --START--进入首页
关于系统加载:
先说配置:原先看到系统中到处都是config.php配置,好晕,看了一圈弄明白了,系统先是加载think下面的php,然后加载common下的,然后是模块下的,然后是模块对应的什么下的,总之,后面的配置覆盖前面的配置,最终合并到
$_config全局数组中。在App::run()之前的配置文件的加载,都是应用级别的,即最多到Application中的应用配置,之后的才会深入到Home或是其它目录中的应用配置
一个dot程序:描述首页的启动顺序:
digraph directed {
node [fontname=NSimSun];
{
"开始"->"检测是否安装"->"退出";
"检测是否安装"->"定义应用目录\n./Application"->"引入ThinkPHP\n入口文件";
"引入ThinkPHP\n入口文件"->"THINK_VERSION=\n3.2.3"->"require \nThink.Class.php";
"THINK_VERSION=\n3.2.3"->"Think::start()"->"加载应用模式\n配置文件config.php";
"加载应用模式\n配置文件config.php"->"App::run()"->"App::init()";
}
}