命运的阳光 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
不错,谢谢分享。
很有用的插件。
ThinkAgain 2008-8-6 15:00
好东西哦。赞一个。:)
认真分析了这么多。涉及数据库读取,以及分页管理,不错啊。