首页 > 程序人生 > UCHome剖析之整体结构

UCHome剖析之整体结构

写在前面:有缘人(Uyuanren.com)是基于UCHome进行二次开发的,因此开发之前对UCHome进行了比较深入的学习,今天这篇文章一方面是写给有缘人的技术人员,供内部学习使用,一方面也是把自己的学习所得给大家分享一下,让研究UCHome的朋友少走一些弯路。

  • 一.整体架构

  • (1) 视图层(View): 由source + template共同生成,后面有详细介绍
    (2) 模型层(Model): 主要抽象出来的模型有:
    app.php:应用, cache.php: 缓存, domain.php:域名, friend.php:好友, mail.php:邮件,
    misc.php:其它, note.php:通知, pm.php:短消息, tag.php:标签, user.php:用户
    (3) 控制层(Control): 在视图层中,通过call_user_func, 回调控制层的接口UC_API_FUNC(uc_api_mysql()函数),该接口把请求转发给相应的模型(Model)的api,最后把结果返回给视图层

  • 二.代码结构
  • 三.动态页面生成逻辑(以space.php相关页面为例进行说明,其它的类似)
  • 1. 每一种类型的页面,都有一个允许的操作集合,space.php相关的页面的操作集叫dos,在请求页面时,通过url中的参数do来指定;其它三种页面的操作集叫acs,在请求页面时,通过url中的参数ac来指定。
    2. space.php的允许操作集如下图所示:

    3. 假设现在用户请求的页面的space.php?do=$do, 其中$do是$dos的某一个成员
    (1) 计算生成该页面所需要的动态变量的值,用来后续替换模板中的变量
    (2) 调用template(space_{$do})函数:
    如果配置了mobile, 就用api/mobile/tpl_’space_{$do}’.php来生成对应的页面;否则,就用data/tpl_cache/template_{$name}_space_{$do}.php来生成页面(这里$name为网站模板的名字,缺省为default)
    (这里需要注意的是:UCHome留出了手机(wap)的接口,但并没有提供相关的实现,因些,后续如果要开发Wap版的有缘人,可以直接从该接口扩展,而不用修改其它逻辑)
    (3) 因为UCHome本身没提供wap的实现,所以接下来会调用parse_template(template/{$name}/space_{$do})函数:
    解析模板文件template/{$name}/space_{$do}.htm,用正则表达式把该模板的动态内容替换成相应的静态内容,然后把替换后的结果写入data/tpl_cache/template_{$name}_space_{$do}.php中
    (4) 最终,展示给用户的界面就是data/tpl_cache/template_{$name}_space_{$do}.php生成的静态页面

  • 四.全局变量介绍
  • (1)$_SGLOBAL: 普通全局变量数组
    (2)$_SC: config.php中配置信息数组,config.php为安装时的配置文件
    (3)$_SCONFIG: data/data_config.php中的配置信息数组,data/data_config.php为管理员后台设置的相关信息
    (4)$_TPL: 关于模板属性的全局数组
    (5)$_SN: 下标为uid, 值为username的全局数组
    (6)$space: 个人页面相关信息(spacefield)数组,其实这个不是整个uchome的全局变量,可以通过调用getspace()函数来获取,只不过是一般的页面都会在开始处加上$space=getspace(‘uid’),把它当做一个该类型的页面中的全局变量,因此,我在这里也把它当做一个全局变量来介绍

    1. 2010年5月15日19:20 | #1

      空灵小弟 来访 支持支持~~

    2. 2010年5月15日20:30 | #2

      初次来访, 😆

    3. 2010年5月15日20:46 | #3

      uchome我搭建过一次~
      不过我没有像博主那么厉害~

    4. 2010年5月15日20:50 | #4

      @逅客 欢迎常光临哦~~

    5. 2010年5月15日20:51 | #5

      @ikeeptrying 呵呵,多交流使用心得哦~~

    6. 2010年5月16日12:34 | #6

      以后 建论坛 就找小武哥呀

    7. 2010年5月17日00:16 | #7

      我对这些东西很看不懂~只会用现成的。

    8. 2010年5月17日00:17 | #8

      话说,在FIREFOX下,我感觉怎么你的评论提交按键跑边上去了?跑最右边去了。

    9. 2010年5月17日09:13 | #9

      @老实人博客 Firefox下是有点问题,有时间改一下这个模板~~

    10. 2010年5月17日09:17 | #10

      @老实人博客 呵呵,现成的东西考虑了通用性,很难满足个性化的需求~~

    11. 2010年5月17日13:53 | #11

      火狐下严重变形。
      没那么深入的研究过UC_home。只安装过DZ

    12. 2010年5月18日16:27 | #12

      貌似有点高端!

    13. 2010年5月18日16:41 | #13

      老大 你的页面在乱了~

    14. 2010年5月18日18:10 | #14

      @疾风 firefox下是有点问题~~ 用其它的浏览器是ok的~~

    15. 2010年5月19日08:32 | #15

      我来了。

    16. 2010年5月20日10:04 | #16

      研究uc了。。换头部了。。

    17. 2010年5月20日11:42 | #17

      @老七 老七也是搞程序的么?

    18. 2010年5月20日16:55 | #18

      过来瞧瞧,虽然没用这玩意儿,但也读了。

    19. 2010年5月21日09:40 | #19

      党员在平时在公司写啥的?维护维护代码还是开发新的东西啊

    20. 2010年5月21日10:03 | #20

      @cherubine 目前还有很多新的东东要开发~~ 不过当然也要维护一些比较成熟的模块

    21. 2010年5月21日19:12 | #21

      是啊 次品程序员。。。

    22. 2010年5月21日19:15 | #22

      @老七 呵呵,老七太谦虚了~~

    1. 本文目前尚无任何 trackbacks 和 pingbacks.
    您必须在 登录 后才能发布评论.