应用框架文件结构

2018-06-22 23:24:36 admin 6

创建一个全新应用的第一步是创建一个应用文件,整个应用框架的文件结构如下图所示。网站根目录下的app文件,就是整个应用的框架开发包。
应用框架文件结构:

|--app 应用框架文件夹,存放框架文件和应用文件
 |--system 应用框架系统文件 |--app 应用文件夹
 |--entrance.php 应用入口文件,实际指向框架入口。 |--yingyong1 一个应用
 |--yingyong2 一个应用|--admin 应用后台模块
|--templates 应用后台模板文件夹|--web 应用前台模块
|--templates 应用前台模板文件夹|--include 应用自定义公用文件
 |--class 公用类文件
 |--function 公用函数文件
|--plugin 应用插件|--icon.png 应用图标

如上图所示,所有的企业应用都是放在app/app/文件夹下,在此目录中新建一个文件夹,就是一个全新的应用。文件夹的名字必须只能由26个小写字母,数字,下划线组成
yingyong2下的文件结构就是应用的内部文件结构。可以按照实际应用需求新建,比如plugin文件,如果没有插件,可以不新建。

2.2 创建模块文件

应用模块可以分为两类,后台模块和前台模块,其中后台模块必须继承admin类(后台模块基类),存放在admin文件夹中。前台模块必须继承web类(后台模块基类),存放在web文件夹中。在应用模块中,模块类名称与方法名称,只能由小写字母,下划线,数字组成。模块文件要已UTF-8无BOM格式保存。

新建后台模块:新建一个“app/app/应用文件夹/admin/模块类名.class.php”文件,则此文件就是一个后台模块文件。后台模块代码实例如下:

defined('IN_MET') or exit('No permission');//所有文件都是已这句话开头,保证系统单入口。load::sys_class('admin');//包含后台基类,“.class.php”可以省略。class 模块类名 extends admin {//继承后台基类。类名称要与文件名一致
public function __construct() {parent::__construct();//如果重写了初始化方法,一定要调用父类的初始化函数。
}public function doindex(){//定义自己的方法
global $_M;//引入全局数组
//自己的代码
require $this->template('own/index');//引入模板文件,必须global $_M
}
}

新建前台模块:新建一个“app/app/应用文件夹/web/模块类名.class.php”文件,则此文件就是一个前台模块文件。前台模块代码实例如下:

defined('IN_MET') or exit('No permission');//所有文件都是已这句话开头,保证系统单入口。load::sys_class('web');//包含后台基类,“.class.php” 可以省略。class 模块类名 extends web {//继承后台基类。类名称要与文件名一致
public function __construct() {parent::__construct();//如果重写了初始化方法,一定要调用父类的初始化函数。
}public function doindex(){//定义自己的方法
global $_M;//引入全局数组
//自己的代码
require $this->custom_template('own/index',1);//引入模板文件,必须global $_M
}
}

2.3 创建模板文件

应用模板结构同模板制作中的模板结构,当前应用框架可以兼容全站调用的模板标签,但是在某个模块下使用的标签无法再页面中使用。不要在应用框架中使用模板标签。模板标签会在以后专门优化,优化后的模板标签将可以直接在模板制作和应用框架中使用。
模板文件存放在应用文件的模块文件夹下。另外应用的模板文件都是PHP文件,不要用html或htm。模板文件要用utf-8无BOM格式保存。前台模板文件和后台文件语法是一样的。

后台模板文件
一般应用模板结构(后台文件):存放在“app/app/应用文件夹/admin/templates/”目录下,后台模板一般使用基类的template方法引入。

<!--<?php# MetInfo Enterprise Content Management System # Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved. defined('IN_MET') or exit('No permission');//保持入口文件,每个应用模板都要添加//PHP代码require_once $this->template('ui/head');//引用头部UI文件echo <<<EOT
-->
<a>html代码</a>
<!--
EOT;require_once $this->template('ui/foot');//引用底部UI文件# This program is an open source system, commercial use, 
# please consciously to purchase commercial license.# Copyright (C) MetInfo Co., Ltd. (http://www.metinfo.cn). All rights reserved.?>//页面结尾-->只有当这个文件是页面整体(包括包含文件)是最后一个文件时候才添加,
 // 一般在应用制作中的可以自定义的文件,都不是最后一个,所以一般不需要添加。

注意:复制上面代码时候,请复制后将“//页面结尾”后的代码删除。

前台模板文件
一般应用模板结构(前台文件):存放在“app/app/应用文件夹/web/templates/”目录下,前台模板一般使用前台基类的custom_template方法引入

<!--<?php
# MetInfo Enterprise Content Management System 
# Copyright (C) MetInfo Co.,Ltd (http://www.metinfo.cn). All rights reserved. 

defined('IN_MET') or exit('No permission');//保持入口文件,每个应用模板都要添加
//PHP代码
echo <<<EOT
--><a>html代码</a><!--
EOT;
# This program is an open source system, commercial use, 
# please consciously to purchase commercial license.
# Copyright (C) MetInfo Co., Ltd. (http://www.metinfo.cn). All rights reserved.
?>//页面结尾-->只有当这个文件是页面整体(包括包含文件)是最后一个文件时候才添加,
//一般在应用制作中的可以自定义的文件,都不是最后一个,所以一般不需要添加。

注意:复制上面代码时候,请复制后将“//页面结尾”后的代码删除。

模板结构详解

一般代码格式

<!--
EOT;
//这里面编写PHP 嵌入语言
//可以有多行
//.....
echo <<<EOT
-->

上面代码中的1、2行和6、7行是必须要的,用于保护PHP嵌入代码,而且需要顶格写。
仔细看会发现,其实就是用HTML的注释符号包裹。

PHP嵌入代码可以直接写到模板页面

<div class="newslist"> <ul><!--
EOT;
foreach(methtml_getarray(2,'','','',10,'','',1,'') as $key=>$val){
echo <<<EOT
-->
 <li>
 <span>[{$val[updatetime]}]</span>
 <a href="{$val[url]}" target="_blank" title="{$val[title]}">{$val[title]}</a>
 </li><!--
EOT;
}
echo <<<EOT
-->
</ul></div>

上面代码中的3至7行与12至16行都是PHP嵌入代码,之外的就是HTML代码。
PHP嵌入代码可以无限的在模板中使用。

PHP嵌入代码有两个特殊情况
页面开头代码

<!--<?php
//这里还可以加入PHP 嵌入语言
echo <<<EOT
-->

上面代码中的第一行与PHP嵌入代码格式略有不同,要注意这一点,每个模板文件的开头必须这样写。

页面结尾代码

<!--
EOT;
//这里还可以加入PHP嵌入语言
?>-->

上面代码中的第四行,与PHP嵌入代码格式略有不同,要注意这一点,每个模板文件的尾部必须这样写。
注意:上面代码第四行最后的-->不是每个页面都需要,只有页面引用的最底部文件才需要,如果是中间或头部引用页面请去除-->,这个问题会体现在页面中直接出现-->类似的符号。



作者:layjoy
链接:https://www.jianshu.com/p/4b8b58439198
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。