彼岸网

 找回密码
 立即注册
搜索
热搜: 活动

tag 标签: 记录

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

分享 给微博添加收藏功能
热度 2 天香公主 2016-5-21 06:57 PM
给微博添加收藏功能
Discuz提供了一个收藏功能,类似于浏览器里的收藏夹。它可以用来收藏版块,帖子,日志,相册和文章。用户可以在相关内容的网页里看到'收藏'按钮或超链点击后来将内容加入收藏,并在快捷导航里点击'收藏'图标来进入收藏网页里看到所有加入收藏的内容(网站要在管理中心的界面->导航设置->快捷导航里将'收藏'设为可用)。网友sesemule希望能收藏微博/记录,所以写本文讨论下如何实现这个功能。所有代码都是效仿现有的其它内容收藏的相关代码。 pre, xmp { white-space: pre-wrap; display: block; border: 1px solid darkgrey; background-color: lightgrey; } 1)在记录页里给每个记录(不包括回复)加收藏链接 在文件 template/default/home/space_doing.htm 里的下面这句 {lang reply} | 后加入 {lang favorite} | 2)将用户决定收藏的记录存入数据库。 所有的收藏都存在数表 home_favorite 里,其中的表列 idtype 记载了收藏内容的类型, id记载了在该类型内的内容的primary key的值。 2a)将文件 source/include/spacecp/spacecp_favorite.php 里的下面这句 $_GET = in_array($_GET , array("thread", "forum", "group", "blog", "album", "article", "all")) ? $_GET : 'all'; 改为 $_GET = in_array($_GET , array("thread", "forum", "group", "blog", "album", "doing", "article", "all")) ? $_GET : 'all'; 2b)并在同一文件里的下面这段 fetch($id, $spaceuid); $title = $result ; $icon = ' '; break; 后加入 fetch($id); $title = ($doinginfo == $spaceuid) ? $doinginfo : ''; $icon = ' '; break; 3)显示用户收藏的记录 3a)在文件 source/language/home/lang_template.php 里加入 '记录', 3b)将文件 source/include/space/space_favorite.php 里的下面这句 'aid'); 改为 'aid'); 3c)并在同一文件里的下面这句 ' ', 后加入 ' ', 3d)再在同一文件里的下面这段 case 'albumid': $url = 'home.php?mod=space&uid='.$spaceuid.'&do=album&id='.$id; break; 后加入 case 'doid': $url = 'home.php?mod=space&uid='.$spaceuid.'&do=doing&doid='.$id; break; 3e)在文件 template/default/home/space_favorite.htm 里的下面这句 {lang favorite_album} 后加入 {lang favorite_doing} 3f)并在同一文件里的下面这句 {lang favorite_album} 后加入 {lang favorite_doing} 5/27/2016补充:答网友问如何象论坛主题贴那样在日志,相册和记录收藏按钮/链接处显示收藏次数。 1)在显示相关网页时在脚本文件里要从数据库里找出收藏次数 1a)日志: 在文件 source/include/space/space_blog.php 里的下面这段 if(!empty($_G ) && empty($_G )) { helper_antitheft::check($id, 'bid'); } 后加上 count_by_id_idtype($id, 'blogid'); 1b)相册: 在文件 source/include/space/space_album.php 里的下面这段 delete($id); showmessage('to_view_the_photo_does_not_exist', "home.php?mod=space&uid=$album &do=album&view=me"); } 后加上 count_by_id_idtype($id, 'albumid'); 1c)记录: 在文件 source/include/space/space_doing.php 里的下面这段 fetch_all_search($start, $perpage, 1, $uids, '', $searchkey, '', '' ,'', 1, $doid, $f_index); foreach($query as $value) { if($value == 0 || $value == $_G || $_G == 1) { $doids ; 后加上 count_by_id_idtype($value , 'doid'); 2)在显示网页的模板文件里加上显示收藏次数的地方 2a)日志: 将文件 template/default/home/space_blog_view.htm 里的下面这行 {lang favorite} 改为 {lang favorite} $fav_count 2b)相册: 将文件 template/default/home/space_album_view.htm 里的下面这行 {lang favorite} 改为 {lang favorite} $fav_count 2c)记录: 将文件 template/default/home/space_doing.htm 里的下面这行 {lang favorite} | 改为 {lang favorite} $dv | 3)在用户确认要收藏后要实时更新收藏次数 3a)将文件 template/default/home/spacecp_favorite.htm 里的下面这行 改为 3b) 在文件 static/js/home.js 里添加下面的函数: function favoriteupdate(id) { var obj = $('favoritenumber'); if (!obj) obj = $('favoritenumber_' + id); if (obj) { obj.style.display = ''; obj.innerHTML = parseInt(obj.innerHTML) + 1; } } 注:本文中的代码里的<符号后和a相连时加了一个不应该有的空格,以避免Discuz在保存日志时自动改变日志内容。
个人分类: Discuz|2030 次阅读|19 个评论
分享 自动显示围棋棋盘与棋谱记录
笔记本 2016-3-12 05:51 AM
网站新功能:自动显示围棋棋盘与棋谱记录。 功能作用范围:微博、博客、论坛、私信。 方法:点击上载文件按钮,上传 SGF 文件,或者张贴 SGF 文件链接(必须是珍珠湾的链接)。 示范 http://www.zhenzhubay.com/zzw/upload/up/1/57e0197.sgf 文章来源: http://www.zhenzhubay.com/home.php?mod=space&uid=1&do=blog&id=32044
个人分类: 网站信息|0 个评论
分享 Discuz插件发布纪要
热度 2 天香公主 2016-1-27 09:41 PM
Discuz插件发布纪要
近来对我以前写的日志搬家插件( 链接 )做了些改进,诸如允许管理员来帮用户搬家,保存原来博文的发布时间等,准备等成熟时放到Discuz官网的应用中心去。本文记录下在这过程中遇到的一些问题和解决方法。 在开发插件时,与插件有关的文件都在两个文件夹里。几乎所有与该插件相关的文件都在source/plugin下一个以该插件命名的子文件夹里,但语言包文件得放在data/plugindata下: td, th { vertical-align: top; } 而当安装该插件到使用它的网站上去时,所有与该插件相关的文件都放在了前述第一个文件夹里。这些文件包括了在开发时在这个文件夹里的所有文件,以及一个xml格式的设置文件。Discuz在开发状态下提供了产生一个设置文件的方法(称为导出),它包含了原来语言包里的所有内容,以及一些其它可设置的项目。 xmp { white-space: pre-wrap; display: block; border: 1px solid darkgrey; background-color: lightgrey; } 1。支持多个版本 从在开发状态下的Discuz网站上导出的xml设置文件,可以拷贝到安装插件的网站上直接使用如果两个网站使用的同样版本的Discuz软件。但要使得尽可能多的网站使用该插件,则需要对导出的文件做些修改。比如在3.1版的网站上安装用3.2版导出的文件时,就会看到下面的警告: 其原因是导出文件有下面这行 (假如开发网站所使用的Discuz的版本是3.2): 如果该插件经测试后确定可以用于3.1的网站的话,我们可以把这行改为 这样在安装时就不会出现上述警告了。 2。如何修改设置文件 那么如何来修改设置文件呢?这里讨论下用UTF-8版的情形。这个XML设置文件的特点是它是用没有标签(BOM)的UTF-8编码格式储存的,而它的表头上这写着编码用iso-8859-1编码: ... 所以 Notepad 不是一个合适的编辑工具,因为它在保存时会自动添加BOM(参见 链接 )。一种工具是 Visual Studio, 如果我们直接在Visual Studio里把设置文件打开的话会看到文件里的汉字都是乱码, 因为Visual Studio按XML表头的编码(iso-8859-1)来解码了。我们可以在这里修改文件和保存。但是如果要修改汉字的话,要按下述的方式来打开文件:在菜单上选择 Open-File, 在文件选择框里单击来选定要打开的设置文件,再点击Open With-XML(Text) Editor with Encoding- Choose "Unicode (UTF-8 without signature) - Codepage 65001) as Encoding: 另一种可用的工具是Notepad++。和上面解释过的同样原因,当文件打开时其中的汉字是乱码,要在菜单上选择Encoding-Encode in UTF-8后才能看到汉字。 在视窗系统下带BOM的设置文件也可正常使用,但在Linux下则会显示乱码。这就是为什么有时我在Notepad下修改了设置文件并测试后拷贝到Linux服务器上就出现乱码的原因。 3。允许管理员设置插件 有些使用插件的方式是需要安装插件的网站决定的。以我的日志搬家插件为例,有的网站也许会允许用户自行搬家,也有的网站也许希望由管理员来控制。所以我们要让使用该插件的网站来决定这些设置。在插件设计时,我们可以加入变量。在日志搬家插件里我加了两个按钮: 在使用该插件的网站上安装后就可以看到设置的地方: 那么如何来设置这些变量的缺省(default)值呢?在变量设计界面上并没有让你设缺省值的地方。事实上它用了设计网站上的设置处定的变量值作为了安装时变量的缺省值,这应该算是个自然的选择。如果要修改缺省值的话,可以改设计网站的设置,也可以改xml设置文件,这些变量也成了设置文件里的一部分(注意在下面的内容里第一个变量的缺省值是1,而第二个变量的缺省值是0): 那么插件是如何检查和利用这些变量的呢?下面是在脚本文件里使用的例子: $allowUserToImport = $_G ; if (!$allowUserToImport && $_G !=1) { showmessage(lang('plugin/txgz_blog_importer', 'import_deny')); } 4。支持多种语言和字符编码 Discuz软件应不同网站的需求提供了简体GBK, 简体UTF-8, 繁体BIG5, 和繁体UTF-8四种形式的软件。如何让我们的插件可以安装在使用所有这些形式的网站上呢?我们可以在供下载的文件夹里放这四种形式的xml文件,然后安装网站会根据这些文件的文件名来决定哪个是适用于该网站的xml设置文件: 如何来产生这四个xml文件呢?由于我是在简体UTF-8环境下开发的,汉字用在线软件( 链接 )来产生后加入了语言包(注意在保存语言包文件时应选择File-Advanced Save Options-Encoding: Unicode (UTF-8 without signature) - Codepage 65001,不然文件里的汉字保存后会变成问号),进而经导出产生了 discuz_plugin_txgz_blog_importer.xml,将导出文件做必要修改后可以改名为 discuz_plugin_txgz_blog_importer_SC_UTF8.xml。从简体UTF-8转繁体UTF-8可以用在线软件( 链接 ),由简体UTF-8转简体GBK,和由繁体UTF-8转繁体BIG5可以在Notepad+直接产生。比如在其中新加一个文件,在菜单上选择 Encoding-Character sets-Chinese-GB2312 (Simplified) 后,把简体UTF-8的内容拷贝上去,保存后就得到了简体GBK。 插件内的其它文件如PHP脚本文件,模板文件,JS脚本文件和风格文件都必须以ANSI编码储存才能同时被所有四种语言和字符编码系统使用。这也意味着插件中的JS脚本文件和风格文件不应含有任何汉字 (虽然Discuz软件里的个别JS脚本文件和风格文件含有汉字,但Discuz对每个系统提供了适合该系统的这些文件。现在我们要一套文件(除xml设置文件)适合所有系统,使用要求更为严格)。 如果是要将插件放到Discuz的应用中心上去,我们也可以不提供四个xml设置文件。而只提供一个名为discuz_plugin_txgz_blog_importer.xml的供简体GBK使用的xml文件,应用中心会自动产生这四个xml文件。 插件下载: http://www.bian-wang.com/upload/txgz_blog_importer_160406.zip 4/16/2016 补充:看到Discuz网站上的一个讨论( 链接 )给出了一个在插件中的javascript文件里使用语言包汉字的很好的解决方法:在html文件里调用语言包里的汉字来定义javascript变量值,而在javascript文件里调用这些变量。
个人分类: Discuz|2924 次阅读|5 个评论
分享 杨文彬对EMAIL传票动议的条件反射
笔记本 2015-10-10 01:51 AM
杨文彬对EMAIL传票动议的条件反射
2015年8月6日凌晨,我通过电子邮件给杨文彬发去了要求确认EMAIL传票有效的动议。这个电子邮件的送达记录参见文末附件 (我在8月12日向法院递交了8月6日的动议送达证明)。 8月6日凌晨,紧接着,我向法院递交了这份动议。动议中说到,证据表明,被告在7月8日看到了电子传票(这一点 杨文彬后来承认了 ---虽然他徒劳地试图改口)。 2015年8月6日下午,我收到法院的通知,说我的动议已经递交。紧接着,我发表了《 网教:动议EMAIL传票有效 》。请注意这篇网教文发布时间是北京时间7号凌晨5点,正是加州6号的下午。 2015年8月8日(GMT),我收到杨文彬6页的传真,说要 QUASH SERVICE OF SUMMONS。 显然,这是杨文彬对我的要求EMAIL SERVICE 有效动议的条件反射。 这一点光从杨文彬动议标题就知道了 。 之前,我根本 没有递交 proof of service of summons,而是向法院报告传统传票送达 均不成功 。 杨文彬这个QUASH 只能是对这个要求电子传票生效的动议的反应。 2015年8月10日,杨文彬给我发来了修改后的QUASH 动议的8页传真,这才是他最后递交给法院的版本。 杨文彬这个动议当然其实也是个此地无银三百两的东东。   杨文彬的QUASH动议是在8月10号递交上去的,当然是在他看到EMAIL传票动议之后,但这个动议绝口不提EMAIL的事情。这说明什么 ? 希望大家开动脑筋。 我的EMAIL 的动议比杨的QUASH动议早4天递交上去,但法院先处理了杨的QUASH动议,指令按 415.40 条例送达传票。我立刻遵照这个指令重新发出了传票。 对于法律程序来说,这是最高效、最保守的做法。 现在结果当然是很清楚了。EMAIL传票动议迫使杨文彬现身加州法院,而目前传票已经依据现有加州法律 CCP 415.40 成功送达。 附件1: 8月6日给杨的邮件 附件2:8月8日(GMT)杨的传真 文章来源: http://www.zhenzhubay.com/home.php?mod=space&uid=2&do=blog&id=30884
个人分类: 法律|0 个评论
分享 岳东晓起诉iman庭审记录
热度 8 TING 2015-6-8 07:14 PM
地点:加州BC法院 原告:岳讼棍,乳名傻岳,曾用名岳东西,岳菊花,岳东晓。 被告:iman 美利坚第一乏驴孤瘟岳东晓起诉iMAN诽谤案正式开庭,庭审记录: 法官:原告姓字名谁? 岳东晓:瘩颗忑岳东晓。 法官:你姓瘩颗忑? 岳东晓:我是屁爱娶地,你必须尊重我。 法官:不跟弱智计较。大壳头岳,你告谁?何罪? 岳东晓:iman诽谤我。 法官:iman在吗? iman:在。 法官:你诽谤大壳头岳了吗? iman:没有 法官:大壳头岳,他如何诽谤你的? 岳东晓:他骂我白痴弱智,白痴讼棍,白痴笑料,无赖白痴,弱智无赖,丧心病狂,造谣污蔑,神经病人。 法官:iman,你说过吗? iman:说过 岳东晓:法官我有证据 法官:他都承认,你的证据无用 岳东晓:我废寝忘食收集的,你竟说没用。你这法官水平不够。抗议! 法官:抗议无效。iman,你既然承认,他告你诽谤,你认罪吗? iman:不认。我没有诽谤,偶说的是事实。 法官:说来听听。 iman : 这是我的书面证明,以备案。《白痴笑料岳东晓》。 法官:我没时间看。你一条条解释,你说大壳头岳白痴弱智,可有证据? iman:有!他是物理屁爱娶地,几次跟我辩论初中物理,被我批的体无完肤,年过半百了,连楼梯都不懂怎么上了,是为弱智。年老忘了如何上楼梯我老人家可怜他也罢,他走路也不会走了,说走路必须是双脚着地,是为白痴。 法官:你说大壳头岳白痴讼棍,可有证据? iman:有!他稍有不满,便威胁起诉网民,此为讼棍。几次威胁起诉本人,却只见雷声不见雨点。连起诉的基本事实都不懂,是为白痴。所以我说他,“白痴岳讼棍,假的就是假的,伪装的就会被剥去,白痴妄人就会被嘲笑,白痴讼棍就会被打击!” 法官:你说大壳头岳白痴笑料,可有证据? iman:我不记得。 岳东晓:他说”三年前他是粉丝眼中的牛人学者,现在成了iMan刀下的白痴笑料。天翻地覆慨而慷啊!天若有情天亦老,人间正道是沧桑“ 法官:iman,你说这话有根据吗?”现在成了iMan刀下的白痴笑料“不用你证明了,“三年前他是粉丝眼中的牛人学者”,你需找出证据,否则这条诽谤可能成活。 法官:你说大壳头岳无赖白痴,可有证据? iman:在反驳岳书橱在游泳池散热问题上自作聪明胡说八道的过程中,我在论坛讨论中贴了一个设备在大气中散热的经验公式。并说,这是全世界工程师天天在用的计算设备热量流失的gold standard。他视而不见,他说,iMan这是抄袭!这是不诚实,这是人品有问题。因为iMan没有注明出处。真乃神经病人思路宽,无赖白痴道德高。 法官: iman,你为何每句里面都有白痴? iman:法官大人,他太白痴,每次跟我辩论都白痴,我有什么办法。我已经足够节约。 岳东晓:法官,我有医院证明不是白痴。 法官:你去医院开证明了? 岳东晓:开了。证明在此,医院诊断说的清楚,“岳东晓无任何白痴症状”。 法官:很好,拿来,这是确凿证据。 法官:后面还有一句嘛,此东西不具人的基本特征,无法诊断。 岳东晓:那不重要,我不是白痴,他就是诽谤,法律条文在此。 法官:有一定道理。iman,你说大壳头岳弱智无赖,可有证据? iman:我不记得。 岳东晓:他说,”他把这些所谓铁证制备成一览表,辩论不过人时,就把这些弱智无赖的可笑诬陷当历史旧账贴出来当炮弹。一年要重复几十次这种丧心病狂的举动。我确实没有行医执照,也知道无证行医违法,但面对这么明显的症状,我必须说:这人病得不轻!信不信由你。“ 法官:大壳头岳,你制备成一览表了吗? 岳东晓:制了。 法官:这是事实嘛。下一个,iman,你说大壳头岳丧心病狂,可有证据? iman:我也不记得。 岳东晓:在刚才的引证里面。 法官:大壳头岳,你一年张贴多少遍? 岳东晓:大致就十几次。 法官:这属轻度丧心病狂。 法官:iman,你说大壳头岳神经病人,可有证据? iman:他经常在真猪湾自作聪明胡说八道攻击别人,是神经病人特征,建议请医生诊断。 法官:大壳头岳,你有医院证明吗? 岳东晓:没有。 法官:辩论取证结束。休庭。半小时后宣判结果。 (半小时后) 法官:经讨论,宣判如下:该案事实清楚,大壳头岳经诊断不具备人的基本特征,本庭无管辖权。建议大壳头选择对口法院申诉,钦此。
4520 次阅读|19 个评论
分享 Discuz功能改进:添加修改记录和回复功能
热度 1 天香公主 2014-11-2 03:32 PM
Discuz功能改进:添加修改记录和回复功能
添加修改记录和回复功能 在2011年12月前在美中网注册的网友都知道,那时日志(俗称博客)里的评论是没法修改的(也没法删除)。后来美中网Discuz! 版本升级到2.5版后才有了修改评论的功能。但时至今日,现在最新的3.2版还是没有提供记录(俗称微博)及其回复的修改功能(只能删除)。这里我们探讨一下如何把这个功能加上去。 让我们先来看看记录页的结构,特别是有关添加回复功能的实现,因为修改评论和回复的功能可以借鉴这种方式。 下面是一个记录网页的例子: 这个界面上的内容是由文件夹template/default/home/里面的多个文件提供的。其中最外面的部分是由space_doing.htm提供的,添加新记录框是由space_doing_form.htm提供的,而每个评论的回复部分是由space_doing_li.htm提供的。上个截图里的下半部分内容(关于一个记录及其回复)大致是由下面的代码产生的: 第一个红方块里引用了space_doing_li.htm来产生对一个记录的所有回复的内容。注意在它的上方有个span,这是个place holder。当用户点击第二个红方块里的回复链后,执行的javascript函数docomment_form会给服务器发个ajax请求来得到spacecp_doing.htm里的内容放入上述的span里,这就是下面的回复框出现的原因: 和这个回复框对应的代码是: 当用户填写了回复的内容后,点击回复链时,回复的内容就发给了source/include/spacecp/文件夹里的文件spacecp_doing.php来处理,比如将新回复添加到数据库里。注意回复框里有个隐藏的参数commentsubmit被赋值true。这使得提供了添加和删除评论及回复等多项功能的spacecp_doing.php知道对当前的请求应该做何种处理。下面是实现这个功能的部分代码: 从中可以看到那里的代码用了source/class/table文件夹里的table_home_docomment类提供的数据处理功能将用户提交的新回复加到了数据库里。 总结一下,大致而言记录功能是通过下图里这些PHP文件和HTML文件来实现的: 实现这个功能的基本步骤: 有关修改回复: 1。加入修改回复的链接:space_doing_li.htm 2。修改链接调用的home.js里函数docomment_form,加上一个参数flavor用来区分新回复add和修改回复edit。注意修改home.js后,要更新缓存 3。修改储存回复的代码,需要区分新回复和修改回复:spacecp_doing.php 4。记录页有个现象:当添加了一个记录的回复后,那个回复仍然显示着。而回复一个回复后,那个回复框则消失了。不知第一种情况是不是有意为之。为了保存这个现象:修改home.js里的docomment_get 5。在修改回复时将原来的回复显示在textbox里:spacecp_doing.htm,spacecp_doing.php 6。在修改回复时不将原来的回复显示在textbox外:space_doing_li.htm,home.js 有关修改记录: 7。加入修改记录的链接:space_doing.htm 8。修改填写记录的框:space_doing_form.htm 9。修改储存记录的代码,需要区分新记录和修改记录:spacecp_doing.php 实现这个功能所需要添加和修改的代码: pre, xmp { white-space: pre-wrap; background-color: lightgrey; border: 1px solid darkgrey; } 1. template/default/home/space_doing.htm 修改的部分: 添加了记录编辑链 在点击回复链和编辑链时虽然都调用了函数docomment_form,但给予最后一个参数flavor不同的值来区分两者 给记录的内容加了个ID,这样可以在编辑状态下隐藏它 {lang reply} | {lang edit} | {lang delete} IP: $dv 2. template/default/home/space_doing_li.htm 修改的部分: 添加了回复编辑链 在点击回复链和编辑链时虽然都调用了函数docomment_form,但给予最后一个参数flavor不同的值来区分两者 给记录的内容加了个ID,这样可以在编辑状态下隐藏它 $value : $value ( ) {lang reply} {lang edit} {lang delete} IP: $value 3. template/default/home/space_doing_form.htm: 在修改框出现时显示原来的记录内容 添加了保存记录按钮和取消链 在修改框出现时计算了还可输入的字符数 var msgstr = '$defaultstr'; function handlePrompt(messageid, type) { var msgObj = $(messageid); var msgmenu = $(messageid+'_menu'); if(type) { if(msgObj.value == msgstr) { msgObj.value = ''; msgObj.className = 'xg2'; } if (msgmenu) { if (msgmenu.style.display == 'block') { showFace(messageid, messageid, msgstr); } } if(BROWSER.firefox || BROWSER.chrome) { showFace(messageid, messageid, msgstr); } } else { if(msgObj.value == ''){ msgObj.value = msgstr; msgObj.className = 'xg1'; } } } $defaultstr {lang publish} $value {lang save} {lang cancel} {lang doing_maxlimit_char_prefix} 200 {lang doing_maxlimit_char_suffix} {lang doing_update_personal_signature} if($doid) strLenCalc($('message_{$doid}'), 'maxlimit_{$doid}'); 4. template/default/home/spacecp_doing.htm 修改的部分: 在修改框出现时显示原来的回复内容 添加了保存记录按钮和取消链 {$value } {lang reply} {lang save} {lang cancel} {lang spacecp_doing_message1} 200 {lang spacecp_doing_message2} function succeedhandle_$_GET (url, msg, values) { docomment_get(values , '$_GET '); } 5. source/include/spacecp/spacecp_doing.php 修改的部分: 这是在submitcheck('addsubmit')条件下的一段,只有前三行是新加的,用来区分和处理储存修改的记录: if($doid) { C::t('home_doing')-update( $doid, array('message' = $message)); } else { if(censormod($message) || $_G ) { $doing_status = 1; } else { $doing_status = 0; } $setarr = array( 'uid' = $_G , 'username' = $_G , 'dateline' = $_G , 'message' = $message, 'ip' = $_G , 'port' = $_G , 'status' = $doing_status, ); $newdoid = C::t('home_doing')-insert($setarr, 1); $setarr = array('recentnote'=$message, 'spacenote'=$message); $credit = $experience = 0; $extrasql = array('doings' = 1); updatecreditbyaction('doing', 0, $extrasql); C::t('common_member_field_home')-update($_G , $setarr); if($_POST $_G ) { if($_G 200) { $signhtml = getstr($_POST , $_G , 0, 0, 1); $signhtml = preg_replace("/\ /i", ' ', $signhtml); } else { $signhtml = $message; } C::t('common_member_field_forum')-update($_G , array('sightml'=$signhtml)); } 这是在submitcheck('commentsubmit')条件下的一段,只有前三行是新加的,用来区分和处理储存修改的回复: if ($_POST =='edit') { C::t('home_docomment')-update( $updo , array('message' = $message)); } else if ($_POST =='add') { $setarr = array( 'doid' = $updo , 'upid' = $updo , 'uid' = $_G , 'username' = $_G , 'dateline' = $_G , 'message' = $message, 'ip' = $_G , 'grade' = $updo +1 ); if($updo = 3) { $setarr = $updo ; } $newid = C::t('home_docomment')-insert($setarr, true); C::t('home_doing')-update_replynum_by_doid(1, $updo ); if($updo != $_G ) { notification_add($updo , 'comment', 'doing_reply', array( 'url'="home.php?mod=spaceuid=$updo do=doingview=medoid=$updo highlight=$newid", 'from_id'=$updo , 'from_idtype'='doid')); updatecreditbyaction('comment', 0, array(), 'doing'.$updo ); } } 这段是为了在修改框里显示原来的记录或回复: 注意用户在编辑框里加入的表情是代码,但在储存到数据库前转化成了代码,所以要重新转化成代码显示在编辑框里。 } else if ($_GET == 'docomment') { if ($_GET =='edit') { if($id==0) { $value = C::t('home_doing')-fetch($doid); } else { $value = C::t('home_docomment')-fetch($id); } require_once DISCUZ_ROOT.'./source/class/class_bbcode.php'; $bb = bbcode::instance(); $value = $bb-html2bbcode($value ); $defaultstr = getdefaultdoing(); } } 6. static/js/home.js 修改的部分: 添加了个新参数flavor来区分编辑(edit)和回复(add): function docomment_get(doid, key) { var showid = key + '_' + doid; var opid = key + '_do_a_op_'+doid; $(showid).style.display = ''; $(showid).className = 'cmt brm'; ajaxget('home.php?mod=spacecpac=doingop=getcommenthandlekey=msg_'+doid+'doid='+doid+'key='+key+'flavor=add', showid); if($(opid)) { $(opid).innerHTML = '收起'; $(opid).onclick = function() { docomment_colse(doid, key); } } showCreditPrompt(); } 在编辑状态下隐藏原来的内容: function docomment_form(doid, id, key, flavor) { var showid = key + '_form_'+doid+'_'+id; var divid = key +'_'+ doid; var url = 'home.php?mod=spacecpac=doingop=docommenthandlekey=msg_' + id + 'doid=' + doid + 'id=' + id + 'key=' + key + 'flavor=' + flavor; var messageid = key + '_doing_message_' + doid + '_' + id; $(messageid).style.display = ''; if (flavor == 'edit') $(messageid).style.display = 'none'; if(parseInt(discuz_uid)) { ajaxget(url, showid); if($(divid)) { $(divid).style.display = ''; } } else { showWindow(divid, url); } } function docomment_form_close(doid, id, key, flavor) { var showid = key + '_form_' + doid + '_' + id; var opid = key + '_do_a_op_' + doid; var messageid = key + '_doing_message_' + doid + '_' + id; $(showid).innerHTML = ''; $(showid).style.display = 'none'; if(flavor=='edit') $(messageid).style.display = ''; var liObj = $(key+'_'+doid).getElementsByTagName('li'); if(!liObj.length) { $(key+'_'+doid).style.display = 'none'; if($(opid)) { $(opid).innerHTML = '回复'; $(opid).onclick = function () { docomment_get(doid, key); } } } } 7. source/language/home/lang_template.php 修改的部分: 添加了两个要用到的字符串: 'doing_maxlimit_char_prefix' = '还可输入', 'doing_maxlimit_char_suffix' = '个字符', 最后是两张效果图: 1)修改记录 2)修改回复 注:本文中的代码里的个别<符号后含有一个不应该有的空格,以避免Discuz在保存日志时自动改变日志内容。 prettyPrint()
个人分类: Discuz|3922 次阅读|2 个评论
分享 Discuz功能改进:记录回复的层次问题
热度 3 天香公主 2014-10-12 06:05 PM
Discuz功能改进:记录回复的层次问题
Discuz的记录(俗称微博)功能相对简陋。如无法修改,无法贴图片。还有一个问题就是在界面上三层以上评论都显示成三层,将一个二层评论后的所有三层和三层以上评论都按时间次序排列。这在多人对话的情况下,会造成无法看清回复是对哪个评论的回复。 这个问题不仅是界面的问题,还存在于记录评论数据的储存中。从下图看,最后四条的upid记的都不是上一层评论的ID,而是它们从属的二层评论的ID。我们 应该在upid里记录上一层评论的ID,即回复的那个评论的ID。这样我们才能知道哪个回复是有关哪个评论的。这是个不应该出现的问题(考虑到Discuz是以论坛功能起家的,在那里能解决为何在这里就马虎了呢?)即使是出于在界面上的考虑(如节省地方)这么做,在数据库总应该准确记录这个信息吧。 让我们从储存新回复的过程开始考虑。这里的目标是在upid这个column里记录该新回复针对的评论ID: 这部分很容易做到。在添加新记录评论的文件source/include/spacecp/spacecp_doing.php里在储存新评论之前有这样一段code xmp { white-space: pre-wrap; display: block; } = 3) { $setarr = $updo ; } 把它删掉后就能将上一层评论的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文件的开始部分有这么一行: 那段连接线就是由类value 决定的,它的值可以是dtls或dtll,对应着短(s)的和长(l)的两种连接线。 这两个类是在 template/default/common/module.css文件里定义的,从中可见是用了图片来实现的: doing_treeline_long 记录回复树状背景 by shuaishuai */ .dtll { background:url({IMGDIR}/treeline_long.gif) no-repeat 2em 2px; } 让我们看看value 和value 是如何设置的,这在文件source/include/space/space_doing.php中: 0){ if($one %3 == 2) { $one = ' dtls'; } else { $one = ' dtll'; } } 我们看到value 的这种设法其实只对$tree-getLayer($id)=1,2,3,即 value =0,2,4有用,现在$tree-getLayer($id)可以大于3,所以我们必须修改最后一段。另外 value 加入了适当的padding,让评论按层次右移。现在层次增多,还是应该将连接线一并右移,这可以通过加入适当的margin来实现。下面做了些基本的修改: 0){ $one = ' dtll'; } 得到的效果见下图。 由此可见在做了些简单的修改后,Discuz的记录功能就能显示树状多层评论。再多加些代码的话还可以把树做得好些,如允许在评论下张开和收拢它下面的所有评论。 Discuz!X3.1 简体中文 UTF8 版 20131122 中文版授权协议 适用于中文用户 版权所有 (c) 2001-2013,北京康盛新创科技有限责任公司保留所有权利。 感谢您选择康盛产品。希望我们的努力能为您提供一个高效快速、强大的站点解决方案,和强大的社区论坛解决方案。康盛公司网址为 http://www.comsenz.com,产品官方讨论区网址为 http://www.discuz.net。 用户须知:本协议是您与康盛公司之间关于您使用康盛公司提供的各种软件产品及服务的法律协议。无论您是个人或组织、盈利与否、用途如何(包括以学习和研究为目的),均需仔细阅读本协议,包括免除或者限制康盛责任的免责条款及对您的权利限制。请您审阅并接受或不接受本服务条款。如您不同意本服务条款及/或康盛随时对其的修改,您应不使用或主动取消康盛公司提供的康盛产品。否则,您的任何对康盛产品中的相关服务的注册、登陆、下载、查看等使用行为将被视为您对本服务条款全部的完全接受,包括接受康盛对服务条款随时所做的任何修改。 本服务条款一旦发生变更, 康盛将在网页上公布修改内容。修改后的服务条款一旦在网站管理后台上公布即有效代替原来的服务条款。您可随时登陆康盛官方论坛查阅最新版服务条款。如果您选择接受本条款,即表示您同意接受协议各项条件的约束。如果您不同意本服务条款,则不能获得使用本服务的权利。您若有违反本条款规定,康盛公司有权随时中止或终止您对康盛产品的使用资格并保留追究相关法律责任的权利。 在理解、同意、并遵守本协议的全部条款后,方可开始使用康盛产品。您可能与康盛公司直接签订另一书面协议,以补充或者取代本协议的全部或者任何部分。 康盛拥有本软件的全部知识产权。本软件只供许可协议,并非出售。康盛只允许您在遵守本协议各项条款的情况下复制、下载、安装、使用或者以其他方式受益于本软件的功能或者知识产权。 I. 协议许可的权利 您可以在完全遵守本许可协议的基础上,将本软件应用于非商业用途,而不必支付软件版权许可费用。 您可以在协议规定的约束和限制范围内修改康盛产品源代码(如果被提供的话)或界面风格以适应您的网站要求。 您拥有使用本软件构建的网站中全部会员资料、文章及相关信息的所有权,并独立承担与使用本软件构建的网站内容的审核、注意义务,确保其不侵犯任何人的合法权益,独立承担因使用康盛软件和服务带来的全部责任,若造成康盛公司或用户损失的,您应予以全部赔偿。 若您需将康盛软件或服务用户商业用途,必须另行获得康盛的书面许可,您在获得商业授权之后,您可以将本软件应用于商业用途,同时依据所购买的授权类型中确定的技术支持期限、技术支持方式和技术支持内容,自购买时刻起,在技术支持期限内拥有通过指定的方式获得指定范围内的技术支持服务。商业授权用户享有反映和提出意见的权力,相关意见将被作为首要考虑,但没有一定被采纳的承诺或保证。 您可以从康盛提供的应用中心服务中下载适合您网站的应用程序,但应向应用程序开发者/所有者支付相应的费用。 II. 协议规定的约束和限制 未获康盛公司书面商业授权之前,不得将本软件用于商业用途(包括但不限于企业网站、经营性网站、以营利为目或实现盈利的网站)。购买商业授权请登陆http://www.discuz.com参考相关说明,也可以致电8610-51282255了解详情。 不得对本软件或与之关联的商业授权进行出租、出售、抵押或发放子许可证。 无论如何,即无论用途如何、是否经过修改或美化、修改程度如何,只要使用康盛产品的整体或任何部分,未经书面许可,页面页脚处的康盛产品名称和康盛公司下属网站(http://www.comsenz.com、或 http://www.discuz.net) 的链接都必须保留,而不能清除或修改。 禁止在康盛产品的整体或任何部分基础上以发展任何派生版本、修改版本或第三方版本用于重新分发。 您从应用中心下载的应用程序,未经应用程序开发者/所有者的书面许可,不得对其进行反向工程、反向汇编、反向编译等,不得擅自复制、修改、链接、转载、汇编、发表、出版、发展与之有关的衍生产品、作品等。 如果您未能遵守本协议的条款,您的授权将被终止,所许可的权利将被收回,同时您应承担相应法律责任。 III. 有限担保和免责声明 本软件及所附带的文件是作为不提供任何明确的或隐含的赔偿或担保的形式提供的。 用户出于自愿而使用本软件,您必须了解使用本软件的风险,在尚未购买产品技术服务之前,我们不承诺提供任何形式的技术支持、使用担保,也不承担任何因使用本软件而产生问题的相关责任。 康盛公司不对使用本软件构建的网站中或者论坛中的文章或信息承担责任,全部责任由您自行承担。 康盛公司无法全面监控由第三方上传至应用中心的应用程序,因此不保证应用程序的合法性、安全性、完整性、真实性或品质等;您从应用中心下载应用程序时,同意自行判断并承担所有风险,而不依赖于康盛公司。但在任何情况下,康盛公司有权依法停止应用中心服务并采取相应行动,包括但不限于对于相关应用程序进行卸载,暂停服务的全部或部分,保存有关记录,并向有关机关报告。由此对您及第三人可能造成的损失,康盛公司不承担任何直接、间接或者连带的责任。 康盛公司对康盛提供的软件和服务之及时性、安全性、准确性不作担保,由于不可抗力因素、康盛公司无法控制的因素(包括黑客攻击、停断电等)等造成软件使用和服务中止或终止,而给您造成损失的,您同意放弃追究康盛公司责任的全部权利。 6.康盛公司特别提请您注意,康盛公司为了保障公司业务发展和调整的自主权,康盛公司拥有随时经或未经事先通知而修改服务内容、中止或终止部分或全部软件使用和服务的权利,修改会公布于康盛公司网站相关页面上,一经公布视为通知。 康盛公司行使修改或中止、终止部分或全部软件使用和服务的权利而造成损失的,康盛公司不需对您或任何第三方负责。 有关康盛产品最终用户授权协议、商业授权与技术服务的详细内容,均由康盛公司独家提供。康盛公司拥有在不事先通知的情况下,修改授权协议和服务价目表的权利,修改后的协议或价目表对自改变之日起的新授权用户生效。 一旦您开始安装康盛产品,即被视为完全理解并接受本协议的各项条款,在享有上述条款授予的权利的同时,受到相关的约束和限制。协议许可范围以外的行为,将直接违反本授权协议并构成侵权,我们有权随时终止授权,责令停止损害,并保留追究相关责任的权力。 本许可协议条款的解释,效力及纠纷的解决,适用于中华人民共和国大陆法律。 若您和康盛之间发生任何纠纷或争议,首先应友好协商解决,协商不成的,您在此完全同意将纠纷或争议提交康盛所在地北京市海淀区人民法院管辖。康盛公司拥有对以上各项条款内容的解释权及修改权。 (正文完) 康盛公司
6024 次阅读|26 个评论

小黑屋|Archiver|彼岸网  

Powered by Discuz! X3.1 © 2001-2014 Comsenz Inc.
GMT-4, 2026-5-24 07:06 PM , Processed in 0.035046 second(s), 21 queries.

返回顶部