求回复成串的思路(应该有点难度了,高手可以进来看看)

总哈哈 2008-10-28 04:33:42
http://www.smartmm.cn/archives/122.html
这个页面里面的回复,我希望高手能给出思路,最好能给出代码,如果给出思路,希望在给出的时候自己能想一下,这思路是否可以搞定这问题,要不然就白回复了。分不多,只会给回复得好的几个人,这里对不起了,有时间再来散分!
...全文
136 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
海诗美妆 2008-10-30
  • 打赏
  • 举报
回复
如果是数据结构的话,如下:

1.一个主题拥有n个回复
2.一个回复归属于1个主题
3.回复满足条件2的同时,拥有0或1个亲回复

下面是一个简单的例子,不要拿它当代码跑
例如,主题表thead和回复表post可以如下定义

create table thread(
id int primary key,
name varchar not null,
)

create table post(
id int primary key,
name varchar not null,
parentThread int not null,
parentPost int,
)



提取数据的时候,将主题下的所有回复放到一个字串,
显示子恢复的时候,通过相应的parentPost值就可以知道亲子关系了。

最简单的方法是用php的foreach循环数组,
如果lz有能力,最好将post和thread以目标的形势提取,
直接把子恢复放到各个亲回复的目标当中。
总哈哈 2008-10-30
  • 打赏
  • 举报
回复
源码我看过了,只是用处不大,这种方法也只能用于blog, 谢谢大家的回复,我采用的方法是首节点和尾节点用<!--command_{id}-->这样子替换,可以做出来,具体方法,这两天会写在我的blog, www.smartmm.cn里面,如果有需要的朋友可以过来看看。
iasky 2008-10-29
  • 打赏
  • 举报
回复
JQuery搞定,操作DOM很方便的

或者使用xajax,这个和php结合的很好。
总哈哈 2008-10-29
  • 打赏
  • 举报
回复
谢谢自由火的的建议,我会考虑的,呵呵!
程序猿之殇 2008-10-29
  • 打赏
  • 举报
回复
1 dom节点操作div,这个我以前完成过,只是没有你哪么多嵌套而矣.我只增加了管理员回复这一层.其实我挺反感用太多div的.
 给你个http://www.xulplanet.com/references/objref/HTMLTableRowElement.html网站,这上面有各种div的详细情况.
2 树型数据库的搜索,的确是比较头疼,尤其是在深度未知的情况,选择算法的确很重要.可以考虑对于已经存在的评论或者回复,生成静态文本,保存在数据库中,不用每次都去查询数据库构造.
 或者利用模板的cache功能.每次都查询数据库,负载是很大的.


总哈哈 2008-10-29
  • 打赏
  • 举报
回复
感谢大家的回复,
2楼
我觉得你说的挺好,你一针见血的说出了这个问题的难点,确实难在dom节点操作div, 用XML来完成这项任务不失为一个好的方法.有时间我得试试!
3楼
其实这个问题的难点不是你上面说的那个,把它组成一个什么样的数组,把它组起来应该算是小Kiss,由此可以看出你没有深入的想一下这个问题,我最开始也认为是这样的,但是后来深入的想了一下,难点在于对Dom节点的操作,也就是怎样把DIV给串起来,你可以往下面想一下,怎样来利用这一个数组?如果有想出来,还请不惜赐教。
5楼
这个确实是树结构的讨论,说实话,我最开始是仿照 加拿大枫下论坛(http://www.rolia.net/) 来写的, 但是后来要改成成串显示,因为那样,要以AJAX来实现把新加的评论放在其下面,实在是有点难。于是就改成了现在的我所描述的那个样子,那样往下面的节点添加数据要简单得多。


同时希望更多高手参与进来,目前我已经把这部分给完成了,只是希望高手们给出更好的意见!要考虑来搜索数据库的速度,和内存分配,选出最优算法!
fxs_2008 2008-10-29
  • 打赏
  • 举报
回复
这个是典型的树结构吧

和树论坛差不多
只是在显示时看在父子关系上,如果是子,则在div内部append一个child节点,同时显示内容

显示时可以递归显示!

数据结构和论坛结构一样 id, parent,title,content ,或加一下是否有子节点等等

添加时用ajax操作,比较复杂了,可以说是评论,也可以说是论坛系统了


TR@SOE 2008-10-29
  • 打赏
  • 举报
回复
这个是wordpress后台吧?这个回复系统我没有用过,不过应该是一个插件或者widget。LZ先去搜索一下,然后看看能不能学习源码……
ly4885806 2008-10-28
  • 打赏
  • 举报
回复
由于可以中间回复所以应该是多分支的,我上面的思路已经把这点包含进去了.
有时间再来贴代码
ly4885806 2008-10-28
  • 打赏
  • 举报
回复
我先说下我的思路
首先数据库结构如下:
id
content
parent_id(为0,表示这是顶级的)
然后将数据(第一级只读取parent_id为0的记录)读入一个数组中,数组结构类似下面[这个里面用嵌套函数不断的从数据库取记录,当然还会有更好的算法,结束的条件是,根据当前的id值没有找到与parent_id对应的记录.有的话就存入数组库,再取此记录的id,作为条件,这样不断嵌套]
array{
id
content
child_array{
id
content
child_array{
...........
}
}
}
array{
id
content
child_array{
id,content
}
}

现在这个数组中按评论层次结构存了数据的评论数据
下面同样做一个嵌套函数来将数组的内容显示出来
ps:不要跟我说你不懂嵌套函数
最后要注意的一点是:数组中的结构顺序从里到外从跟评论数据相反的,这时候嵌套函数有一点点技巧,你要根据上一次函数的返回值来显示此函数中的内容.这样就能保证数据的样式是你想要的样式


你先照着上面写代码看,有行不通的说下, 有时间我也写写看
程序猿之殇 2008-10-28
  • 打赏
  • 举报
回复
仔细看了一下它生成的html源码.
在这个成串的回复的处理是这样的,每回复一次,就在div内部追加一个div,依此类推.

主要技术难点在于dom节点操作div以及ajax提交.

分析HTML

<p>我再发!</p>
<p class="thdrpy">[<a href="javascript:void(0)" onclick="movecfm(event,1308,1,'tietie');">回复</a>]</p>
<div class="comment-childs chalt" id="comment-1310">
<img alt='' src='' class='avatar avatar-32' height='32' width='32' /><p><cite>tietie</cite> Reply:<br /><small class="commentmetadata">10月 23rd, 2008 at 3:34 pm</small></p>
<p>@tietie, 呵呵,不骗你!</p><p class="thdrpy">[<a href="javascript:void(0)" onclick="movecfm(event,1310,1,'tietie');">回复</a>]</p>
<div class="comment-childs chalt" id="comment-1311">
<img alt='' src='' class='avatar avatar-32' height='32' width='32' /><p><cite>tietie</cite> Reply:<br /><small class="commentmetadata">10月 23rd, 2008 at 4:53 pm</small></p><p>@tietie, 再发一个!</p>
<p class="thdrpy">[<a href="javascript:void(0)" onclick="movecfm(event,1311,1,'tietie');">回复</a>]</p>
</div>
</div>


一个规则的回复串是这样的

<div class="comment-childs chalt" id="comment-回复id">
<p><cite>标题</cite> Reply:<br /><small class="commentmetadata">时间</small></p>
<p>@tietie,</p>
<p class="thdrpy">[<a href="javascript:void(0)" onclick="movecfm(event,回复id,1,'tietie');">回复</a>]</p>
</div>

每一次添加回复,首先构造形如上面的div节点,然后就会在id为"comment-回复id"的结点里添加一个子节点,并得用 appendChild函数来完成节点添加的过程.
总哈哈 2008-10-28
  • 打赏
  • 举报
回复
自己顶一下,实际上就是想实现上面的,回复及显示功能!本人已经有了一些想法,但是觉得不是很好,希望高手们能给出好的建意,如果一直没有人回复,我最后会给出自己的思路!

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧