【php精品源码栏目提醒】:本文主要为网学会员提供“Thinksns二次开发指南 - 其它资料”,希望对需要Thinksns二次开发指南 - 其它资料网友有所帮助,学习一下!
ThinkSNS 1.6 二次开发指南(beta 版) 2009 年 智士软件(北京)有限公司 北京市海淀区上地十街辉煌国际 2 号楼 2301 室 010 – 59714755 序言这是 2009 年的第一次,忙碌了太久的企业项目,ThinkSNS 终于又开始啦,太多的期待和等待,我们听到很多很多声音,不管怎么样,我们回来啦!,在这沉寂的一年多时间里,我们经历过多次的波折,团队一度徘徊在解散的边缘,生存的压力也中断了产品的持续性开发。
直到 09 年的 5 月底,我们终于有了足够的人力和精力来重新启动产品。
在产品开发之前,我们也不断的在讨论,究竟该用怎样的产品去满足不同用户的需求,我们并不认同 SNS 等同于 webgame 的发展思路,在我们看来,SNS的魅力在于它改变了信息的传播方式,如何做好最基本的功能——促进用户之间的交流才是产品的核心所在,至于通过哪些组件实现交流,可以让运营者根据自己的用户特性去选择,而通过游戏的交流只是其中很小的一部分,国内的互联网应用不会永远停留在娱乐阶段,我们希望着眼于未来——围绕社会化服务的核心,深度开发能给用户带来实际效用的交互组件。
基于以上的想法,我们这一版产品的目标就是搭建一个完善的内核架构,独立的 API,将应用与核心完全分离,让每个应用都可以在后台独立配置,并提供详尽的开发文档,使得更多的开发者可以很容易的开发出新的组件,丰富 TS 的组件,满足不同用户的社交需求。
最后感谢所有关注和支持 ThinkSNS 的朋友,如果你有什么疑问或建议,请在我们社区的群组里找到相应的官方群组并提交你的疑问或建议,我们会一直留意那里提交的问题并及时更改,如果是提交 bug,请同时注明你的测试环境,方便我们发现问题所在,我们社区的网址是:http://i.thinksns.com 目录简介 5 什么是 ThinkSNS 1.6 5 编写目的 6 引用术语与缩写说明 6 预定义的全局变量说明 6整体说明 7 设计说明 7 设计目标 7构架说明 8 目录结构 8 核心结构说明 9 ThinkPHP1.6 修改说明 10应用结构说明 12 分享 13API 库 21 API 接口说明 22 用户 API 22 好友 API 24 积分 API 25 动态 API 28 通知 API 31 评论 API 34 附件 API 35 分享 API 36 站点信息 API 37公共 Widget 38 评论 widget 41 举报 widget 43 好友选择 widget 43 好友分组 widget 44 附件 widget 45 相册 widget 46模板开发教程 47应用开发说明 54 开发目录说明 54 应用的开发方式 54应用开发范例 56 开发需求和开发目标 57 创建数据表 57 创建应用目录 60 开始编程 63 增加积分消费功能 77 增加发动态功能 78 增加发通知功能 80 更新首页统计数目 82 增加应用后台 83 增加应用 93 调试 94简介什么是 ThinkSNS 1.6ThinkSNS 1.6 作为智士软件(北京)有限公司旗下最新产品,集成了众多ThinkSNS 开发者在大型项目中的经验,并将这些宝贵的经验应用于新版的产品之中,不管是对于普通站长还是对于开发者来说,这都是一款值得期待的 SNS产品。
ThinkSNS 1.6 版汲取了国内几大 SNS 社区网站的优秀体验和设计,满足了众多站长用户的大众需求。
同为一款开源产品,ThinkSNS 在商业领域的运用,也使其完全能够满足并适用于企业的需求,并为企业增值和解决方案提供了有力的支持。
相对于 ThinkSNS 1.0,最新版的 ThinkSNS 1.6 做了很大的改变,具体如下:1、完整的产品构架、完善的基础应用、开箱即用。
2、内置 API 接口、后续支持自建平台、核心和应用分离。
3、完善的后台管理、可植入独立的应用管理。
4、正在完善 IM 应用,包括独立部署的 WebIM 和基于 Air 技术的客户端应用。
同时 ThinkSNS 官方将不断的促进 ThinkSNS 的完善和新技术的应用,使用者可以在官方社区里获得最新的应用插件与系统升级信息。
ThinkSNS 官方网站http://www.thinksns.comThinkSNS 1.6 版 体验网站http://i.thinksns.com编写目的本文档是 ThinkSNS 1.6 版本的二次开发指南,供二次开发人员使用。
引用术语与缩写说明核心: ThinkSNS 1.6 的核心的指用户基本操作集成,通过接口给应用提供查询,插入核心信息的的能力。
应用: 别名组件,是基于核心的一个单独功能块,为用户提供某项特定服务。
在 ThinkSNS 1.6 里应用是通过 API 与核心进行通信,应用与应用之间的耦合度低,并且所有的应用都可以在后台设置关闭和开启。
API: APIApplication Programming Interface,应用程序编程接口是一些预先定义的函数,目的是提供给应用程序与核心进行通信的能力,而又无需访问
源码,或理解内部工作机制的细节。
注:本指南如没有特殊说明,所有的代码段都基于 ThinkPHP 1.6 环境开发的。
预定义的全局变量说明在应用/插件开发过程中,可以直接使用下面的全局变量:this-api 核心 API 调用的变量,使用例子: this-api-user_getLoggedInUser 获取当前登录的用户 IDthis-opts 调用系统配置信息this-mid 当前登陆的用户 IDthis-uid 当前被浏览的用户 IDthis-my_name 当前登陆的用户昵称this-appid 当前应用 ID 如果是 THINKSNS 核心,则 appid0整体说明设计说明1、 本文档主要对 ThinkSNS 1.6 版本的核心架构进行描述,使设计和开发人员在开发 ThinkSNS 1.6 版本的应用时遵循统一的规范;2、本文档描述了在 ThinkSNS 1.6 版本使用的常见设计机制;3、本文档充分描述了在“核心应用”中提到的可配置服务及可扩展服务,以便于在开发新的应用时使用;4、本文档还对 ThinkSNS 1.6 版本的全局配置信息(例如:ThinkSNS 1.6 版本Config)及官方提供的应用配置进行了详细说明。
设计目标独立 API 架构, 应用可配置, 二次开发的选择为了达成这些设计目标我们采用了以下设计机制:1。
独立 API 架构:所有的应用单独开发;2。
应用可配置:后台可直接关闭或开启某个应用;3。
二次开发的选择:程序尽量简洁规范化,二次开发人员可以快速地熟悉定制开发的方式和修改现有的功能;构架说明ThinkSNS 1.6 版本采用了全新的构架方式,把应用与核心单独分离,使得系统框架更加清晰明了,方便第三方开发和安装新的应用。
目录结构┎━index.
php 统一入口文件┝━admin.
php 网站后台地址文件┝━cleancache.
php 手动删除缓存文件┝━config.inc.
php 网站配置文件┝━define.inc.
php 常量定义文件┝━thumb.
php 自动缩略图文件┝━admin 后台目录┃ ┝ Common 公共文件目录┃ ┝ Conf 项目配置目录┃ ┝ Lang 语言包目录┃ ┝ Lib 应用类库目录┃ ┗ Tpl 模版文件目录┝━apps 应用目录┃ ┝ blog 日志目录┃ ┝ event 活动目录┃ ┝ mini 心情目录┃ ┝ photo 相册目录┃ ┝ share 分享目录┃ ┝ vote 投票目录┃ ┝ group 群组目录┃ ┗…更多项目目录┝━data 后台目录┃ ┝ cache 静态缓存目录┃ ┝ upload 上传文件目录┃ ┗ user 用户信息目录┝━public 网站公共目录┃ ┝ Js JS 文件目录┃ ┝ Images 图片目录┃ ┝ Languages 语文包目录┃ ┗ Theme 风格主题包目录┝━runtime 核心缓存目录┝━thinkphp TS 框架目录┝━thinksns TS 核心功能目录所有的应用目录都放在 apps/目录下,如果要开发一个新的应用也是在该目录下创建应用的目录。
核心结构说明 ThinkSNS1.6 核心结构图ThinkSNS 1.6 的核心包括两部分: 个人空间的基本功能和 API 库。
个人空间的基本功能有个人资料,隐私,邀请,好友,动态,消息,留言板,随便看看。
关于核心部分开发人员只需要了解 API 的调用方法即可,没必要花精力研究它的运作和机制,而 API 库的说明请阅读下面的 API 库栏目。
ThinkPHP1.6 修改说明为了方便开发和优化系统结构,我们对 ThinkPHP 作了以下几点修改,特别是在核心 Model 里增加了 findPage 方法,它集成了 findAll 方法和分页方法,大大方便了程序的开发,如果使用 ThinkPHP 作为应用开发框架的话,推荐使用该方法。
2009-06-011、ThinkPHP.
php 的第 28 行 目的:修改 runtime 路径2、ThinkPHP.
php 的第 51 行 目的:新增引入 TS 公共函数3、ThinkPHP.
php 的第 29 行 LibThinkTemplateThinkTemplate.class.
php 的第 710 行 目的:使success 可以指向公共 Theme 目录2009-6-101、ThinkPHP.
php 中第 102 行 目的:如果不存在 runtime 目录,则自动创建2009-6-12修改 ThinkPHP/Mode/Model.class.
php 中的 findPage 方法,更加严格的判断了传入参数。
使用方法和 findAll 类似,只传递第一个参数即可,intarray pageopt传递数字,就是每页记录数,默认是 20 条。
也可以传递数组:pageoptpagesize Page 类中的每页记录数pageoptparam Page 类中的第三个参数DShare-fieldid toUserName-findPage10输出格式如下所示,其中 count 和 totalRows 是总记录数,主要为了兼容性才需要变量,开发人员可以在两个中选用其一就可。
totalPages 是总分页数,nowPage是当前分页数,html 是输出页码,data 就是用 findAll 得到的结果。
具体请参考分享应用的输出:array6 count string2 65 totalPages float7 totalRows string2 65 nowPage int1 html string453 123456下一页 data array10 0 array16 id string3 181 toUserName string9 水上铁 1 array16 id string3 171 toUserName string6 奇鸟 ...... 9 array16 id string3 147 toUserName string9 水上铁 应用结构说明分享分享应用结构的最大特色是: 需求决定模板,模板决定变量。
分享的模板可以根据自己的需求直接在后台修改包括分享的动态模板,分享应用里的列表模板,而模板里需要什么变量就直接在数据包以数组的方式增加就可以了。
数据包里所有的变量以及相应的值与模板的变量是对应的除了WR以及分享的基本变量,以下让我们看看分享的数据是怎么结合的。
为了方便扩展分享的类型和提高程序的灵活性,分享应用保存到数据库里的信息分为两部分,一部分是分享的基本信息,主要有: 信息 字段名 备注 分享类型 ID typeId 分享人 ID toUid 分享人名字 toUserName 站内分享目标的 ID aimId 如日志的 ID 站外分享的网址 url 分享标题 title 由程序自动获取 描述 info 增加时间 cTime 增加时系统自动赋值 浏览数 viewNum 评论数 comNum 是否已删除 isDel 回收站功能,值为 1 代 表已删除,但可在后台 恢复。
权限 purview 备用 推荐人 ID fromUid 备用 推荐人姓名 fromUserName 备用另一部分就是分享的核心数据: 数据包, 字段名为 data text, 采用数组保存相关数据,然后序列化后保存入库。
数组保存的变量由相应的类型根据模板需要来决定并赋上相应的值,比如日志类型的模板如下图需要显示日志标题title,发表日志人的 IDuid和姓名name。
列表里还需要一些简介intro,日志内容content。
注:WR是当前网址,系统会自动转译。
所以组装日志的数据包如下图:在分享应用里生成列表时,根据分享的类型 IDtypeId从缓存里提出相应的模板,然后把数据包反序列化得到一个数组,再循环数组并用 str_replace 方法转译模板。
最终效果如下:分享信息的来源结构如下:URL 输入: 主要是通过用户在分享应用列表里输入网址来分享站外的音乐、视频、Flash 和网址。
用户填写完相关信息分享的网址, 通知好友, 描述后点击提交的处理过程如下图:分享别人的分享:在分享应用里查看分享时可以选择再次分享,但为了防止产生过多的垃圾信息,站内所有能分享的信息用户只可以分享一次,都不能重复分享。
分享其它应用:分享其它的应用,如日志,先用 AJAX 调用当前应用里的 add_share_check 函数先判断你是否为第一次分享,然后才弹出分享框,提交分享后也是在当前应用先组装数据包再通过 API 提交到数据库。
分享 API 接口:之所以要通过 API 方式增加分享数据,是因为每个应用都是一个独立的项目,应用与应用之间耦合度很低,因此为了方便各应用增加分享数据和保持应用的独立性,全站采用 API 方式增加分享数据,也包括分享本身的增加。
具体的 API调用说明请查看 API 库里关于分享 API 的说明。
以下是分享 API 的程序流程图。
增加数据后接下来就是列表显示,列表的方式只有四种:朋友的分享, 我的分享, 大家的分享和某人的分享,某人的分享类似我的分享,不同的是我的分享查询的不是当前登录人的 ID,某人的分享可以是任意人的 ID,当然,显示的模板也不一样。
列表里还可以点击只查看某类型的分享。
主要是判断 GET 有没有typeId 这个参数,有并且不等于 0 则只显示相应类型的分享。
否则显示全部类型的分享。
分享的内容页程序流程图如下图所示。
为了显示多样性以及一些类型的内容显示和列表显示不一样,故没有引用模板渲染数据,而是每一类应用对应一个内容模板文件。
它的命名规范是: content_类型别名。
如日志的内容模板文件是:content_blog。
增加分享类型的步骤1 在后台的应用各类应用分享分类管理增加分类 输入类型信息,包括该类型的列表模板2 在后台的高级模板管理动态模板增加动态模板 增加分享动态模板,具体请参考增加动态模板的规则3 增加分享的内容页 html 文件,文件名规定为: content_类型别名,如视频的别名是:video,则内容页为: content_video.html4 在调用分享的应用里实现通过分享的 API 插入分享的内容,具体请参考分享的 API 说明。
注:数组参数 data 里的所需要的变量由列表模板和动态模板所需要的变量决定。
更多应用说明日后完善......API 库API 接口说明ThinkSNS1.6 的 API 接口比较简单,本文只介绍常用的 API,开发人员如果有更多的需要可以直接在 ThinkFrame/Api/Model 里面看到所有的 API 接口。
用户 API1、user_getInfo(uids fields format)描述:返回指定用户的用户信息,返回形式为一个数组参数说明: 参数 属性 空? 说明 uids string 否 用户 ID,彼此之间用逗号分割。
fields string 否 指定返回用户的哪些信息。
format string 是 指定响应返回的格式。
有
PHP 默认 、 JSON 和 XML 这三种值可选。
调用 Demo: this-api-user_getInfo1 2 name email(返回:array2 0 array2 name string6 刘伟 email string13 foxlw126.com 1 array2 name string6 哈哈 email string10 ttttt.com )this-api-user_getInfo1 2 name,email json(返回:string94 name:u5218u4f1f,email:foxlw126.com,name:u54c8u54c8,email:ttttt.com)注: 目前 field 可选的字段为: id - 用户 ID name - 用户姓名。
handle - 昵称。
sex - 用户性别,返回值为 male 或 female。
birthday - 用户出生日期,返回值为 YYYY-MM-DD 格式,例如 1983-01-01。
blood_type - 用户血型。
上一篇:
Linux 5.4 RHCE Apache高级配置 学习笔记
下一篇:
加强公路工程施工技术管理工作的措施