ecmall是一个开源的C2C网上商城系统,但是它的功能还比较不完善,ShopEx把它从康盛收购过来以后好像也有打入冷宫的意思。不过免费的有的用就不错了,程序员的座右铭就是自己动手,丰衣足食。我是学.NET出身,对PHP只是略知一二,无奈公司只有我一个技术,我只能自己慢慢研究啦。
首先就是打开index.php,我对php项目的第一印象就是一大堆include和require,这个无可厚非,就像我们用using一样。然后我看到了ECMall的startup方法。
/* 启动ECMall */ ECMall::startup(array( 'default_app' => 'default', 'default_act' => 'index', 'app_root' => ROOT_PATH . '/app', 'external_libs' => array( ROOT_PATH . '/includes/global.lib.php', ROOT_PATH . '/includes/libraries/time.lib.php', ROOT_PATH . '/includes/ecapp.base.php', ROOT_PATH . '/includes/plugin.base.php', ROOT_PATH . '/app/frontend.base.php', ROOT_PATH . '/includes/subdomain.inc.php', ), ));
如此一来便知道ECMall应该是MVC设计的了。在/app目录下的每一个*.app.php文件就是每一个控制器。既然看到了'default_app'是'defalut',那就去找一下default.app.php,终于看到了比较靠谱的index()方法,这应该就是网站的入口了。
function index() { $this->assign('index', 1); // 标识当前页面是首页,用于设置导航状态 $this->assign('icp_number', Conf::get('icp_number')); /* 热门搜索 */ $this->assign('hot_keywords', $this->_get_hot_keywords()); $this->_config_seo(array( 'title' => Lang::get('mall_index') . ' - ' . Conf::get('site_title'), )); $this->assign('page_description', Conf::get('site_description')); $this->assign('page_keywords', Conf::get('site_keywords')); $this->display('index.html'); }
这个index()方法分配了一堆变量,现在也不知道都有啥用,看名字差不多能知道点。最后来了个display()方法。对于有着几天“深厚”smarty功底的我来说,这肯定就是把变量分配到模板中了。再去/themes/mall/default中找到了index.html文件,只看到了一堆div和 <!--{widgets page=index area=banner}-->之类的标记。widgets就是ECMall的挂件模块了吧,虽然用起来方便,但是二次开发起来可能会麻烦一点。