查看完整版本: 建立一个显示所有评论的留言板 (更新)

命运的阳光 2008-8-2 00:18

建立一个显示所有评论的留言板 (更新)

原文链接:[url=http://www.wavemood.net/create_all_comments_page_3.html]http://www.wavemood.net/create_all_comments_page_3.html[/url]
复制过来有点混乱

[color=#993300] [b]本文涉及的文件:[/b][/color]
all-comments.php   — 页面模板(请根据自己使用的主题编写)
all-comment-template.php   —  评论模板
all-comment-function.php   —  分页函数
all-comment-navi.css   —  分页条样式
[url=http://www.wavemood.net/wp-content/uploads/2008/08/all-comments.rar]点此下载[/url]

我们将建立一个带有分页功能的留言板。

没有看过的朋友可以回顾
[b][url=http://www.wavemood.net/create_all_comments_page_3create_all_comments_page_1.html]建立一个显示所有评论的留言板 I[/url]
[url=http://www.wavemood.net/create_all_comments_page_3create_all_comments_page_2.html]建立一个显示所有评论的留言板 II[/url][/b]

1. 先来了解下分页的基本原理。
在[url=http://www.wavemood.net/create_all_comments_page_3create_all_comments_page_2.html]建立一个显示所有评论的留言板 II[/url]中用到的SQL,取出了数据库中所有的评论,如果可以根据我们的要求,每次只取出我们需要的部分,就可以实现分页了。
如果想从Mysql数据库中取出连续的部分数据,可以使用“[color=#ff9900]limit[/color]”参数,看下面的例子:
select * from table limit 30, 10;
这句SQL的意思是:从table表中取出第31条~第40条数据。
我们只需要定义数据的起点和数据长度,就能得到我们需要的数据段。

2. 分页的实现
Q: 如何得到当前的页码?
A: 当我们点击导航条的时候,页码通过[color=#ff9900]?page=2[/color]这样的参数传递回页面,在PHP中通过[color=#ff9900]$_GET['page'][/color]来获得。
Q: 如何计算数据的起点?
A: limit的第一个参数是数据的起点,通过公式“[color=#ff9900]$offset = 每页显示的数量 * (当前页码 - 1)[/color]”来计算。
有了这样的知识,就可以开工了。

重新编辑all-comment-template.php
[color=#666666][/color][color=#000000][b]<?php[/b][/color]
[color=#990000]global[/color] [color=#003300]$wpdb[/color][color=#339933],[/color] [color=#003300]$comment[/color][color=#339933],[/color] [color=#003300]$wp_query[/color][color=#339933];[/color]
[color=#003300]$num_per_page[/color] [color=#339933]=[/color] [color=#cc66cc]20[/color][color=#339933];[/color] [color=#666666][i]// 每页显示[/i][/color]
[color=#003300]$page_now[/color] [color=#339933]=[/color] [color=#003300]$_GET[/color][color=#099000][[/color][color=#00ff00]'page'[/color][color=#099000]][/color][color=#339933];[/color]

[color=#666666][i]// 参数验证[/i][/color]
[color=#b1b100]if[/color] [color=#099000]([/color][color=#339933]![/color][color=#990000]isset[/color][color=#099000]([/color][color=#003300]$num_per_page[/color][color=#099000])[/color] [color=#339933]||[/color] [color=#339933]![/color][color=#990000]is_numeric[/color][color=#099000]([/color][color=#003300]$num_per_page[/color][color=#099000])[/color] [color=#339933]||[/color] [color=#003300]$num_per_page[/color] [color=#339933]<[/color] [color=#cc66cc]1[/color][color=#099000])[/color] [color=#099000]{[/color]
    [color=#003300]$num_per_page[/color] [color=#339933]=[/color] [color=#cc66cc]1[/color][color=#339933];[/color]
[color=#099000]}[/color]
[color=#b1b100]if[/color] [color=#099000]([/color][color=#339933]![/color][color=#990000]isset[/color][color=#099000]([/color][color=#003300]$page_now[/color][color=#099000])[/color] [color=#339933]||[/color] [color=#339933]![/color][color=#990000]is_numeric[/color][color=#099000]([/color][color=#003300]$page_now[/color][color=#099000])[/color] [color=#339933]||[/color] [color=#003300]$page_now[/color] [color=#339933]<[/color] [color=#cc66cc]1[/color][color=#099000])[/color] [color=#099000]{[/color]
    [color=#003300]$page_now[/color] [color=#339933]=[/color] [color=#cc66cc]1[/color][color=#339933];[/color]
[color=#099000]}[/color]

[color=#666666][i]// 获取总页数[/i][/color]
[color=#003300]$query[/color] [color=#339933]=[/color] [color=#00ff00]"select count(*) from $wpdb->posts AS posts, $wpdb->comments AS comments
          where posts.ID = comments.comment_post_ID
            and posts.post_status = 'publish'
            and comments.comment_approved = '1'
            and comments.comment_type = ''"[/color][color=#339933];[/color]
[color=#003300]$wp_query[/color][color=#339933]->[/color][color=#040000]comment_count[/color] [color=#339933]=[/color] [color=#003300]$count[/color] [color=#339933]=[/color] [color=#003300]$wpdb[/color][color=#339933]->[/color][color=#040000]get_var[/color][color=#099000]([/color][color=#003300]$query[/color][color=#099000])[/color][color=#339933];[/color]
[color=#003300]$max_page[/color] [color=#339933]=[/color] [color=#990000]ceil[/color][color=#099000]([/color][color=#003300]$count[/color] [color=#339933]/[/color] [color=#003300]$num_per_page[/color][color=#099000])[/color][color=#339933];[/color]

[color=#b1b100]if[/color] [color=#099000]([/color][color=#003300]$page_now[/color] [color=#339933]>[/color] [color=#003300]$max_page[/color][color=#099000])[/color] [color=#099000]{[/color]
    [color=#003300]$page_now[/color] [color=#339933]=[/color] [color=#cc66cc]1[/color][color=#339933];[/color]
[color=#099000]}[/color]

[color=#666666][i]// 获取offset[/i][/color]
[color=#003300]$offset[/color] [color=#339933]=[/color] [color=#003300]$num_per_page[/color] [color=#339933]*[/color] [color=#099000]([/color][color=#003300]$page_now[/color] [color=#339933]-[/color] [color=#cc66cc]1[/color][color=#099000])[/color][color=#339933];[/color]

[color=#666666][i]// 获取点评[/i][/color]
[color=#003300]$query[/color] [color=#339933]=[/color] [color=#00ff00]"select posts.*, comments.*
          from $wpdb->posts as posts, $wpdb->comments as comments
          where posts.ID = comments.comment_post_ID
                and posts.post_status = 'publish'
                and comments.comment_approved = '1'
                and comments.comment_type = ''
          order by comment_date desc
          limit $offset, $num_per_page"[/color][color=#339933];[/color]

[color=#003300]$comments[/color] [color=#339933]=[/color] [color=#003300]$wpdb[/color][color=#339933]->[/color][color=#040000]get_results[/color][color=#099000]([/color][color=#003300]$wpdb[/color][color=#339933]->[/color][color=#040000]prepare[/color][color=#099000]([/color][color=#003300]$query[/color][color=#099000])[/color][color=#099000])[/color][color=#339933];[/color]

[color=#666666][i]// 输出分页[/i][/color]
[color=#b1b100]for[/color][color=#099000]([/color][color=#003300]$i[/color][color=#339933]=[/color][color=#cc66cc]1[/color][color=#339933];[/color] [color=#003300]$i[/color][color=#339933]<=[/color][color=#003300]$max_page[/color][color=#339933];[/color] [color=#003300]$i[/color][color=#339933]++[/color][color=#099000])[/color] [color=#099000]{[/color]
    [color=#990000]echo[/color] [color=#00ff00]'<span style="width:20px;"><a href="?page='[/color] [color=#339933].[/color] [color=#003300]$i[/color] [color=#339933].[/color] [color=#00ff00]'">'[/color] [color=#339933].[/color] [color=#003300]$i[/color] [color=#339933].[/color] [color=#00ff00]'</a></span>'[/color][color=#339933];[/color]
[color=#099000]}[/color]
[color=#666666][i]// 如果你愿意,可以美化分页信息[/i][/color]
[color=#666666][i]// 使用下面的语句输出一个类似postnavi的分页条,来代替上面的for语句[/i][/color]
[color=#666666][i]// 所需的文件在本文开头已经给出[/i][/color]
[color=#666666][i]// $css_url = get_bloginfo("template_url") . "/all-comment-navi.css";[/i][/color]
[color=#666666][i]// echo "\n" . '<link rel="stylesheet" href="' . $css_url . '" type="text/css" media="screen" />';[/i][/color]
[color=#666666][i]// $function_url =  "all-comment-function.php";[/i][/color]
[color=#666666][i]// require($function_url);[/i][/color]
[color=#666666][i]// echo get_ecnavi($max_page, $page_now, 5, $count);[/i][/color]

[color=#666666][i]// 调用显示comments[/i][/color]
[color=#990000]define[/color][color=#099000]([/color][color=#00ff00]'COMMENTS_TEMPLATE'[/color][color=#339933],[/color] [color=#000000][b]true[/b][/color][color=#099000])[/color][color=#339933];[/color]
[color=#003300]$include[/color] [color=#339933]=[/color] apply_filters[color=#099000]([/color][color=#00ff00]'comments_template'[/color][color=#339933],[/color] TEMPLATEPATH [color=#339933].[/color] [color=#00ff00]'/comments.php'[/color] [color=#099000])[/color][color=#339933];[/color]
[color=#b1b100]if[/color] [color=#099000]([/color][color=#990000]file_exists[/color][color=#099000]([/color] [color=#003300]$include[/color] [color=#099000])[/color] [color=#099000])[/color]
        [color=#b1b100]require[/color][color=#099000]([/color] [color=#003300]$include[/color] [color=#099000])[/color][color=#339933];[/color]

[color=#b1b100]else[/color]
        [color=#b1b100]require[/color][color=#099000]([/color] WP_CONTENT_DIR [color=#339933].[/color] [color=#00ff00]'/themes/default/comments.php'[/color][color=#099000])[/color][color=#339933];[/color]
[color=#000000][b]?>[/b][/color]

[[i] 本帖最后由 命运的阳光 于 2008-8-2 00:21 编辑 [/i]]

yang_hui1986527 2008-8-2 12:17

不错,谢谢分享。
很有用的插件。

zzh5060 2008-8-2 12:23

恩,好,赞一个。。。呵呵。。谢谢了

ThinkAgain 2008-8-6 15:00

好东西哦。赞一个。:)
认真分析了这么多。涉及数据库读取,以及分页管理,不错啊。

清竹飞翔 2008-8-6 16:16

帮你顶一个,不错

Miko 2008-8-7 10:23

好复杂

xfccs 2008-9-7 21:31

好复杂...不知道搞不搞的来...

scutdk 2008-9-19 08:53

恩,好东西
谢谢咯

ausmax 2008-10-7 12:38

顶了再看!!!!

zern 2008-10-7 13:07

看了再顶

一顶再顶

口袋 2008-10-7 14:32

谢谢,很有用占坐,在慢慢看
页: [1]
查看完整版本: 建立一个显示所有评论的留言板 (更新)