Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

[经验] uch源码解读之 框架和模板分析

[复制链接]
baiyuxiong 发表于 2009-10-22 16:50:24 | 显示全部楼层 |阅读模式
UCH每个可访问的页面都包含了根目录下common.php文件。这个文件的主要作用是为后面的程序处理提供七个全局数组和一些函数。这些数组分别是:$_SGLOBAL   $_SCONFIG   $_SBLOCK   $_TPL   $_SCOOKIE   $_SN 和$space。
用户登录后,$_SGLOBAL 数组的内容类似这样:

  1. $_SGLOBAL=Array (
  2. [timestamp] => 1256193283
  3. [supe_starttime] => 1256193283.83
  4. [db] => __PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => dbstuff [querynum] => 1 [link] => 0 [charset] => utf8 )
  5. [app] => Array (
  6. [1] => Array ( [name] => 个人家园 [url] => http://localhost/uc
  7. [type] => UCHOME
  8. [open] => 0
  9. [icon] => uchome ) )
  10. [userapp] => Array ( )
  11. [ad] => Array ( )
  12. [magic] => Array ( [invisible] => 隐身草 [friendnum] => 好友增容卡 [attachsize] => 附件增容卡 [thunder] => 雷鸣之声 [updateline] => 救生圈 [downdateline] => 时空机 [color] => 彩色灯 [hot] => 热点灯 [visit] => 互访卡 [icon] => 彩虹蛋 [flicker] => 彩虹炫 [gift] => 红包卡 [superstar] => 超级明星 [viewmagiclog] => 八卦镜 [viewmagic] => 透视镜 [viewvisitor] => 偷窥镜 [call] => 点名卡 [coupon] => 代金券 [frame] => 相框 [bgimage] => 信纸 [doodle] => 涂鸦板 [anonymous] => 匿名卡 [reveal] => 照妖镜 [license] => 道具转让许可证 [detector] => 探测器 )
  13. [supe_uid] => 2
  14. [supe_username] => admin
  15. [inajax] => 0
  16. [mobile] =>
  17. [ajaxmenuid] =>
  18. [refer] =>
  19. [debug_query] => Array ( [0] => Array ( [sql] => SELECT * FROM uchome_session WHERE uid='2' [time] => 0.645 [info] => [explain] => Array ( [id] => 1 [select_type] => SIMPLE [table] => uchome_session [type] => system [possible_keys] => PRIMARY [key] => [key_len] => [ref] => [rows] => 1 [Extra] => ) ) )
  20. [session] => Array ( [uid] => 2 [username] => baiyuxiong [password] => 80ee94c0266fa98f69bfe3b3f7525ee4 [lastactivity] => 1256193084 [ip] => 127000000 [magichidden] => 0 )
  21. [username] => baiyuxiong
  22. [uhash] => 7ffeeb5fd1297e55048dacbdb575158c
  23. [my_menu] => Array ( )
  24. [my_userapp] => Array ( )
  25. [my_menu_more] => 0
  26. [appmenu] => Array ( )
  27. [appmenus] => Array ( ) )
复制代码
用户登录后,$_SCOOKIE数组的内容类似这样:
  1. $_SCOOKIE=Array (
  2. [sendmail] => 1
  3. [loginuser] => admin
  4. [auth] => dd2a01QTCBmVko9nP192QooNt6Y/l8XCURro7yfdcapaiMW+sRd4uoRNlOmPFXBtuEYnxHwh/j7CCA8eRCFB [checkpm] => 1 )
复制代码
其中auth是经过加密处理的,防止伪造cookie。
$_SCONFIG是一些配置信息。
其它页面包含了common.php后,就可以使用其中的数据,查询数据库。然后显示数据。

模板机制
其实UCH的模板机制道理很简单:php页面提供变量值。htm页面显示这些变量。具体说来是这样的:
假设a.php.
内容是这样的:
  1. <?php
  2. $a="name";
  3. include template('a');
  4. ?>
复制代码
解释:第一句定义变量,供模板显示,第二句调用模板a.htm。
a.htm的内容:
<body>
$a
</body>

这样,你访问a.php就会在页面中出现name字符。

原理分析:考虑template函数的作用,其实最终的页面是这样的:
  1. <?php
  2. $a="name";
  3. ?>
  4. <body>
  5. <?php=$a?>
  6. </body>
复制代码
明白了吧?smarty之类模板引擎,也大概就是这样的道理。
再看data\tpl_cache目录下的文件,这些文件就是htm的模板文件被解析后生成的php文件,每次调用模板,系统都会先检查这里的php缓存文件,如果有的话,就不去重新解析htm模板了,这样可以节省时间和资源浪费。所以如果更换了模板,就需要把这些缓存的php文件删除以重新生成。
回复

使用道具 举报

uch_hack 发表于 2009-10-22 16:52:48 | 显示全部楼层
说的太简单太笼统,原本懂的人不用看,不懂的人看了白看
回复

使用道具 举报

么凹 发表于 2009-11-2 14:47:16 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ゾ芯︵亂ジ 发表于 2009-11-2 15:19:05 | 显示全部楼层
谢谢楼主((em:01))
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-9-15 07:40 , Processed in 0.099509 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表