在windows2003里!administrator账号禁用了,如何启用此账户呢,就只有这一个用户的,其实方法很简单的,我们可能通过重新启动服务器,按下F8键,在出现的dos菜单时,我们选择进入到安全模式下,用原来的用户名和密码登陆(在安全模式下被禁用的账户可以照常登陆的)。我们进去后,把账户重新启用即可。
Monthly Archives: August 2007
LINUX下加载U盘的方法
首先,进入 ROOT 方式(指当前用户采用非root用户登陆时):
敲击命令 su root
成功后
显示 PASSWORD: 这时应该键入 用户 root 的登陆密码.
第二步,确定在 目录 /mnt 下建立了 文件夹 /usb,如果未建立可键入一下命令:
md /mnt/usb
成功后进行下一步。
第三步, 载入 u 盘,需键入以下命令:
mount /dev/sda1 /mnt/usb
成功后,即可使用 u 盘了
u 盘里的文件 就在目录 /mnt/usb 下。
第四步,卸载u盘
在使用完u盘后,在拔出前需要先键入卸载U盘命令
命令如下:
umount /mnt/usb
IIS5.0 IIS5.1 IIS6.0 IIS安装包 系列下载
IIS5.1 windows xp用
我感觉大家用到IIS安装包也都在网吧吧, 网吧一般都是xp吧,所以说IIS5.1才是最实用的 下载地址1 http://www.softhy.net/softhy.net_down/softhy.net_iis51.rar
下载地址2 http://zycode.com/code/server/1804.html
IIS5.0 windows 2000用
下载地址1 http://cq.down.chinaz.com/soft11/iis5.rar
下载地址2 http://sc.down.cnzzz.com/vvdcnzzz/soft11/iis5.rar
下载地址3http://down21.codefans.com/server/IIS5.rar
下载地址4http://down21.codes.com.cn/server/IIS5.rar
IIS6.0 windows 2003用
下载地址1http://www.zycode.com/code/server/1487.html
下载地址2http://ftpa.xiaoshen.cn:2121/2005/09/IIS6.0.rar
adodb教程:产生 Update 及 Insert 的SQL指令
ADODB 1.31版起,新增了两个资料集函数:GetUpdateSQL()及GetInsertSQL()。这允许你在执行了像”Select * FROM table query Where…”这样的查询函数後,建立一个 $rs->fields复本,改变这些栏位,然後自动产生出更新或是新增的SQL指令。
以下我们展示如何运用这些函数,我们将存取一个资料表,带有下列栏位:(ID,FirstName,LastName,Created)。在这些函数被执行前,你需要藉由一个对资料表的查询指令(select)来初始化一个资料集。
<?
#==============================================
# GetUpdateSQL() 及 GetInsertSQL() 范例码
#==============================================
include(‘ADOdb.inc.php’);
include(‘tohtml.inc.php’);
#==========================
# 以下的程式代码为测试新增状态
$conn = &ADONewConnection(“mysql”); # 建立一个连结
$conn->debug=1;
$conn->PConnect(“localhost”, “admin”, “”, “test”); # 连结到 MySQL, 资料库名称为 test
$sql = “Select * FROM ADOXYZ Where id = -1”;
# 从资料库中查询出一个空的资料集
$rs = $conn->Execute($sql); # 执行查询,并取得一个空的资料集 初始化记录集,以便下面保存,
$record = array(); # 初始化一个阵列,以便存放记录资料供新增用
# 设定记录中的栏位值
$record[“firstname”] = “Bob”;
$record[“lastname”] = “Smith”;
$record[“created”] = time();
# 传入空的资料集及栏位资料阵列到GetInsertSQL函数中,以执行功能
# 这个函数将会依传入的资料,回传一个全格式的 Insert SQL指令
$insertSQL = $conn->GetInsertSQL($rs, $record);
$conn->Execute($insertSQL); # 将记录挿入资料库中
#==========================
# 以下的程式码测试更新状态
$sql = “Select * FROM ADOXYZ Where id = 1”;
# 选择一笔记录以便更新
$rs = $conn->Execute($sql); # 执行这个查询,并取得一个存在的记录来更新
$record = array(); # 初始化一个阵列,以存放要更新的资料
# 设定栏位里的值
$record[“firstname”] = “Caroline”;
$record[“lastname”] = “Smith”; # 更新 Caroline的姓由 Miranda 变成 Smith
# 传入这个只有单一记录的资料集以及含有资料的阵列到 GetUpdateSQL函数里
# 函数将会回传一个具有正确 Where 条件的 Update(更新) SQL 指令
$updateSQL = $conn->GetUpdateSQL($rs, $record);
$conn->Execute($updateSQL); # 更新资料库中的记录
$conn->Close();
?>
mysql中DATETIME、DATE 和 TIMESTAMP 类型数据使用
DATETIME
、DATE
和 TIMESTAMP
类型是相似的。这个章节描述了它们的特性以及它们的相似点与不同点。
DATETIME
类型可用于需要同时包含日期和时间信息的值。MySQL 以 'YYYY-MM-DD HH:MM:SS'
格式检索与显示 DATETIME
类型。支持的范围是 '1000-01-01 00:00:00'
到 '9999-12-31 23:59:59'
。(“支持”的含义是,尽管更早的值可能工作,但不能保证他们均可以。)
DATE
类型可用于需要一个日期值而不需要时间部分时。MySQL 以 'YYYY-MM-DD'
格式检索与显示 DATE
值。支持的范围是 '1000-01-01'
到 '9999-12-31'
。
TIMESTAMP
列类型提供了一种类型,通过它你可以以当前操作的日期和时间自动地标记 Insert
或Update
操作。如果一张表中有多个 TIMESTAMP
列,只有第一个被自动更新。
自动更新第一个 TIMESTAMP
列在下列任何条件下发生:
- 列值没有明确地在一个
Insert
或LOAD DATA INFILE
语句中被指定。 - 列值没有明确地在一个
Update
语句中被指定,并且其它的一些列值已发生改变。(注意,当一个Update
设置一个列值为它原有值时,这将不会引起TIMESTAMP
列的更新,因为,如果你设置一个列值为它当前值时,MySQL 为了效率为忽略更新。) - 明确地以
NULL
设置TIMESTAMP
列。
第一个列以外其它 TIMESTAMP
列,可以设置到当前的日期和时间,只要将该列赋值 NULL
或 NOW()
。
任何 TIMESTAMP
列均可以被设置一个不同于当前操作日期与时间的值,这通过为该列明确指定一个你所期望的值来实现。这也适用于第一个 TIMESTAMP
列。这个选择性是很有用的,举例来说,当你希望 TIMESTAMP
列保存该记录行被新添加时的当前的日期和时间,但该值不再发生改变,无论以后是否对该记录行进行过更新:
- 当该记录行被建立时,让 MySQL 设置该列值。这将初始化该列为当前日期和时间。
- 以后当你对该记录行的其它列执行更新时,为
TIMESTAMP
列值明确地指定为它原来的值。
另一方面,你可能发现更容易的方法,使用 DATETIME
列,当新建记录行时以 NOW()
初始化该列,以后在对该记录行进行更新时不再处理它。
示例(译者注):
mysql> Create TABLE `tA` ( -> `id` int(3) unsigned NOT NULL auto_increment, -> `date1` timestamp(14) NOT NULL, -> `date2` timestamp(14) NOT NULL, -> PRIMARY KEY (`id`) -> ) TYPE=MyISAM; Query OK, 0 rows affected (0.01 sec) mysql> Insert INTO `tA` SET `id` = 1; Query OK, 1 row affected (0.02 sec) # 没有明确地指定第一个 timestamp 列值,该列值被设为插入的当前时刻 # 没有明确地指定其它的 timestamp 列值,MySQL 则认为插入的是一个非法值,而该列值被设为0 mysql> Insert INTO `tA` S (2, NOW(), NULL); Query OK, 1 row affected (0.01 sec) mysql> Select * FROM `tA`; +----+----------------+----------------+ | id | date1 | date2 | +----+----------------+----------------+ | 1 | 20030503104118 | 00000000000000 | | 2 | 20030503104254 | 20030503104254 | +----+----------------+----------------+ 2 rows in set (0.00 sec) mysql> Update `tA` SET `id` = 3 Where `id` = 1; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 # 对某一记录行进行了更新,第一个 timestamp 列值也将被更新 mysql> Update `tA` SET `id` = 2 Where `id` = 2; Query OK, 0 rows affected (0.00 sec) Rows matched: 1 Changed: 0 Warnings: 0 # MySQL 忽略了这次操作,第一个 timestamp 列值不会被更新 mysql> Select * FROM `tA`; +----+----------------+----------------+ | id | date1 | date2 | +----+----------------+----------------+ | 3 | 20030503104538 | 00000000000000 | | 2 | 20030503104254 | 20030503104254 | +----+----------------+----------------+ 2 rows in set (0.00 sec) mysql> Update `tA` SET `id` = 1,`date1`=`date1` Where `id` = 3; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 # 明确地指定了第一个 timestamp 列值为它原有值,该值将不会被更新 mysql> Select * FROM `tA`; +----+----------------+----------------+ | id | date1 | date2 | +----+----------------+----------------+ | 1 | 20030503104538 | 00000000000000 | | 2 | 20030503104254 | 20030503104254 | +----+----------------+----------------+ 2 rows in set (0.00 sec) * 以上结果在 MySQL 4.0.12 中测试
自定义404页面返回不当状态码
HTTP 404 错误意味着链接指向的网页不存在。在网站建设中想要完全避免这种情况是不可能的,比如说,我们常常需要对网站进行调整、改版,便会有网页被删除、改名或移动位置,这时候,虽然相应内容的网页还存在于网站中,但使用原来的地址访问则无法访问。——当然,对这类情况首先要考虑的是为原来页面地址做301重定向,以尽可能地减小对SEO效果的影响。——其次,在别人建立指向网站的链接时,也可能会由于出现拼写错误而使其成为一个无效的链接:在网站内找不到相应的内容页面。
简单说来,这类无效链接是由web服务器自动处理的:当Web 服务器接到类似的数据请求量,会返回一个 404 状态码,告诉对方其要请求的资源并不存在。但是,Web服务器默认的404错误页面,无论Apache还是IIS,均十分简陋、呆板且对用户不友好,无法给予用户寻找相应信息的更多线索,用户看到这类页面往往最直接的反应并是关闭浏览器窗口离开,这在很大程度上给网站造成损失。毕竟,对网站来说,用户永远是最重要的资源,以这种方式损失用户更意味着某种程度的失败。
这也是许多网站使用自定义404 错误页面的原因。通过良好的自定义404页面,可以包含对网站的相应介绍、用户可能感兴趣的内容链接或者网站内容导航链接、内容搜索功能等,能够有效地帮助访问者找到其欲寻找的内容或相似的内容,提高用户在网站内浏览更多信息的机会。
自定义404错误页面返回“200”或“302”状态码
从严格的技术角度,网站对404错误的处理策略,并不是一个SEO方面的工作,而属于网站可用性(usability)方面的问题。——当然,如果从广义的SEO范畴来看,提高网站可用性也属于SEO的基本操作。——但是,如果自定义404错误页面设置不当,则会极大地影响网站的SEO效果。
在许多朋友的印象中,自定义404错误页面只要能正确显示,只要能输入网站内某个并不存在的网页地址,在浏览器中能看到自定义的错误信息,便说明设置没问题。惭愧地说,本人也是抱有这种想法的一员,IT技术点评运行将近一年了,近日因Google更新后排名下降检查网站时才发现存在类似的错误:一个正确设置的404页面,不仅应当正确地显示,同时,应该能够正确返回“404”错误代码,而不是“200”或“302”。虽然对访问的用户而言,HTTP状态码究竟是“404”还是“200”来说并没有什么区别,但对搜索引擎而言,这则是相当重要的。
为什么这么说呢?让我们先来回顾一下搜索引擎收录与索引网页的过程:搜索引擎的Spider向网站服务器发送请求,要求读取某个网页,网站服务器接到请求后返回 HTTP 状态码响应请求,这些返回的HTTP状态码决定着搜索引擎的下一步行动:将该网页收录到索引数据库或者将其从索引数据库删除等。
当然,HTTP状态码有很多种,分别对应不同的情况,下面就与本文内容相关的几种作一简单介绍,更详细的信息可参考W3C规范:
- 404 : 请求的网页不存在(不排除日后该链接有效的可能性);
- 410 : 请求的网页不存在(永久);
- 200 : 服务器成功返回网页
- 302 : 网址临时重定向(跳转)
- 301 : 网址永久重定向
需要说明的是,大部分搜索引擎将“404”与“410”状态同等对待,如Google。(参见Matt Cutts的说明)
当搜索引擎在请求某个Url时得到“404”状态回应时,便会知道该网页在网站内不复存在,从而在索引数据库中将其删除,——当然,这个删除过程有可能需要很长时间——而当搜索引擎得到“200”状态回应时,则会认为该url是有效的,并将其回到到索引数据库中。
404页面返回“200”状态码的后果
如果网站的自定义404错误页面在url无效时不返回“404”状态码而代之以“200”,会发生什么情况呢?很明显,搜索引擎会认为这个“根本不存在的”网页在网站内是存在的,这会导致很多问题,影响网站的最终SEO效果。
举例来说,比如说对“http://www.haohtml.com/a.html”、“http://www.haohtml.com/b.html”这两个在IT技术点评网站内并不存在的url而言,如果搜索引擎得到的回应状态码是“200”,那么,便会将其收录到索引数据库,这样的结果便是这两个不同的url具有完全相同的内容:自定义404错误页面的内容,这类重复文本(Duplicate Content)的现象对许多搜索引擎而言都是大忌。尤其是考虑到网站中不可能只有这两个无效链接,毕竟在网站建设中,无论网站的内部链接还是外部链接,总会不可避免地出现许多比如说拼写错误的情况,类似的重复内容会更多。这样,对搜索引擎而言,特别是Google,不但很难获得理想的网站信任指数,也会大大降低Google对网站质量的评定。
404错误页使用Meta Refresh带来的302问题
常常看到许多网站的自定义404错误页面采取类似这样的形式:首先显示一段错误信息,然后,通过Meta Refresh将页面跳转到网站首页、网页地图或其他类似页。根据具体实现方式不同,这类404页面可能返回“200”状态码,也可能返回“302”,但不论哪种,从SEO的角度看,均不是一种合适的选择。
对“200”状态的情况我们上面已经谈过,那么,当404页面返回“302”时,搜索引擎会怎么对待呢?从理论上说,对“302”错误,搜索引擎认为该网页是存在的,只不过临时改变了地址,仍然会索引收录该页,这样,同样会出现类似于“200”状态码时的重复文本问题;其次,以google为代表的主流搜索引擎对302重定向的适用范围要求越来越严格,这类不当使用302重定向的情况存在很大的风险。
因此,尽量不要在404错误页中使用这类Meta Refresh方法。如果实现希望实现类似的功能,即让显示错误信息几(十)秒后跳转到首页或其他页面,可以考虑在404错误页中使用Java Script跳转。——Java Script对搜索引擎而言是无益同时也无害的。
确保自定义404错误页面能够返回“404”状态码
在自定义404错误页面设置完毕后,一定要检查一下其是不是能够正确地返回“404”状态码。
检查的方法也相当简单,使用本站提供的Server Header检查工具,或其他类似工具如这个,输入一个网站内不存在网页的url,查看一下HTTP Header的返回情况,确信其返回的是“404 Not found”。
SEO与404错误处理方式
在“通过HTTP状态码查看搜索引擎蜘蛛如何爬行你的网站”一文中,我介绍了一些经常涉及到的HTTP状态码及含义,譬如大家经常探讨并且与本文相关的Http状态码:
404:服务器找不到指定的资源,请求的网页不存在(譬如浏览器请求的网页被删除或者移位,但不排除日后该链接有效的可能性);
410:请求的网页不存在(注意:410表示永久性,而404表示临时性);
200:服务器成功返回请求的网页;
301:网址永久性重定向
302:网址临时性重定向
注意:大部分搜索引擎将“404”与“410”状态同等对待,如Google。(参见Matt Cutts的说明)
对HTTP404状态码的理解
HTTP 404 错误意味着链接指向的网页不存在,即原始网页的URL失效,这种情况经常会发生,很难避免,比如说:网页URL生成规则改变、网页文件更名或移动位置、导入链接拼写错误等,导致原来的URL地址无法访问;当Web 服务器接到类似请求时,会返回一个404 状态码,告诉浏览器要请求的资源并不存在。但是,Web服务器默认的404错误页面,无论Apache还是IIS,均十分简陋、呆板且对用户不友好,无法给用户提供必要的信息以获取更多线索,无疑这会造成用户的流失。
因此,很多网站均使用自定义404错误的方式以提供用户体验避免用户流失。一般而言,自定义404页面通用的做法是在页面中放置网站快速导航链接、搜索框以及网站提供的特色服务,这样可以有效的帮助用户访问站点并获取需要的信息。
HTTP404对SEO的影响
自定义404错误页面是提供用户体验的很好的做法,但在应用过程中往往并未注意到对搜索引擎的影响,譬如:错误的服务器端配置导致返回“200”状态码或自定义404错误页面使用Meta Refresh导致返回“302”状态码。正确设置的自定义404错误页面,不仅应当能够正确地显示,同时,应该返回“404”错误代码,而不是“200”或“302”。虽然对访问的用户而言,HTTP状态码究竟是“404”还是“200”来说并没有什么区别,但对搜索引擎而言,这则是相当重要的。
(一)自定义404错误页返回“200”状态码
当搜索引擎蜘蛛在请求某个URL时得到“404”状态回应时,即知道该URL已经失效,便不再索引该网页,并向数据中心反馈将该URL表示的网页从索引数据库中删除,当然,删除过程有可能需要很长时间;而当搜索引擎得到“200”状态回应时,则会认为该url是有效的,便会去索引,并会将其收录到索引数据库,这样的结果便是这两个不同的url具有完全相同的内容:自定义404错误页面的内容,这会导致出现复制网页问题。对搜索引擎而言,特别是Google,不但很难获得信任指数TrustRank,也会大大降低Google对网站质量的评定。(为什么会出现返回“200”状态码的情况??请参看下面内容“自定义404错误页面的基本原则”)
我一直在使用Google Sitemap,当我们提交XML格式网站地图文件时,Google会验证我们的身份以确保是网站合法的管理者。验证方式有两种:上传指定名称的html页到网站根目录或者在网页meta区域添加一个标识身份的meta标签。我通常是使用上传html网页的方式,但Google却提示我网站根目录下找不到这个网页(实际上我已上传,并且通过浏览器可以访问),这是一个很可怕的问题,见图:
(二)自定义404错误页使用Meta Refresh返回“302”状态码
常常看到许多网站的自定义404错误页面采取类似这样的形式:首先显示一段错误信息,然后,通过Meta Refresh将页面跳转到网站首页、网页地图或其他类似页。根据具体实现方式不同,这类404页面可能返回“200”状态码,也可能返回“302”,但不论哪种,从SEO技术角度看,均不是一种合适的选择。
对“200”状态的情况我们上面已经谈过,那么,当404页面返回“302”时,搜索引擎会怎么对待呢?从理论上说,对“302”错误,搜索引擎认为该网页是存在的,只不过临时改变了地址,仍然会索引收录该页,这样,同样会出现类似于“200”状态码时的重复文本问题;其次,以google为代表的主流搜索引擎对302重定向的适用范围要求越来越严格,这类不当使用302重定向的情况存在很大的风险。
确保自定义404错误页面能够返回“404”状态码
在自定义404错误页面设置完毕后,一定要检查一下其是不是能够正确地返回“404”状态码。可以使用Server Header检查工具,输入一个不存在网页的url,查看一下HTTP Header的返回情况,确信其返回的是“404 Not found”。
404错误的处理方式
(一)定制404错误页面的基本原则
首先应明确的是,404错误应工作在服务器级而不是网页级。对定制使用动态页面如PHP脚本类型的404页时,必须确保在PHP执行前服务器已经顺利地送出“404”状态码,不然,一旦执行到了ISAPI级别,返回的状态码便只能是“200”或其他如“302”之类的重定向状态码了。
其次,在自定义网站的404错误页面时,对设置的错误页面URL链接应使用相对路径而不是绝对路径,而且自定义404页面应该放在网站根目录下。尽管无效链接可能是多种形式的URL,但当发生404访问错误时,WEB服务器会自动将其转到自定义的当404错误页中,这跟URL的形似没有关系。
(二)Apache下设置404错误页面
为Apache Server设置 404错误页面的方法很简单,只需在.htaccess 文件中加入如下内容即可:
ErrorDocument 404 /notfound.php
注意:
1.切记不要将404错误转向到网站主页,否则可能会导致主页在搜索引擎中消失
2.切记不要使用绝对URL(例如:http://www.bloghuman.com/nofound.php形式),如果使用绝对URL返回的状态码是“302”+“200”(已测试)
(三)IIS/ASP.net下设置404错误页面
首先,修改应用程序根目录的设置,打开 “web.config” 文件编辑,在其中加入如下内容:
<configuration>
<system.web>
<customErrors mode=”On” defaultRedirect=”error.asp”>
<error statusCode=”404″ redirect=”notfound.asp” />
</customErrors>
</system.web>
</configuration>
注:上文例中“error.asp”为系统默认的404页面,“notfound.asp”为自定义的404页面,使用时请修改相应文件名。
然后,在自定义的404页面“notfound.asp”中加入:
<%
Response.Status = “404 Not Found”
%>
这样,便可以保证IIS能够正确地返回“404”状态码
(四)在IIS/ASP.net下设置404静态页面
设置静态404错误页面的方法则比较简单,在IIS管理器中右键单击要管理的网站,打开“属性”中的“自定义错误信息”页,为“404
”设定相应的错误信息页即可.
从日志中恢复SQLServer数据库到时间点
前提条件:myBBS是数据库test中的一个表,

FROM disk=’d:\1820.logs’ WITH RECOVERY,STOPAT=’10/15/2004 17:59′
在sql server中改变表的所有者
在对数据库进行移植的时候,经常会发现表的所有者发生了改变,而造成数据表拒绝访问,我们可以通过下面的语句来修改数据表的所有者:
EXEC sp_changeobjectowner ‘super.article’, ‘dbo’
这个我们就可以dbo的身份对数据库中的表进行相应的操作了!
adodb和smarty分页类
- <?php
- class show_Pager
- {
- protected $_total; //记录总数
- protected $pagesize; //每一页显示的记录数
- public $pages; //总页数
- protected $_cur_page; //当前页码
- protected $offset; //记录偏移量
- protected $pager_Links; //url连接
- protected $pernum = 5; //页码偏移量,这里可随意更改
- public function __construct($total,$pagesize,$_cur_page)
- {
- $this->_total=$total;
- $this->pagesize=$pagesize;
- $this->_offset();
- $this->_pager();
- $this->cur_page($_cur_page);
- $this->link();
- }
- public function _pager()//计算总页数
- {
- return $this->pages = ceil($this->_total/$this->pagesize);
- }
- public function cur_page($_cur_page) //设置页数
- {
- if (isset($_cur_page))
- {
- $this->_cur_page=intval($_cur_page);
- }
- else
- {
- $this->_cur_page=1; //设置为第一页
- }
- return $this->_cur_page;
- }
- //数据库记录偏移量
- public function _offset()
- {
- return $this->offset=$this->pagesize*($this->_cur_page-1);
- }
- //html连接的标签
- public function link()
- {
- if ($this->_cur_page == 1 && $this->pages>1)
- {
- //第一页
- $this->pager_Links = "首 页 | 上一页 | <a href=".$PHP_SELF."?pager=".($this->_cur_page+1).">下一页</a> | <a href=".$PHP_SELF."?pager=$this->pages>尾 页</a>";
- }
- elseif($this->_cur_page == $this->pages && $this->pages>1)
- {
- //最后一页
- $this->pager_Links = "<a href=".$PHP_SELF."?pager=1>首 页<a> | <a href=".$PHP_SELF."?pager=".($this->_cur_page-1).">上一页</a> | 下一页 | 尾 页";
- }
- elseif ($this->_cur_page > 1 && $this->_cur_page <= $this->pages)
- {
- //中间
- $this->pager_Links = "<a href=".$PHP_SELF."?pager=1>首 页<a> | <a href=".$PHP_SELF."?pager=".($this->_cur_page-1).">上一页</a> | <a href=".$PHP_SELF."?pager=".($this->_cur_page+1).">下一页</a> | <a href=".$PHP_SELF."?pager=$this->pages>尾 页</a>";
- }
- return $this->pager_Links;
- }
- //html数字连接的标签
- public function num_link()
- {
- $setpage = $this->_cur_page ? ceil($this->_cur_page/$this->pernum) : 1;
- $pagenum = ($this->pages > $this->pernum) ? $this->pernum : $this->pages;
- if ($this->_total <= $this->pagesize) {
- $text = ‘只有一页’;
- } else {
- $text = ‘页数:’.$this->pages.‘ ‘.$this->pagesize.‘个/页 ‘;
- if ($this->_cur_page > 1) {
- $text .= ‘<a title=第一页 href=?pager=1>[1]</a>..’;
- }
- if ($setpage > 1) {
- $lastsetid = ($setpage-1)*$this->pernum;
- $text .= ‘<a title=上一列 href=?pager=’.$lastsetid.‘>[<<]</a>’;
- }
- if ($this->_cur_page > 1) {
- $pre = $this->_cur_page-1;
- $text .= ‘<a title=上一页 href=?pager=’.$pre.‘>[<]</a>’;
- }
- $i = ($setpage-1)*$this->pernum;
- for($j=$i; $j<($i+$pagenum) && $j<$this->pages; $j++) {
- $newpage = $j+1;
- if ($this->_cur_page == $j+1) {
- $text .= ‘<b>[‘.($j+1).‘]</b>’;
- } else {
- $text .= ‘<a href=?pager=’.$newpage.‘>[‘.($j+1).‘]</a>’;
- }
- }
- if ($this->_cur_page < $this->pages){
- $next = $this->_cur_page+1;
- $text .= ‘<a title=下一页 href=?pager=’.$next.‘>[>]</a>’;
- }
- if ($setpage < $this->_total) {
- $nextpre = $setpage*($this->pernum+1);
- if($nextpre<$this->pages)
- $text .= ‘<a title=下一列 href=?pager=’.$nextpre.‘>[>>]</a>’;
- }
- if ($this->_cur_page < $this->pages) {
- $text .= ‘..<a title=最后一页 href=?pager=’.$this->pages.‘>[‘.$this->pages.‘]</a>’;
- }
- }
- return $text;
- }
- }
- //$conn,$tpl 全局变量 传入 $table是数据表 $where 是条件语句 $order 是ADSC之类的,$pager_size是每页显示数,$pager是当前页
- //返回后在摸板里面可以直接使用
- <{section name=sec loop=$show}> <{/section}>
- 数字标签用<{$numlink}>
- class my_Pager extends show_Pager
- {
- function __construct($table,$where,$order,$pager_size,$pager)
- {
- global $conn;
- global $tpl;
- $sql="Select * FROM `$table` $where order by $order desc";
- $nums=$conn->Execute($sql)->RecordCount();
- $pager=new show_Pager($nums,$pager_size,$pager);
- $show=$conn->SelectLimit($sql,$pager_size,$pager->_offset())->GetAll();
- $tpl->assign("numlink",$pager->num_link());//数字标签
- $tpl->assign("show",$show);//显示帖子
- }
- }
- ?>