不积跬步无以至千里

记录精彩的程序人生

  • 首页
  • Java
  • Golang
  • PHP
  • Python
  • Nodejs
  • Lua
  • Docker
  • DevOps
  • 文章归档
  • 默认分类
  • 关于
  • 标签

  • 搜索
PostgreSQL hbase 时间同步 nexus 开机启动 nexus, 开机启动 jenkins安装配置 gitlab安装配置 gitlab安装 文件系统 fastdfs gcc切换 gcc升级 mysql8 交换空间 虚拟内存 tcp thrift lua tag test VPN SoftEtherVPN homebrew asm spring tomcat maven jdk ios mac 图案字符 figlet mysql半同步复制 mysql主从同步 一主多从 一主一从 主从同步 反向代理 密码重置 test 虚拟机扩容 swap 虚拟空间 docker ldocker grpc-gateway protobuf 微服务 go grp GRPC 授权登录 OAuth2.0 SOA supervisord supervisor RPC CentOS rabbitmq 环境变量 php-fpm php.ini error php7 lnmp 编译安装 mysql nginx linux java php python redis 字符串操作 mysql5.7 Solo

sharetronix主要代码结构分析

发表于 2020-02-11 | 分类于 默认分类 | 0 | 阅读次数 1604

sharetronix是一个开源的php微博系统,其功能之完善令人叫绝,最基本的发微博、转发、评论、好友关注、微博内嵌图片、视频、音乐等自 然不在话下,甚至群组、权限管理、多语言,移动设备访问都一应俱全,而且部署安装过程非常简单,即使不做任何修改,安装之后即刻就能上线一个“五脏俱全” 的微博平台。

本文主要对于sharetronix的代码结构进行介绍,希望对需要在sharetronix上做二次开发的同学有所帮助。sharetronix的官网上有详细的安装步骤,这里不再赘述。

目录结构介绍:

安装好之后进入网站目录,可以看到如下的文件结构:

其中,i文件夹用于存放上传的各种图片和文件,比如用户头像就 放在i/avatars;system是逻辑代码和数据访问相关代码的存放地;themes用于放置前台展示层的文件;index.php是网站的入口, 其中只有一行代码,作用就是执行system/LOADER.php文件。下面我们到system里面去瞧瞧:

cache是放置缓存文件的地方,sharetronix原生支持多种缓存机制;

classes放置类的实现,这些类会被多个controller用到,功能主要是与数据库打交道,可以理解为是MVC里的model,虽然这里也存放一些实现了公用数据访问功能的类,比如class_network.php;

controllers自然是控制逻辑实现的地方,所有页面处理逻辑、ajax处理函数都放在这里;

helpers放置一些工具函数,比如用于图像处理的func_images.php;

languages是实现i18n的地方,sharetronix原装支持的语言数已经非常多了,如果要修改或者新增一个字符串,就到相应语言文件夹下对应的文件里修改即可;

conf_main.php和conf_system.php是全局变量设置的地方,比如存放图片的文件夹位置,每页显示的评论数量等等信息就在这里设置。

再回到上一级,看看themes里面:

themes里面按主题分为不同的文件夹,系统默认使用的是default主题。每个主题文件夹内包括html,js,css,images用于存放相应的前台文件,如果要修改展示方面的内容,就在这里下手啦。

访问用户页面的请求处理过程:

这里以一次访问用户页面的请求处理过程为例,简单介绍一下sharetronix的URL处理和MVC的交互过程。

假设网站有个注册用户叫idealllee,网站根目录的 URL为http://localhost/sharetronix,那么如下URL就会访问idealllee的个人页面:http: //localhost/sharetronix/idealllee,让我们具体看看这个过程。

首先,无论什么请求,都会经过LOADER.php的处理,在 这里全局变量$C生效,$C把conf_main.php和conf_system.php中配置的各种全局信息导入,另外两个很关键的对象$db2 和$network会被创建,其中$db2被赋予一个新建的数据库实例,通过$db2系统随时可以进行数据库操作,$network是 class_network.php的一个实例,它对controller屏蔽了缓存层,controller在读取允许缓存的数据时,均是通过 network中定义的函数进行的。接下来LOADER.php创建一个class_page.php实例$page,并把接下来的工作交给它。

$page可以理解为是一个具有request作用域的对象, 在controller中随处可见的$this对象指的就是这个$page对象。$page对象最主要的功能就是URL解析,这个工作由 _parse_input()函数完成。本例中,idealllee会在_parse_input()中被识别为一个用户名,然后这个用户对象会被保存 在$this->param-user中,而查询用户对象使用的就是$network中的get_user_by_username()方法。接下 来通过_load_controller()方法将请求传递给controllers里的user.php来处理页面逻辑。

至此,所以的初始化工作都完成了,接下来就转入了具体的业务逻辑处理了,这个过程是由相应的controller负责的,URL中在第一个子参数(idealllee)之后的所有参数都由接下来的controller负责(例如idealllee/abc/bbc)。

user.php中要做的事情就是准备前台需要的数据,把它们 保存到$D中,然后调用$this->load_template('user.php')来渲染前台页面。这个过程中有三个user.php文件 参与,第一个是controller/user.php,第二个是languages/{语言包}/inside/user.php,这里放了许多字符 串,凡是在controller中有$this->lang()调用的都会去第二个user.php中找对应的字符串,第三个就是 themes/{主题包}/html/user.php,这个就是展示页面,其中通过$D把controller准备的数据进行渲染,生成最终的html 页面返回。

Supesite 7.5频道模板制作
Apache,IIS下Discuz x 1.5伪静态设置方法
  • 文章目录
  • 站点概览
ken

ken

记录精彩的程序人生

498 日志
9 分类
77 标签
RSS
Creative Commons
Links
  • 酷壳
0%
© 2010 — 2026 ken
由 Halo 强力驱动
鄂ICP备18013899号-1