楠Go随笔

第三课:解析Discuz插件访问规则

2017-12-01 16:41:34 admin 阅读 网站首页 > PHP > Discuz的使用

通过上面的目录结构介绍我们可以感受到Discuz处理请求是模块化处理的。插件操作走插件入口plugin.php 板块操作走forum.php。

在后台将插件开启后会注册到系统中,在框架初始化的过程中会通过参数判断,解析出需要操作的模块。观察下面的插件请求可以看到

http://www.mybbs.com/plugin.php?id=myplugin 

进入plugin.php插件入口后通过获取id参数可以找到指定插件,我们还可以再指派子入口文件进入插件其他模块,如下

http://www.mybbs.com/plugin.php?id=myplugin:admin

:冒号后面的参数表示打开指定插件的入口文件以inc.php结尾 ,不带该参数默认调用与插件名同名的入口文件,现在加上admin后就可以调用 myplugin插件下的admin.inc.php文件

新建 admin.inc.php 输出如下php代码

<?php
echo "I'm myplugin's admin";
?>

执行上面请求可以查看正确输出。为什么我们需要采用入口式的开发模式的。

利于我们在处理请求的时候自上而下逐层细化,把各种请求分开,分成多个独立的PHP文件,可以减少文件体积也可以快速定位文件。而且有时候为了在逻辑上的规划,需要把程序区分前台和后台模块,也需要用入口的方式分派。

不过有些时候上面的请求链接太长,我们需要简化请求地址。这个时候我们有两种处理方式。

第一种 添加独立的插件入口文件,封装参数。

    在网站的根目录下新建一个文件 取名为 myplugin.php

    在文件中输出以下代码

<?php
$_GET['id'] = 'myplugin'; require 'plugin.php';
?>

访问http://www.mybbs.com/myplugin.php 时可以正常访问相应的插件入口文件 当然你可以将参数改为其他的

第二种 重写web服务器的url路径,这种情况需要更改web服务器如apache的配置

          打开虚拟主机配置文件找到我们的主机配置项,在Directory 里面填入如下

        #允许所有重写

        AllowOverride All

        #打开重写引擎

        RewriteEngine On

        #添加重写规则

        #没有带其他参数的重写

        RewriteRule ^myplugin\.php$ /plugin.php?id=myplugin [L]

        #没带其他参数的重写方式

        RewriteRule ^myplugin-(.*)\.php$ /plugin.php?id=myplugin&$1 [L]

       重启apache 后重写请求尝试

推荐采用第一种方式,不懂正则表达式的同学在涉及到url重写时会很疑惑,出现错误也无法定位错误。

搜索

关于楠Go

2015年毕业于吉林大学珠海学院,现今工作已两年有余,2014年在珠海一家游戏公司从事手机游戏开发,后离职转型为网络端PHP工程师,时至今日。熟练掌握PHP面向对象编程网络编程TP框架使用Discuz论坛插件开发。掌握前端框架Bootstrap的使用,掌握JS框架Jquery的使用。已开发多款网站,有着一定基础的开发经验,希望能在互联网领域再上一层楼!

了解更多: 开源中国 ThinkPHP


Powered by MetInfo 5.3.19 ©2008-2019 www.MetInfo.cn