立即注册 登录
汉山 返回首页

武大郎的个人空间 http://s541722682.onlinehome.us/?3 [收藏] [复制] [分享] [RSS]

日志

Discuz代码学习:记录回复的层次问题 --- 彼岸网,天香公主

已有 765 次阅读2014-11-14 23:39 |系统分类:技术支持 | 宽屏 请点击显示宽屏,再点击恢复窄屏 | 动漫全图 如只见部分动漫,请点击显示全图,再点击恢复窄图

Discuz代码学习:记录回复的层次问题

热度 2已有 505 次阅读2014-10-12 06:05 PM |系统分类:社交网理论与实践| 记录

Discuz的记录(俗称微博)功能相对简陋。如无法修改,无法贴图片。还有一个问题就是在界面上三层以上评论都显示成三层,将一个二层评论后的所有三层和三层以上评论都按时间次序排列。这在多人对话的情况下,会造成无法看清回复是对哪个评论的回复。



这 个问题不仅是界面的问题,还存在于记录评论数据的储存中。从下图看,最后四条的upid记的都不是上一层评论的ID,而是它们从属的二层评论的ID。我们 应该在upid里记录上一层评论的ID,即回复的那个评论的ID。这样我们才能知道哪个回复是有关哪个评论的。这是个不应该出现的问题(考虑到 Discuz是以论坛功能起家的,在那里能解决为何在这里就马虎了呢?)即使是出于在界面上的考虑(如节省地方)这么做,在数据库总应该准确记录这个信息 吧。




让我们从储存新回复的过程开始考虑。这里的目标是在upid这个column里记录该新回复针对的评论ID:

这部分很容易做到。在添加新记录评论的文件source/include/spacecp/spacecp_doing.php里在储存新评论之前有这样一段code
        if($updo['grade'] >= 3) {
            $setarr['upid'] = $updo['upid'];
        }
把它删掉后就能将上一层评论的ID记在新评论的upid里了。


接下来我们来看网页,假定那些评论都是在删掉那段后才加入的,那么它们会按第三个图的内容储存在数据库里。它们会正确显示在网页上吗?


很好,层次感出来了,而且同一个二层评论下的评论不再仅按时间次序排,如ID=18 (Reply 1.1.1.2) 排在了 ID=19(Reply 1.1.1.1.1)的后面。唯一的缺点就是有些连接线(在源码里称为记录回复树状背景)位置不对。

从源码看那个连接线是通过css来实现的。在template/default/home/space_doing_li.htm文件的开始部分有这么一行:
    <li class="ptn pbn{$value['class']}" style="$value[style]">
那段连接线就是由类value['class']决定的,它的值可以是dtls或dtll,对应着短(s)的和长(l)的两种连接线。 这两个类是在
template/default/common/module.css文件的第1673行定义的,从中可见是用了图片来实现的:

    /* .dtls -> doing_treeline_short 记录回复树状背景 by shuaishuai */
        .dtls { background:url({IMGDIR}/treeline_short.gif) no-repeat 0 2px; }
    /* .dtll -> doing_treeline_long 记录回复树状背景 by shuaishuai */
        .dtll { background:url({IMGDIR}/treeline_long.gif) no-repeat 2em 2px; }


让我们看看value['class']和value[style]是如何设置的,这在文件source/include/space/space_doing.php中:

我 们看到value['class']的这种设法其实只对$tree->getLayer($id)=1,2,3,即 value['class']=0,2,4有用,现在$tree->getLayer($id)可以大于3,所以我们必须修改最后一段。另外 value[style]加入了适当的padding,让评论按层次右移。现在层次增多,还是应该将连接线一并右移,这可以通过加入适当的margin来实现。下面做了些基本的修改:


得到的效果见下图。


由此可见在做了些简单的修改后,Discuz的记录功能就能显示树状多层评论。再多加些代码的话还可以把树做得好些,如允许在评论下张开和收拢它下面的所有评论。


Discuz!X3.1 简体中文 UTF8 版 20131122

中文版授权协议 适用于中文用户

版权所有 (c) 2001-2013,北京康盛新创科技有限责任公司保留所有权利。

感谢您选择康盛产品。希望我们的努力能为您提供一个高效快速、强大的站点解决方案,和强大的社区论坛解决方案。康盛公司网址为 http://www.comsenz.com,产品官方讨论区网址为 http://www.discuz.net。

用 户须知:本协议是您与康盛公司之间关于您使用康盛公司提供的各种软件产品及服务的法律协议。无论您是个人或组织、盈利与否、用途如何(包括以学习和研究为 目的),均需仔细阅读本协议,包括免除或者限制康盛责任的免责条款及对您的权利限制。请您审阅并接受或不接受本服务条款。如您不同意本服务条款及/或康盛 随时对其的修改,您应不使用或主动取消康盛公司提供的康盛产品。否则,您的任何对康盛产品中的相关服务的注册、登陆、下载、查看等使用行为将被视为您对本 服务条款全部的完全接受,包括接受康盛对服务条款随时所做的任何修改。

本服务条款一旦发生变更, 康盛将在网页上公布修改内容。修改后的服务条款一旦在网站管理后台上公布即有效代替原来的服务条款。您可随时登陆康盛官方论坛查阅最新版服务条款。如果您 选择接受本条款,即表示您同意接受协议各项条件的约束。如果您不同意本服务条款,则不能获得使用本服务的权利。您若有违反本条款规定,康盛公司有权随时中 止或终止您对康盛产品的使用资格并保留追究相关法律责任的权利。

在理解、同意、并遵守本协议的全部条款后,方可开始使用康盛产品。您可能与康盛公司直接签订另一书面协议,以补充或者取代本协议的全部或者任何部分。

康盛拥有本软件的全部知识产权。本软件只供许可协议,并非出售。康盛只允许您在遵守本协议各项条款的情况下复制、下载、安装、使用或者以其他方式受益于本软件的功能或者知识产权。

I. 协议许可的权利

     
  1. 您可以在完全遵守本许可协议的基础上,将本软件应用于非商业用途,而不必支付软件版权许可费用。
  2.  
  3. 您可以在协议规定的约束和限制范围内修改康盛产品源代码(如果被提供的话)或界面风格以适应您的网站要求。
  4.  
  5. 您拥有使用本软件构建的网站中全部会员资料、文章及相关信息的所有权,并独立承担与使用本软件构建的网站内容的审核、注意义务,确保其不侵犯任何人的合法权益,独立承担因使用康盛软件和服务带来的全部责任,若造成康盛公司或用户损失的,您应予以全部赔偿。
  6.  
  7. 若 您需将康盛软件或服务用户商业用途,必须另行获得康盛的书面许可,您在获得商业授权之后,您可以将本软件应用于商业用途,同时依据所购买的授权类型中确定 的技术支持期限、技术支持方式和技术支持内容,自购买时刻起,在技术支持期限内拥有通过指定的方式获得指定范围内的技术支持服务。商业授权用户享有反映和 提出意见的权力,相关意见将被作为首要考虑,但没有一定被采纳的承诺或保证。
  8.  
  9. 您可以从康盛提供的应用中心服务中下载适合您网站的应用程序,但应向应用程序开发者/所有者支付相应的费用。

II. 协议规定的约束和限制

     
  1. 未获康盛公司书面商业授权之前,不得将本软件用于商业用途(包括但不限于企业网站、经营性网站、以营利为目或实现盈利的网站)。购买商业授权请登陆http://www.discuz.com参考相关说明,也可以致电8610-51282255了解详情。
  2.  
  3. 不得对本软件或与之关联的商业授权进行出租、出售、抵押或发放子许可证。
  4.  
  5. 无 论如何,即无论用途如何、是否经过修改或美化、修改程度如何,只要使用康盛产品的整体或任何部分,未经书面许可,页面页脚处的康盛产品名称和康盛公司下属 网站(http://www.comsenz.com、或 http://www.discuz.net) 的链接都必须保留,而不能清除或修改。
  6.  
  7. 禁止在康盛产品的整体或任何部分基础上以发展任何派生版本、修改版本或第三方版本用于重新分发。
  8.  
  9. 您从应用中心下载的应用程序,未经应用程序开发者/所有者的书面许可,不得对其进行反向工程、反向汇编、反向编译等,不得擅自复制、修改、链接、转载、汇编、发表、出版、发展与之有关的衍生产品、作品等。
  10.  
  11. 如果您未能遵守本协议的条款,您的授权将被终止,所许可的权利将被收回,同时您应承担相应法律责任。

III. 有限担保和免责声明

     
  1. 本软件及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的。
  2.  
  3. 用户出于自愿而使用本软件,您必须了解使用本软件的风险,在尚未购买产品技术服务之前,我们不承诺提供任何形式的技术支持、使用担保,也不承担任何因使用本软件而产生问题的相关责任。
  4.  
  5. 康盛公司不对使用本软件构建的网站中或者论坛中的文章或信息承担责任,全部责任由您自行承担。
  6.  
  7. 康 盛公司无法全面监控由第三方上传至应用中心的应用程序,因此不保证应用程序的合法性、安全性、完整性、真实性或品质等;您从应用中心下载应用程序时,同意 自行判断并承担所有风险,而不依赖于康盛公司。但在任何情况下,康盛公司有权依法停止应用中心服务并采取相应行动,包括但不限于对于相关应用程序进行卸 载,暂停服务的全部或部分,保存有关记录,并向有关机关报告。由此对您及第三人可能造成的损失,康盛公司不承担任何直接、间接或者连带的责任。
  8.  
  9. 康 盛公司对康盛提供的软件和服务之及时性、安全性、准确性不作担保,由于不可抗力因素、康盛公司无法控制的因素(包括黑客攻击、停断电等)等造成软件使用和 服务中止或终止,而给您造成损失的,您同意放弃追究康盛公司责任的全部权利。  6.康盛公司特别提请您注意,康盛公司为了保障公司业务发展和调整的自主权,康盛公司拥有随时经或未经事先通知而修改服务内容、中止或终止部分或全部软件 使用和服务的权利,修改会公布于康盛公司网站相关页面上,一经公布视为通知。 康盛公司行使修改或中止、终止部分或全部软件使用和服务的权利而造成损失的,康盛公司不需对您或任何第三方负责。

有关康盛产品最终用户授权协议、商业授权与技术服务的详细内容,均由康盛公司独家提供。康盛公司拥有在不事先通知的情况下,修改授权协议和服务价目表的权利,修改后的协议或价目表对自改变之日起的新授权用户生效。

一旦您开始安装康盛产品,即被视为完全理解并接受本协议的各项条款,在享有上述条款授予的权利的同时,受到相关的约束和限制。协议许可范围以外的行为,将直接违反本授权协议并构成侵权,我们有权随时终止授权,责令停止损害,并保留追究相关责任的权力。

本许可协议条款的解释,效力及纠纷的解决,适用于中华人民共和国大陆法律。

若您和康盛之间发生任何纠纷或争议,首先应友好协商解决,协商不成的,您在此完全同意将纠纷或争议提交康盛所在地北京市海淀区人民法院管辖。康盛公司拥有对以上各项条款内容的解释权及修改权。

(正文完)

康盛公司


鲜花

真棒

玩闹

同情

看看

困惑

震惊

bad

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

Archiver|手机版|小黑屋|汉山网    

GMT-5, 2024-7-16 06:46 , Processed in 0.103018 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

返回顶部