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的掛件模塊了吧,雖然用起來方便,但是二次開發起來可能會麻煩一點。