代码早就拿到了,但是一直没有时间研究,今天估计再不看项目来不及了。= =真想分个身啊。
淘宝开源网店(简称TOP)是一套基于PHP的MVC架构建站系统,安装要求apache + mysql + php,版本不太旧就ok了。安装的话由于现在要求通过淘宝验证的网站才可能完全激活,因此本机上是要修改程序的。文件解压,用浏览器访问http://127.0.0.1/install/install.php,按它的要求一步一步来,到建完数据库,要到淘宝验证身份时就可以了,后面的你也验证不了,没有意义。接下来修改代码,在config的site_config.php里面修改 tom_site_open,tom_install_finished 分别为1 和true,如果开启了apache 的 rewrite 模块的话建议将 tom_rewrite_url 也设为 true。然后修改 /lib/tom/admin/filter 下的security.class.php,将35行的判断修改为恒真。删除 install 目录,看一下数据库里的表,如果只有15个的话,也就是只有前台的数据库的话,那就在根目录下搜索 *.sql,再用tools 里的tom 程序导入这些 sql 文件,具体用法参照 tom default/list。全部建好后应该是46个表( 我只有45个,但好像也没有什么影响)。做完这些再在 employee 表里加入一个 status 为1的用户,密码为 md5 加密。这样就可以在后台作为后台用户登录了,切记不要用店长登录,那个要授权过的。
安装完后了解一下它的大概机制,首先说 url 风格吧,它将地址分成两种,一种是 url,这是外部使用的地址,一种是 uri,表示网站内部的地址,你可以在site_config.php 的 tom_router_rules 里面配置。默认已经有几条规则了,看了下还是挺简单的,以 detail 为例,url 为 detail-:iid 对应着 content/detail 的uri,:iid表示 – 后面的作为 iid 这个变量传给接下来的文件。网页默认后缀是 html,也可以用 tom_url_suffix 修改。url 的产生的话可以调用 router 的 genUrl 函数,将 uri 和变量都传入进去即可,类似下面这样: $router->genUrl(array(‘uri’=>’content/detail’, ‘iid’=>’2d5d377e0df53a1026aee829bddaa540′));。另外如果要生成网址用于利用GET请求在页面之间传递值,那应该用genPartialUrl 方法,如果在后台生成前台 url,那应该使用 genFrontendUrl 方法。
uri 对应着 module/action,比如 content/index ,在 dispatch 的时候,程序会在 modules/content 下面找到 actions.class.php ,再调用里面的 indexAction 函数。程序员要手动地在 action 里指定应该 render 哪个 view,view文件应该在content/views 下,以 view名,比如 index,开头,以.tpl.php 结尾。在 view 里能够调用 action里的 $this 中的所有 public 变量,其实有系统自带的比如 request等,也可能是你自己赋值的。
如果 module 操作数据库的话,非系统自带的数据库创建脚本应该在 modules/modulename/data/install.sql 中,注意,表名要写成 #__tablename,创建的时候前面的#__会被自动替换为前缀。简单的交互可以用 Tom_Factory::getTable()方法得到一个表对象,再调用它的查询函数。如果想把数据操作部分分开(我觉得这里设计有点问题的,它的Model 方面过多地参考了ZF 的设计,我觉得过于繁琐,还不如用 JSP了,个人比较喜欢 CakePHP的方式),那就在 module文件夹下再新建一个 lib 文件夹,新建文件名为 modelname.class.php的文件,其中的类名为 modulename_Model_modelname ,继承自 Tom_Db_Record。内容的话可以参考已经有的,我个人建议用 Tools里的程序自动生成。
疑问一:在layout 里如果用 的方式可以引用一个 module,调用的 action是名为 moduleAction的函数,那怎么给这个函数传递参数呢?
疑问二:module 和 plugin 的区别,现在我只知道它们的文件组织形式不同,url 也有区别,plugin 的url 甚至是 pluginname/filename/actionname 的形式,让人觉得不够一致。其实后台文件夹,即 admin文件里还有它本身的modules, plugins ,我觉得这个设计不是很合理
能不能将这份源码给我研究一下呢?如果可以请发到我邮箱好吗?谢谢