公要善其事,必先利其器
——FCS开发框架文件结构优化
FCS作为一个面向对象PHP开发框架,目前发展到了0.8版本,已经比较完善,但还有一些地方需要改进。为了更好的利用FCS来进行PHP开发,我们先对FCS进行一些目录优化,使其更要合理,使用起来更加方便。
一、优化前后的FCS文件结构对比
原来的文件结构(图1)
我们可以看到FCS原来的文件结构中,将应用文件放入FCS框架文件夹中,在上面的图片中我们看到,Common文件夹、Conf文件夹和Lib文件夹里面都有框架自带的后台管理应用admin文件夹,而框架将模板文件又独立于框架文件夹,同时应用的模板文件夹也放在外在,上面的片中,Tpl文件夹是系统文件夹,default/Public文件夹是系统公共文件夹,包含框架自带的消息模板和DataGrid模板的相关文件,而default/Admin则是后台管理应用admin的模板文件夹。
不好的原因1:如果我们现在要新建一个应用,就必须在上述的几个文件夹中或更多建立相应的应用文件夹,这样操作起来会很麻烦,有时会遗漏。同样的道理,如果我们要完成删除一个应用,就必须在这些包含有应用文件的文件夹中一一删除,而不能一次完成。
也许有朋友会说,直接用代码完成新建和删除就OK啦,直接又不会遗漏,但如果我的应用要添加一些目录,这些目录将放在哪呢?删除的时候,代码会将我添加的目录一同删除吗?就因为这样的原因,我对FCS的文件结构进行了优化。
优化后的文件结构(图2)
从图中我们可以看到,优化后的文件结构非常清晰,在FCS文件夹下有两个文件夹APP和FCS,APP文件夹存放所有的应用程序,比如本例中的Admin,FCS文件夹则全是FCS开发框架的文件。这样如果我们要新建一个应用,只需要在APP文件夹下建立一个新的文件夹就OK了,不需要穿行FCS系统文件夹中,要删除一个应用直接将应用文件夹删除,一次搞定。
优化后的文件结构比较清晰,方便开发。
二、具体实现步骤Step by step
1、将图1中FCS根目录下的Public、TPL和Doc(可以删除)移入FCS文件夹(有电脑图标)
2、在FCS根目录下新建一个APP文件夹,并在APP文件夹里面建立如图2的目录结构
3、将FCS/FCS/Common/Admin/下的所有文件,移到FCS/APP/Admin/Common文件夹
4、将FCS/FCS/Conf/Admin/下的所有文件,移到FCS/APP/Admin/Conf文件夹
5、将FCS/FCS/Lib/Admin/下的所有文件,移到FCS/APP/Admin/Lib文件夹
6、将FCS/FCS/TPL/default/Admin下的所有文件,移到FCS/APP/Admin/Tpl文件夹
7、将FCS/FCS/Lib/FCS/文件夹下的所有文件,移到FCS/FCS/Lib文件夹,并将FCS/FCS/Lib/FCS文件夹删除
8、将FCS/admin.php文件,移到FCS/APP/Admin文件夹
9、、修改FCS/index.php文件
在require 前添加代码
define('WEB_ROOT', dirname(__FILE__));
define('FCS_PATH', WEB_ROOT . '/FCS');
将 require 'admin.php';
修改为: require ‘APP/admin/admin.php’;
10、修改FCS/APP/Admin/Admin.php文件
将代码
define('FCS_PATH', dirname(__FILE__).'/FCS');
define('WEB_ROOT', dirname(__FILE__));
删除
在define('APP_NAME', 'Admin'); 语句下添加以下语句
//定义项目文件绝对路径
define('APP_PATH', WEB_ROOT . '/APP/' . APP_NAME);
11、修改FCS/FCS/Common/defines.php文件
在 //目录设置 语句下行添加语句 define('COMMON_DIR', 'Common');
在define('UPLOAD_PATH',FCS_PATH.'/Uploads/'); // 语句下添加以下代码
//项目文件路径设置
define('APP_LIB_PATH',APP_PATH.'/'.LIB_DIR.'/'); //
define('APP_COMMON_PATH', APP_PATH .'/' . COMMOM_DIR .'/')
define('APP_TAG_PATH',APP_PATH.'/'.TAGS_DIR.'/'); //
define('APP_CACHE_PATH',APP_PATH.'/'.CACHE_DIR.'/'); //
define('APP_HTML_PATH',APP_PATH.'/'.HTML_DIR.'/'); //
define('APP_CONFIG_PATH',APP_PATH.'/'.CONF_DIR.'/'); //
define('APP_LOG_PATH',APP_PATH.'/'.LOG_DIR.'/'); //
define('APP_LANG_PATH',APP_PATH.'/'.LANG_DIR.'/'); //
define('APP_TEMP_PATH',APP_PATH.'/'.TEMP_DIR.'/'); //
define('APP_CLIENT_PATH',APP_PATH.'/Client/'); //
define('APP_UPLOAD_PATH',APP_PATH.'/Uploads/'); //
define('APP_TPL_PATH', APP_PATH.'/Tpl/');//
12、修改FCS/APP/Conf/_define.php文件
将
define('APPS_PATH',FCS_PATH.'/Lib/');
修改为
define('APPS_PATH',APP_LIB_PATH);
13、修改FCS/FCS/Lib/Core/App.class.php文件
将以下代码
$list = glob(FCS_PATH.'/Common/'.APP_NAME.'/*.php');
if(!empty($list)) {
import(APP_NAME.'.*',FCS_PATH.'/Common/','.php');
}
修改为:
$list = glob(APP_COMMON_PAH . '*.php');
if(!empty($list)) {
import('.*',APP_COMMON_PAH ,'.php');
}
将 $this->loadConfig('App',CONFIG_PATH.APP_NAME.'/');
修改为 $this->loadConfig('App',APP_CONFIG_PATH);
将 $list = glob($path.$name.'.*');
修改为 $list = glob(CONFIG_PATH . $name.'.*');
将代码
if (file_exists(LANG_PATH.APP_NAME.'/'.$langSet.".php")) {
include_cache(LANG_PATH.APP_NAME.'/'.$langSet.".php");
}
修改为
if (file_exists(APP_LANG_PATH .$langSet.".php")) {
include_cache(APP_LANG_PATH . $langSet.".php");
}
将代码
define('TEMPLATE_MODULE_PATH',APP_NAME.'/'.MODULE_NAME.'/');
修改为
define('TEMPLATE_MODULE_PATH', MODULE_NAME.'/');
将代码
//系统公共文件地址
define('SYS_PUBLIC_URL', WEB_URL.'/'.TMPL_DIR.'/'.TEMPLATE_NAME.'/Public');
//网站公共文件地址
define('WEB_PUBLIC_URL', WEB_URL.'/Public');
//项目公共文件地址
define('APP_PUBLIC_URL', WEB_URL.'/'.TMPL_DIR.'/'.TEMPLATE_NAME.'/'.APP_NAME.'/Public');
define('__CURRENT__', WEB_URL.'/'.TMPL_DIR.'/'.TEMPLATE_NAME.'/'.APP_NAME.'/'.MODULE_NAME);
//模板文件名 绝对路径
define('TMPL_FILE_NAME',TEMPLATE_PATH.'/'.TEMPLATE_MODULE_PATH.ACTION_NAME.TEMPLATE_SUFFIX);
//CACHE文件名 绝对路径
define('CACHE_FILE_NAME',CACHE_PATH.APP_NAME.'/'.md5(TMPL_FILE_NAME).CACHFILE_SUFFIX);
if(HTML_CACHE_ON != false){
//生成唯一的静态文件名
define('HTML_FILE_NAME',HTML_PATH.APP_NAME.'/'.md5($_SERVER['REQUEST_URI']).HTMLFILE_SUFFIX);
}
修改为
//系统公共文件地址
define('SYS_PUBLIC_URL', WEB_URL.'/FCS/'.TMPL_DIR.'/'.TEMPLATE_NAME.'/Public');
//网站公共文件地址
define('WEB_PUBLIC_URL', WEB_URL.'/FCS/Public');
//项目公共文件地址
define('APP_PUBLIC_URL', WEB_URL.'/APP/'.APP_NAME .'/' .TMPL_DIR.'/Public');
define('__CURRENT__', WEB_URL.'/APP/'. APP_NAME .'/' .TMPL_DIR.'/'.MODULE_NAME);
//模板文件名 绝对路径
define('TMPL_FILE_NAME',APP_TPL_PATH.'/'.TEMPLATE_MODULE_PATH.ACTION_NAME.TEMPLATE_SUFFIX);
//CACHE文件名 绝对路径
define('CACHE_FILE_NAME',APP_CACHE_PATH . md5(TMPL_FILE_NAME).CACHFILE_SUFFIX);
if(HTML_CACHE_ON != false){
//生成唯一的静态文件名
define('HTML_FILE_NAME',APP_HTML_PATH . md5($_SERVER['REQUEST_URI']).HTMLFILE_SUFFIX);
}
将代码
$moduleClassFile = APPS_PATH.APP_NAME;
修改为
$moduleClassFile = APPS_PATH;
14、修改FCS/FCS/Lib/Core/Template.class.php
将代码
$tmplCacheFile = CACHE_PATH.APP_NAME.'/'.md5($tmplTemplateFile).CACHFILE_SUFFIX;
修改为
$tmplCacheFile = APP_CACHE_PATH . md5($tmplTemplateFile).CACHFILE_SUFFIX;
将代码
$tmplCacheFile = CACHE_PATH.APP_NAME.'/'.md5($tmplTemplateFile).CACHFILE_SUFFIX;
修改为
$tmplCacheFile = APP_CACHE_PATH . md5($tmplTemplateFile).CACHFILE_SUFFIX;
将代码
if(!file_exists($tmplCacheFile))
{
$appDir = CACHE_PATH.APP_NAME;
if (!file_exists($appDir)) { // 项目缓存目录不存在则创建
mkdir($appDir);
}
return False;
}
修改为
if(!file_exists($tmplCacheFile)){
if (!file_exists(APP_CACHE_PATH)) { // 项目缓存目录不存在则创建
mkdir($appDir);
}
return False;
}
将代码
if(!file_exists($tmplHTMLFile)){
$appDir = HTML_PATH.APP_NAME;
if (!file_exists($appDir)) { // 项目静态目录不存在则创建
mkdir($appDir);
}
return False;
}
修改为
if(!file_exists($tmplHTMLFile)){
if (!file_exists(APP_HTML_PATH)) { // 项目静态目录不存在则创建
mkdir($appDir);
}
return False;
}
将代码
$tmplTemplateFile = TEMPLATE_PATH.'/'.TEMPLATE_MODULE_PATH;
修改为
$tmplTemplateFile = APP_TPL_PATH . TEMPLATE_MODULE_PATH;
15、修改FCS/FCS/Lib/Util/Log.class.php文件
将 LOG_PATH 替换为 APP_LOG_PATH
16、修改FCS/FCS/Commom/Functions.php
在函数开头添加代码
$temp = explode('.',$class);
if(''!= $temp[0] && 'fcs'!=strtolower($temp[0]) )
{
$baseUrl = APPS_PATH;
$class = str_replace($temp[0].'.','', $class);
}
将代码
$tpl->assign('publicCss',WEB_URL.'/'.TMPL_DIR.'/'.TEMPLATE_NAME.'/Public/css/FCS.css');
修改为
$tpl->assign('publicCss',WEB_URL.'/FCS/'.TMPL_DIR.'/'.TEMPLATE_NAME.'/Public/css/FCS.css');
三、大功告成了
至此我们可以访问http://localhost/fcs/并且登录后台管理系统,如果系统运行正常,那么说明我们的修改是正确的.
好了,FCS开发框架文件结构优化就完成了。在以后的一系列FCS框架的开发教程,都是基于此优化版的FCS框架,请朋友们记得哦 ^_^。
四、FCS开发框架文件结构优化版 下载