文档中心

iCMS文档

二次开发

应用基础知识-应用前台开发

应用前台开发

应用所有前台操作代码都写在 应用唯一标识.app.php
请求链接为:应用唯一标识.php?do=执行的操作&其它参数
例:
文章应用 article.app.php
链接:article.php?id=1
请求方法:do_iCMS

<?php
class 应用唯一标识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

<?php
class 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添加代码

不推荐使用此方式,因为如果官方更新用户应用的相关代码会把您添加代码覆盖掉,不过放心升级时系统会自动对代码进行备份.更新完成后自行在对比添加下就可以了

<?php
class userApp{
    //这里一定要追加,不然就无法访问
    public $methods = array('ooxx');
    /**
     * [二次开发]
     */
    public function do_ooxx() {
        /*代码*/
    }
    /**
     * [二次开发]
     */
    public function API_ooxx() {
        /*代码*/
    }
?>

因为访问链接不一样,可以实现不一样功能,自行决定

2.使用内部方法重写方式

所有应用支持将xxx.app.php内部方法重写
api请求API_xxx.app.php

<?php
//继承 articleApp
class 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
//继承 articleApp
class ACTION_articleApp extends articleApp {
    //对ACTION_vote方法二次开发
    public function ACTION_vote() {
        var_dump($_POST);
    }
}
?>

其它请求DO_xxx.app.php

<?php
//继承 articleApp
class 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中调用方式

<?php
iURL::router('article:aaaa');
?>

模板中调用方式

<!--{iCMS:router url='article:aaaa'}-->

评论

暂无评论...
验证码 换一张
取 消