sharetronix主要代码结构分析

2012年3月20日10:24:37 发表评论 49,966 views

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 页面返回。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: