应用前台开发
应用所有前台操作代码都写在 应用唯一标识.app.php
请求链接为:应用唯一标识.php?do=执行的操作&其它参数
例:
文章应用 article.app.php
链接:article.php?id=1
请求方法:do_iCMS
警告:所有用户提交参数,所有可请求链接参数,都必须过滤后才可以继续其它操作系统默认所有$_GET,$_POST都进行了`addslashes`处理,但是这样还是不够的推荐整数形加(int),字符串最基本也要使用htmlspecialchars()或者使用系统iSecurity::escapeStr()处理其它类型自行处理
<?phpclass 应用唯一标识App{ //允许用URL访问的方法,仅限于do_,API_,ACTION_开头类的方法,默认需要有一个'iCMS' //无需填写do_,API_,ACTION_开头 public $methods = array('iCMS','允许访问方法名','执行的操作'); public function __construct() {} /** * [无do请求参数下,默认访问这个方法] */ public function do_iCMS(){ } /** * [do类方法主要用于处理来自 (应用唯一标识.php?do=执行的操作) 的GET请求] */ public function do_执行的操作(){ /*可正常使用$_GET,$_POST之类PHP原生代码接收提交的数据*/ $id = (int)$_GET['id']; $name = iSecurity::escapeStr($_POST['name']); } /** * [API类方法主要用于处理来自api.php?app=应用唯一标识&do=执行的操作 的GET请求] */ public function API_执行的操作(){ /*可正常使用$_GET,$_POST之类PHP原生代码接收提交的数据*/ $id = (int)$_GET['id']; $name = iSecurity::escapeStr($_POST['name']); } /** * [ACTION类方法主要用于POST请求] */ public function ACTION_执行的操作(){ /*可正常使用$_POST之类PHP原生代码接收提交的数据*/ $id = (int)$_POST['id']; $name = iSecurity::escapeStr($_POST['name']); }}?>
注:本来应以文章应用
为示例,但是发现文章应用
已经更新为统一标准应用模式,使用继承appsApp
的方法,在这里不适合用来做示例
以用户应用为例 user.app.php
用户登陆页,请求链接为:user.php?do=login
,对应方法do_login
但是用户应用采用的是以api.php
为链接的模式
所以请求链接为:api.php?app=user&do=login
,对应方法API_login
<?phpclass userApp{ public $methods = array('iCMS', 'login'); public $config = array(); public function __construct() { //获取用户应用配置 $this->config = iCMS::$config['user']; } /** * [用户登陆] */ public function do_login(){ /*......*/ /*用户访问登陆页面执行的相关代码*/ /*......*/ /*读取模板*/ iView::display('iCMS://user/login.htm'); } /** * [功能作用与do_login是一致的,一般出于兼容做法,可直接在这个方法里调用do_login,也可以另外编不一样的代码] */ public function API_login() { $this->do_login(); } /** * [在登陆页面用户提交登陆操作执行的方法] */ public function ACTION_login() { /*用户执行登陆时的相关代码*/ /*可根据页面使用的提交方法,返回相关类形数据*/ /*如:AJAX,可返回json*/ if(登陆成功){ iUI::code(1, 0, $this->forward, 'json'); }else{ iUI::code(0, 'user:login:error', 'uname', 'json'); } } /** * [其它方法] * 遵循PHP类方法编写规则就行 */ public function openid() { }}?>
那么问题来了,我想要在用户应用二次开发,要怎么把代码,请求链接添加到应用呢?
二次开发
新增代码的两种方式:
1.直接在user.app.php
添加代码
不推荐使用此方式,因为如果官方更新用户应用的相关代码会把您添加代码覆盖掉,不过放心升级时系统会自动对代码进行备份.更新完成后自行在对比添加下就可以了
<?phpclass userApp{ //这里一定要追加,不然就无法访问 public $methods = array('ooxx'); /** * [二次开发] */ public function do_ooxx() { /*代码*/ } /** * [二次开发] */ public function API_ooxx() { /*代码*/ }?>
因为访问链接不一样,可以实现不一样功能,自行决定
2.使用内部方法重写方式
所有应用支持将xxx.app.php内部方法重写
api请求API_xxx.app.php
<?php//继承 articleAppclass API_articleApp extends articleApp { public function __construct() { parent::__construct(); //追加允许访问方法 array_push($this->methods, "aaaa"); } //对API_hits方法二次开发 public function API_hits($id = null) { var_dump($_GET); } //新增功能 public function API_aaaa($id = null) { var_dump($_GET); }}?>
action请求ACTION_xxx.app.php,
<?php//继承 articleAppclass ACTION_articleApp extends articleApp { //对ACTION_vote方法二次开发 public function ACTION_vote() { var_dump($_POST); }}?>
其它请求DO_xxx.app.php
<?php//继承 articleAppclass DO_articleApp extends articleApp { //对article方法二次开发 public function article(){ //...code }}?>
等三种方式重写,二次开发将不在受官方更新影响
配置前端路由
代码是解决了,但是我现在要怎么访问,链接是什么,怎么在模板里调用等等
开发前我们在基本介绍里说过所有应用都要在后台应用管理添加.
具体请见 为应用配置前端路由
看完后我们就刚才API_articleApp
添加的代码,如何配置路由的,其它的类同,ACTION_articleApp
不用配置一般提交到api.php
记得带上app
数据就可以了
示例新功能aaaa
{ "article:aaaa": [ "/article/aaaa", "api.php?app=article&do=aaaa"//因为方法是城API类型 //"article.php?do=aaaa" //如果方法是do_aaaa 使用这个 ]}
PHP中调用方式
<?phpiURL::router('article:aaaa');?>
模板中调用方式
<!--{iCMS:router url='article:aaaa'}-->
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, Fastadmin, ClassCMS, LeCMS, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。