yershop商城系统是基于thinkphp和onethink开发而来,此系列将详细分析我在二次开发中所面临的种种问题。 (我使用的yershop版本较早,大概是去年5月份左右发布的。支付宝后台配置没有用,商品不支持多规格。本次介绍如果讲到这方面的问题,没有的亲请忽略。) 本篇简要分析日常在二次开发中涉及到的thinkphp和onethink知识。
yershop目录结构了解
此为我的项目中在zendstudio中截图 Addons:扩展插件目录,里面包含了第三方登陆插件、编辑器插件等; Application:项目目录,之后详细介绍 Data:数据库备份目录 Public:js、css、image网站图片资源保存 Uploads:上传图片、文件目录(SAE环境下存储于storage中) Runtime:运行中动态生成的程序(在检查标签语法出错时很有用,文件可删除) Thinkphp:Thinkphp包,yershop系统或onethink在开发中均对Thinkphp包有改动,勿直接换该文件
Application目录
Common:公共配置,进入应用程序后,首先加载此文件夹内容; User:用户模块,提供用户注册之类的核心方法; Install:安装模块,安装异常时可在此检查代码; Home:PC网站模块; Wap:手机网站模块;(个人开发,免费下载包无) Wei:嫁接weiphp2.0到商城所用模块(个人自定义模块,免费下载包无)
Common目录
此处重点关注 Common文件夹/function.php 和 Conf文件夹/config.php 两个文件 function.php为全局方法,Home、Wap、自定义模块等其它模块 均可调用其内方法; config.php 为全局配置文件,需要注意的是数据库连接以及User模块下同名文件的数据库连接。
问:PC站和手机站如何在输入主域名后直接访问对应模块(Home or Wap)? 答: 在config.php文件开头根据访问源指定要加载的模块,代码如下
if(!ismobile()){
$module = 'Home';
}else{
$module = 'Wap';
}
return array(
/* 模块相关配置 */
'AUTOLOAD_NAMESPACE' => array('Addons' => ONETHINK_ADDON_PATH), //扩展模块列表
'DEFAULT_MODULE' => $module,
...
ismobile()方法可使用function.php里已有的判断说否为手机方法,此处贴代码:
function ismobile() {
// 如果有HTTP_X_WAP_PROFILE则一定是移动设备
if (isset ($_SERVER['HTTP_X_WAP_PROFILE']))
return true;
//此条摘自TPM智能切换模板引擎,适合TPM开发
if(isset ($_SERVER['HTTP_CLIENT']) &&'PhoneClient'==$_SERVER['HTTP_CLIENT'])
return true;
//如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
if (isset ($_SERVER['HTTP_VIA']))
//找不到为flase,否则为true
return stristr($_SERVER['HTTP_VIA'], 'wap') ? true : false;
//判断手机发送的客户端标志,兼容性有待提高
if (isset ($_SERVER['HTTP_USER_AGENT'])) {
$clientkeywords = array(
'nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel',