希捷新3T硬盘老主板也能装系统

无奈我的几个硬盘都已经满了除了双系统的还剩5G空间,我这2200G的硬盘剩下不到20G了…憋屈了很久,想买硬盘,可是硬盘迟迟不降价.今天突然看到中关村一篇文章,叫做硬盘价格轰然倒塌,于是忍不住偷笑,这小编肯定又要挨骂了.进去看看果然不出所料,不过这次很惊喜我一直想买的3T降到1000以内了,不过,之前了解到老主板只能支持2T硬盘做系统盘,于是乎对于3T硬盘估计只能做存储盘了.

不过紧接着看到一篇文章,感到惊喜,这篇同样来自中关村的文章3TB硬盘首破千元 性能价格PK谁最出众,不仅了解到了硬盘性能简单比较和评测,同样也学到了3TB硬盘如何安装到旧主板上.这里我就直接转载过来备用收藏了吼吼… 继续阅读“希捷新3T硬盘老主板也能装系统”

PHPCMS页面专题汇总列表内调用该专题内文章方法

好吧,由于工作需求,外加自己过分追求完美,晚上研究了一下,PHPCMS专题总列表页内的某个专题含有该专题的几篇文章的方式,其实原理很简单,核心思想是
1.嵌套循环.
2.数据库中存储总列表内某专题的id值等于该专题某文章列表的id值.


昨晚其实最后效果还有点问题,今天上午一上班继续解决,终于弄好了,现在跟大家分享心得.

前文可能这样说大家看不大明白,我先截取两张图片给大家看:

PHPCMS页面专题汇总列表内调用该专题内文章方法

想实现的效果:通俗点讲就是假设你后台有5个专题,而且这5个专题内有若干篇相关文章,你希望这个专题列表页面不单单显示出这5个专题信息,在列表中每个单独的专题区域能够显示该专题下的文章.

实现原理:很显然从逻辑上来讲就是一个嵌套循环,大循环,循环的是有多少个专题,挨个输出,而在每个已经输出的专题中,再次运行一次小循环,来循环当前专题内的所有文章.

准备工作:当然理解了原理,有了思想之后,就好办了,先看看PHPCMS V9专题管理的数据库表.这里有两个表”v9_special“和”v9_special_content“,一看就知道了,前者是管理有多少个专题的,后者是存放这些专题的所有内容的.而两个表如何关联起来,由于我数据库和php学的都不好(大家都知道我之前做网页设计和前端的–!),所以代码也许略有不合理的地方.我之前尝试用系统默认的PC标签”pc:special“来写,但是未能实现,于是只好用我认为最暴力的方式,直接读取数据库的”pc:get sql=’ ‘“,接着观察两个表的字段.他们功能连接的方式是v9_specialidv9_special_contentspecialid.那么再循环过程中将这两个值关联起来就可以了.

实现方法:由于这个站展示在公司网站上了,所以就不写CSS出来了,大家只需要理解了,可以自己想怎么用就怎么用.我的代码是这样写的:

<div class="hifi_PubArea">
  <!--嵌套循环输出专题及专题内文章By小白-->
  {pc:get sql="SELECT * FROM v9_special ORDER BY createtime DESC" num="10" return="data"}
  <ul class="hifi_ListPage_MainList">
    {loop $data $r}
    {php $sid=$r['id']}
    <li>
      <div class="Title">
        <div class="LeftTitle">{if time()-$r['createtime'] <= 24*3600}<img src="{IMG_PATH}hifidiy/hifi010.gif" />{else}{/if}<a href="{$r['url']}">{$r['title']}</a><span>[<a href="{$CATEGORYS[$catid]['url']}">{$catname}</a>]</span></div>
        <div class="RightTitle"> <span class="author">{if $r['username']}{$r['username']}{else}hifidiy{/if}</span> </div>
      </div>
      <div class="Content">
        <div class="DivImg"><a href="{$r['url']}"><img src="{thumb($r['thumb'],165,95)}" alt="{$r['thumb']}" /></a></div>
        <div class="DivContent">{str_cut($r['description'],240)}[<a href="{$r['url']}">查看</a>]
          <div class="subArticle">
            {pc:get sql="SELECT * FROM v9_special_content WHERE specialid = '$sid'  ORDER BY updatetime ASC" num="4" return="data"}
            <ul>
              {loop $data $t}
              <li><a href="{$t['url']}">{$t['title']}</a></li>
              {/loop}
            </ul>
            {/pc}
          </div>
        </div>
      </div>
    </li>
    {/loop}
    <div class="bk"></div>
  </ul>
  <div id="pages">{$pages}</div>
  {/pc}
</div>

关键部位我已经做了高亮,方便大家查看.我顺便简单讲解一下, 第一行高亮表示从v9_special表获取所有字段内容,当然里面有个id字段的所有值也获取了,接下来将这个值赋值给sid,那么在第一个循环内,$sid==id,并继续执行下个循环(第二条高亮部分),从v9_special_content内获取所有字段的内容,当然这里加了个条件因为这个表内包含了不止一个专题的文章,因此我将条件设定为specialid==$sid,这样就不会出现文章调用问题了.至于数量顺序什么的就很简单了,这里不再熬述.

好了,其实写完这篇文章想想,好像很简单的一个自定义功能,但是为什么昨天晚上做了半天效果出不来呢,呵呵,还是编程语言基础不扎实,还得努力啊!

搭建latin1与utf-8的PHP环境想不乱码都不行的艰苦日子

好的,经过数天折磨,为了解决本地数据库乱码问题绞尽脑汁,费尽了精力.最终以失败告终,尝试了各种字符组合,安装了无数次phpcms系统.重装了无数次操作系统,用了各种版本IIS,各种mysql,各种php,无论是64位系统还是32位系统,配置了各种php.ini, my.ini……最终以失败告终.

我放弃了,心中怒喊一声I QUIT!……不过工作还得继续…我可怜巴巴的问很少在公司负责管理服务器的上级领导.结果说是,本地数据库表内汉字的确是乱码,我简直要疯了,原来这是一个不可能完成的MISSION…除了坑爹二字形容我的心情就是不免内心一阵抱怨…之前还总说我环境不对,所以会出现莫名的问题,我看跟环境没关系,IIS 5.1, 6.0, 7.5配置PHP可不是简单事情,浪费我多少青春,接下来我就要总结这些其实很傻的结论.越来越觉得这几天傻的出奇.

继上次写了一篇PHPCMS V9安装步骤详细介绍及说明(有效避免乱码产生),其实我开始觉得有时候有些乱码不可避免(虽然内心还是觉得latin1和utf-8应该有办法在数据库表内值进行转码).

首先不得不承认,如果没有什么特殊情况,请下载安装phpcms V9 UTF-8版,在安装过程中,选择创建UTF8的数据库,这一步做好了一般无论是环境整合包还是单独配置各个插件都不会出现乱码.

另一方面,如果没有特别需求,真的不建议用IIS搭建PHP服务器,可能个人感觉吧,总觉得那玩意就是玩ASP的,甚至ASP.NET都支持不好.而方便又轻松的选择是XAMPP, WAMP等等,当然或许用官方的PC_webServer也不错,不过他们都差不多.至于操作系统,普通应用比如说博客,企业站什么的,根本不在乎,别说什么linux好,数据库上千M了我看看执行效率是不是跟windows会有点点差距.

如果单独安装mysql进行配置的时候建议在选择字符集的那里选择utf-8,默认是选择了第一个,建议手动选择第三个,并在下拉菜单默认的latin1更改为utf-8.说到mysql配置,我不得不说我遇到的一个小问题,在mysql配置的最后一步,总会卡到未响应,只好强制关闭,原因很简单其实在之前的配置过程中,有一段英文是防火墙添加3306断口例外.勾上就没问题了.

当然,我的情况就是服务器上数据库创建时用的是latin1,而我有没有权限更改这个,我只有用phpcms备份数据库并将备份文件拷贝下来的权限.所以还原的时候本地数据库用latin1也会是乱码,如果本地数据库是utf-8,会产生更为糟糕的结果,数据无法导入.

至于怎么让本地服务器汉字恢复正常,我准备从备份的sql文件下手,研究一下…期待我的成果吧!

PHPCMS V9安装步骤详细介绍及说明(有效避免乱码产生)

前几天简单的介绍了本地搭建最新的WAMP 2.2d的本地环境办法,详情请看Apache创建本地域名的服务器(WAMP环境),今天倒是来说说搭建环境后在安装PHPCMS V9过程的详细步骤和一些注意事项.

首先搭建好本地环境之后将从官方网站下载PHPCMS V9安装包,将其解压,所有的程序在install_package,将这个目录复制到你WAMP所安装的目录内的www目录里,例如“e:/wamp/www/install_package/”,此时你可以将目录重命名成为你所需要的名字,例如whidy,那么这个phpcms系统的完整文件路径即:“e:/wamp/www/whidy/”,如果想搭配本地域名也可参见本文开头提到的那篇文章,里面有详细的方法.为了方便期间,假设我已经做好了本地的访问域名为w.net,那么尝试在浏览器内输入w.net,发现会报错(那是肯定的,系统不是这么装的==!~).

好的接下来,打开phpmyadmin页面,新建个数据库,名称例如whidy,而后面字符集,根据需求填写,假设是latin1_swedish_ci,点击创建,然后会提示创建完成.

接下来新开一个页面标签,正确的安装方法是输入“w.net/install”回车,好的这是安装界面出现如下步骤(为了节约空间容量我就不发全图了哈哈~):

前面两步直接pass,一般情况下WAMP的配置是没有问题的.第三步,选择全新安装,模块什么的按照默认的就行了.第四步,直接pass,第五步需要注意:

数据库主机:    w.net
数据库账号:    root    (默认情况下用户名)
数据库密码:                 (默认情况下不用填写)
数据库名称:    whidy
数据表前缀:    v9        (其实这个随便了,当然前缀必须有,不要太长.)
数据库字符集:    这里是重点,请选择你创建数据库时所选择字符集,比如此次选择的是latin1.
….(下面默认即可直到邮箱随便填一个)

点下一步,直至安装完成.正常情况下是没有问题的.(其实最后一步的时候会有个小错误,我每次也没看清,不过好像没有什么影响,所以无视它吧.)

那么现在可以通过w.net来访问本地的网站了,感觉不错吧,进入后台的方法也就是“w.net/admin.php”了默认账户密码都是phpcms.


以上是整个安装过程的说明,接下来我要说几个与服务器数据同步的注意事项,其实MYSQL字符集一直让人头疼,我也查过相关资料,据说搞这个的人是瑞典人,所以很多东西就很非主流,经常一个不小心让人出现莫名其妙的错误,例如数据库还原导入失败,数据库内数据呈现乱码等等.我经过多次测试总结如下:

在服务器上通过PHPCMS备份的数据库文件(备份时也要注意字符集的统一),全部在phpcms安装目录内caches文件夹内,通过FPT寻找准确的文件路径是
“你的ftp地址…..\caches\bakup\default”

将其下载下来放在本地的目录里,并进入后台进行还原,整个过程将自动完成.这时重新登录后台(用户密码将会被还原成线上服务器的了.),对整站的缓存更新一下,将站点设置设置成本地的即可.

当然我最近在操作过程中除了总结了以上方法之外,仍然有个问题未能解决,目前还在思索中,那就是在PHPMYADMIN内管理数据库的数据时,发现这个中文字符依然是乱码,我估计还是字符集的问题但是试过了很多办法还是没有弄好…仍在研究探索中.

Apache创建本地域名的服务器(WAMP环境)

最近在弄公司网站服务器上的数据库跟公司办公用的电脑的本地服务器的数据同步,可是弄得焦头烂额,直到现在还有个问题phpmyadmin里面的中文字符都成了乱码的问题没有解决,今天就说说搭本地服务器那点事.

安装好WAMP之后,这里以WampServer Version 2.2为例.安装到了E:\WAMP\
在www目录内有一个phpcms文件夹,存放着phpcms系统安装的所有文件,首先安装这个PHPCMS访问地址是http://localhost/phpcms/install,那么安装好后,本地通过访问http://localhost/phpcms/查看站点首页,而服务器上的却是顶级域名,明显会在本地测试上带来诸多不便.如果想改成浏览器内直接输入http://p.com即可访问的办法是什么样的呢?

首先修改本机的hosts文件,XP在C:\WINDOWS\system32\drivers\etc\hosts,,如下:
示例:
127.0.0.1 localhost
127.0.0.1 p.com

然后找到E:\wamp\bin\apache\Apache2.2.21\conf\extra\httpd-vhosts.conf,,添加:

<VirtualHost *:80>
ServerAdmin whidy@p.com
DocumentRoot “E:/wamp/www/phpcms/”
ServerName “p.com”
ErrorLog “E:/wamp/www/phpcms/error.log”
CustomLog “logs/dummy-host2.appservnetwork.com-access_log” common
</VirtualHost>

接着找到E:\wamp\bin\apache\Apache2.2.21\conf\httpd.conf
修改#LoadModule vhost_alias_module modules/mod_vhost_alias.so 去掉#,意思是启用apache的虚拟主机功能
以及#Include conf/extra/httpd-vhosts.conf 去掉#,意思是从conf/extra/httpd-vhosts.conf这个文件导入虚拟主机配置

最后重启服务器,试着在浏览器内输入p.com,看看是否成功了呢?

如果出现错误就继续修改E:\wamp\bin\apache\Apache2.2.21\conf\httpd.conf
此处的

Options FollowSymLinks ExecCGI Indexes
AllowOverride None
Order deny,allow
Deny from all
Satisfy all

更改为

Options FollowSymLinks ExecCGI Indexes
AllowOverride None
# Order deny,allow
# Deny from all
# Satisfy all

当然,如果你有多个站点需要用这样的方式管理,那么这里就需要通过添加端口达到目的.

例如本机IP为:192.168.1.88
那如何控制 80,81,82 来访问不同的文件目录,而达到多个站点同时访问的目的?

打开appserv的安装目录,找到httpd.conf文件,找到:
Listen 80
加入:

Listen 80
Listen 81
Listen 82

然后参照前文虚拟主机的设置方法.不同的是,这个后边的端口号按自己需求更改就成了(当然不要忘记修改hosts文件哟~).例如:

<VirtualHost *:81>
ServerAdmin whidy@whidy.net
DocumentRoot “d:/wampx64/www/whidy”
ServerName w.net
ErrorLog “logs/w-error.log”
CustomLog “logs/w-access.log” common
</VirtualHost>

好了今天就为大家讲解到这里,如有疑问,可留言或发至电邮与我讨论~

默认css字体大小单位及样式研究

我们在给网页字体进行CSS定义的时候,以前通常是使用像素来进行定义,然而,这已经是很古老的方式了,在现如今手机,平板,笔记本等各种不同分辨率设备普及的情况下,我们不只是用电脑浏览网页了,更多的时候或许已经是手持设备了,那么,就将面临一个问题,如何在如此多的不同分辨率下的设备将页面正常展现出来呢?

今天我们暂且不提框架自适应的问题,流体布局以后我熟练掌握后与大家分享,呵呵,就拿这个在定义字体大小方面来进行讨论,用px呢还是em,或是%?

首先需要声明的是在中文网站中,大部分规范是使用12px的汉字作为内容,14px加粗作为标题,当然有些h1,h2或许更大,一般字体用为黑体,而小标题和内容部分字体一般情况下是使用宋体的,这是中文站的一般标准.虽然近两年,随着显示器的不断变大,分辨率的增加,很多网站开始把14px当作最小字体了.然而,可能在很多情况下并不合适,例如手机访问,是不是字太大了等等一系列问题,那么有人可能会说通过终端判断返回不同的CSS,那么这种处理方式较为繁杂.怎么解决页面字体大小就成了一个需要思考的问题.

其实,如果经常访问英文网站的朋友应该不难发现一个特点,他们页面的字体都是用的em作为单位,比如:

body { font: normal 100% Helvetica, Arial, sans-serif; } /* 字体大小是页面默认大小的100%,即16像素. */
h1 { font-size: 1.5em; } /* h1的大小是默认大小的1.5倍,即24像素(24/16=1.5). */
small { font-size: 0.875em; } /*  small元素的大小是默认大小的0.875倍,即14像素(14/16=0.875). */

上面是个简单的CSS说明,在实际应用中,也是如此,给body内的font属性进行修改,就可以直接给整个页面字体大小进行缩放,这是一件十分方便的事情.以下我在做个简单的例子给大家直接预览.
先是body内100%时的效果:

http://jsfiddle.net/kingterrors/DEKSy/embedded/result,html,css/

PS:由于近日(2014年6月)jsfiddle无法正常访问,可能受内网影响,现将之前所有jsfiddle预览去除,不过你仍然可将以上地址拷贝到浏览器预览,或选择尝试以下代码:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Font size research</title>
<style type="text/css">
body {font: normal 100% Helvetica, Arial, sans-serif;}
h1 {font-size: 1.5em;}
small {font-size: 0.875em;}
.small {font-size: 14px; /* never changed */}
</style>
</head>
<body>
  <h1>This is a Header1</h1>
  <small>and this is small part</small>
  <p class="small">this is another small part with css style sheet that would never change!</p>
  <p>and how about this?</p>
  <p>This is a reseach by <em>Whidy</em></p>
</body>
</html>

然后是body为87.5%时的效果:

http://jsfiddle.net/kingterrors/K3Qbt/embedded/result,html,css/

PS:由于近日(2014年6月)jsfiddle无法正常访问,可能受内网影响,现将之前所有jsfiddle预览去除,不过你仍然可将以上地址拷贝到浏览器预览,或选择尝试以下代码:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Font size research</title>
<style type="text/css">
body {font: normal 87.5% Helvetica, Arial, sans-serif;}
h1 {font-size: 1.5em;}
small {font-size: 0.875em;}
.small {font-size: 14px; /* never changed */}
</style>
</head>
<body>
  <h1>This is a Header1</h1>
  <small>and this is small part</small>
  <p class="small">this is another small part with css style sheet that would never change!</p>
  <p>and how about this?</p>
  <p>This is a reseach by <em>Whidy</em></p>
</body>
</html>

大家可以通过两个例子看出来,不变的永远是用px做单位的元素(好像这句话很弱智…),不过显而易见的是,用em绝对是目前和将来的主流!(其实很多大网站普及很久了…z)


PS: 实际上在国内这种做法仍然未能很好应用,在wap端方向有部分网站开始使用,不知道国内是由于汉字原因呢还是什么,似乎网页设计字体标准仅仅由曾经的12px升级到14px而已(2014年5月17日)

主浏览器CSS HACK(IE6,IE7,IE8,IE9,Chrome,FF)

三月底,在匆匆找到工作后,立即开始了新的生活,在和程序员简单的交接后,开始了程序员的职业生涯.

昨天在对公司新做的专题页面制作工程中,我仔细的测试了IE6,IE7,IE8,Chrome,Firefox兼容性,发现没有问题,上传至服务器,刚发布完成,有同事说有个地方标题换行了,我走过去一看,的确是的,不过十分好奇的是IE9,居然会跟Chrome等浏览器解析效果不同.于是我回到我的办公桌查阅了一些关于IE9方面CSS HACK的文章.现在总结如下:

其实关于IE6,IE7,IE8的CSS HACK方式我想大家耳熟能详了,这里就不复述了,需要查看的话可以参考下面的CSS HACK文档,这里我主要说明一下IE9的做法.

你可以通过给某个样式前面加个:root,例如:

:root #element { font-size: 24px; } /* IE9 */

最后附上一篇摘自网络的关于CSS hack 文档:直接查看或下载(内含CSS HACK兼容表以及一些简单的兼容性技巧)

最后献上我经过反复测试的源码,大家也可以试试,不过注意css书写的顺序,免得出现问题.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ie9 css hack sample</title>
<style>
#element {
	font-size: 30px;
}
#element {
	font-weight: bold\9;/* IE */
}
#element {
	*font-size: 14px;/* IE6+7, doesn't work in IE8/9 as IE7 */
}
#element {
	_font-size: 10px;/* IE6 */
}
#element {
	font-size: 18px\0;/* IE8+9  */
}
:root #element {
	font-size: 24px;/* IE9 */
}
</style>
</head>

<body>
<div>
	<p id="element">IE font should be bolded</p>
	<p id="element">IE6 font size should be 10px</p>
	<p id="element">IE7 font size should be 14px</p>
	<p id="element">IE8 font size should be 18px</p>
	<p id="element">IE9 font size should be 24px</p>
	<p id="element">Other should be 30px</p>
	<em>This is a simple example for IE9 CSS Hack by <a href="/about">whidy</a>.</em>
</div>
</body>
</html>

http://jsfiddle.net/kingterrors/LQhEr/embedded/result,html,css/

当然有人会说,要用这么多不同的浏览器进行测试,尤其是IE9不支持XP,很麻烦,其实对于XP用户我推荐你们用Adobe的一个BrowserLab功能,之前也有过介绍,大家自己去看看,当然有装IE TESTER的朋友也可以测试多个不同的浏览器,不过XP依然不能用此软件测试IE9的效果,所以如何在XP下测试IE9的效果,那么只有用Adobe的BrowserLab,当然必须是在线的.如果大家有其他XP下测试IE9的CSS的办法欢迎发邮箱一起讨论.

最后上一张BrowserLab在线测试截图.

IE9CssHack和BrowserLab测试
IE9CssHack和BrowserLab测试

如有错误欢迎大家指正!~

PS: 随着时间的推移,对于IE9, IE10以及IE11的hack越来越不好用了,实际上,对于IE9以上的版本就不建议hack了.尽量按照WEB规范标准来做,一般是不会有错的.(2014年5月19日22:52:40)

PHPCMS V9 自定义列表分页功能实现方法

在用PHPCMS V9的过程中,可能一般人都不会在意分页功能,因为调用他实在是很简单,需要修改的估计也就是分页功能的样式了,拿系统自带的模板来看

<div id="pages" class="text-c">{$pages}</div>

我们可以修改class来自定义样式,当然有人会说,这个只能修改DIV的样式,无法修改里面的内容的样式,其实之需要看一下这段代码解析出来的实际代码就知道了,而这里的样式可以直接通过head部分内读取的CSS来代替,我就可以在CSS里面添加这样一段,为了方便测试,我直接写在head标签内:


.text-c {margin:10px 0;}
.text-c a {padding:5px;margin:0 8px;border:1px solid #ccc;background-color:#eee;}

经过测试是有效的.这里不在说这个了,重点是{$pages}输出的分页效果是固定的,如何让他能够满足自己的需求,比如最简单的系统默认是显示多少,用上一页,下一页来表示,如果我想改成向后翻,向前翻,怎么办?我经过查找相关资料,对这个功能进行整理得出结果与大家分享出来,涉及修改到的文件只有下面两个:

\phpcms\languages\zh-cn\system.lang.php
\phpcms\libs\functions\global.func.php
\ phpcms\lib\classes\template_cache.class.php

具体怎么弄,待我慢慢与大家讲解:

首先打开system.lang.php,找到29行LANG[‘next’] = ‘下一页’;处,你可以在下面插入自定义的内容,比如向后翻,向前翻,整理效果应该是这样的,添加完后保存可以关闭了.

$LANG['page_item'] = '条';
$LANG['previous'] = '上一页';
$LANG['next'] = '下一页';
$LANG['page_item_my'] = '篇';			//自定义
$LANG['previous_my'] = '向前翻';		//自定义
$LANG['next_my'] = '向后翻';				//自定义
......


然后打开global.func.php,搜索分页函数找到找到function pages...,在这个函数后复制原函数并修改添加自己想要定义的函数,例如:

//自定义分页函数
function pages_my($num, $curr_page, $perpage = 20, $urlrule = '', $array = array(),$setpages = 10) {
	if(defined('URLRULE') && $urlrule == '') {
		$urlrule = URLRULE;
		$array = $GLOBALS['URL_ARRAY'];
	} elseif($urlrule == '') {
		$urlrule = url_par('page={$page}');
	}
	$multipage = '';
	if($num > $perpage) {
		$page = $setpages+1;
		$offset = ceil($setpages/2-1);
		$pages = ceil($num / $perpage);
		if (defined('IN_ADMIN') && !defined('PAGES')) define('PAGES', $pages);
		$from = $curr_page - $offset;
		$to = $curr_page + $offset;
		$more = 0;
		if($page >= $pages) {
			$from = 2;
			$to = $pages-1;
		} else {
			if($from <= 1) {
				$to = $page-1;
				$from = 2;
			}  elseif($to >= $pages) {
				$from = $pages-($page-2);
				$to = $pages-1;
			}
			$more = 1;
		}
		$multipage .= '<a class="a1">'.$num.L('page_item_my').'</a>';
		if($curr_page>0) {
			$multipage .= ' <a href="'.pageurl($urlrule, $curr_page-1, $array).'" class="a1">'.L('previous_my').'</a>';
			if($curr_page==1) {
				$multipage .= ' <span>1</span>';
			} elseif($curr_page>6 && $more) {
				$multipage .= ' <a href="'.pageurl($urlrule, 1, $array).'">1</a>..';
			} else {
				$multipage .= ' <a href="'.pageurl($urlrule, 1, $array).'">1</a>';
			}
		}
		for($i = $from; $i <= $to; $i++) {
			if($i != $curr_page) {
				$multipage .= ' <a href="'.pageurl($urlrule, $i, $array).'">'.$i.'</a>';
			} else {
				$multipage .= ' <span>'.$i.'</span>';
			}
		}
		if($curr_page<$pages) {
			if($curr_page<$pages-5 && $more) {
				$multipage .= ' ..<a href="'.pageurl($urlrule, $pages, $array).'">'.$pages.'</a> <a href="'.pageurl($urlrule, $curr_page+1, $array).'" class="a1">'.L('next_my').'</a>';
			} else {
				$multipage .= ' <a href="'.pageurl($urlrule, $pages, $array).'">'.$pages.'</a> <a href="'.pageurl($urlrule, $curr_page+1, $array).'" class="a1">'.L('next_my').'</a>';
			}
		} elseif($curr_page==$pages) {
			$multipage .= ' <span>'.$pages.'</span> <a href="'.pageurl($urlrule, $curr_page, $array).'" class="a1">'.L('next_my').'</a>';
		} else {
			$multipage .= ' <a href="'.pageurl($urlrule, $pages, $array).'">'.$pages.'</a> <a href="'.pageurl($urlrule, $curr_page+1, $array).'" class="a1">'.L('next_my').'</a>';
		}
	}
	return $multipage;
}

最后打开template_cache.class.php,找到

$str .= '$pages = pages($'.$op.'_total, $page, $pagesize, $urlrule);';

处,在下面添加:

$str .= '$pages_my= pages_my($'.$op.'_total, $page, $pagesize, $urlrule);';

当然如果使用过程中,发现SQL分页的不能正常使用,再在

$str .= '$r = $get_db->sql_query("'.$sql.'");$s = $get_db->fetch_next();$pages=pages($s[\'count\'], $page, $pagesize, $urlrule);';

添加这段代码:

$str .= '$r = $get_db->sql_query("'.$sql.'");$s = $get_db->fetch_next();$pages_my=pages_my($s[\'count\'], $page, $pagesize, $urlrule);';

至此大功告成,接下来,你只用在你想要的模板的分页出使用就可以了,例如开头的格式

<div id="pages" class="myListPage">{$pages_my}</div>

并写上对应的CSS就可以了.

列表中最后一个元素样式清除修改方法(jQuery)

我们在做动态网站的时候,当遇到导航条的栏目列表或某区域内文章列表等含有大量重复内容区域时,通常会用循环将他们输出,而他们节点的样式都是相同的,比如下边距,外边框的分隔样式,通过循环输出的结果就是最后一个节点依然保留着所有的样式我们是不希望他有下边距或者外边框.

例如: 导航上每个栏目标题(li)右侧可能会用竖线分隔每个栏目标题,于是最后一个栏目右侧也出现了不想要的竖线,但是这些同级的li都是循环出来的 ,我们无法单独给最后一个元素添加特殊的样式,本来有个很简单的方法,那就是使用CSS3的:first和:last选择器,但是当IE6和IE7不支持:first和:last选择器的,有个简单的方法,通过Js(本文用的jQuery)去除或修改列表或循环内容的第一个和最后一个节点的样式,可以兼容所有浏览器,是比较方便的,其实用js可以轻松实现,但是我后来发现,jQuery来处理或许更加轻松些,也是正好我最近在学习jQuery,的确很好用.在body内最后加上一小段就可以了,比如下面这个简单的例子:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>LastChildStyleRemove</title>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<style>
#mainContent {background-color:#eee;}
#mainContent ul.nav {list-style:none;font-size:12px;}
#mainContent ul.nav li {float:left;padding:5px 15px;border-left:1px solid #fff;border-right:1px solid #ddd;}
#mainContent ul.nav li a {color:#666;text-decoration:none;}
</style>
</head>
<body>
	<div id="mainContent">
		<ul class="nav">
			<li><a href="#">导航一</a></li>
			<li><a href="#">导航二</a></li>
			<li><a href="#">导航三</a></li>
			<li><a href="#">导航四</a></li>
		</ul>
		<div style="clear:both;"></div>
	</div>
</body>
<script>
	$("#mainContent ul.nav li:first-child").css("border-left", "none")
	$("#mainContent ul.nav li:last-child").css("border-right", "none")
</script>
</html>

这个例子除了用到最后一个元素样式清除,也用了首个元素样式清除,这个很好理解,这是两个方法,其实只用到一个函数css( propertyName , value  ),而关于元素选择器可以查看jQuery的例子::first-child Selector:last-child Selector.上面的例子也很简单清晰易懂…

当然我也在网上看到有这样的javascript写法,不过相对较为复杂,内容如下:

<script language="javascript" type="text/javascript">
  function addClassName(tag,classname){
   if(!tag.className){
    tag.className=classname;
   }else{
    tag.className+=" "+classname;
   }
  }

  function addFirstChild(){
   var olitems=document.getElementsByTagName("ol");
   var ulitems=document.getElementsByTagName("ul");

   for(var i=0;i<olitems.length;i++){
    addClassName(olitems[i].getElementsByTagName("li")["0"],"first-child");
   }
   for(var i=0;i<ulitems.length;i++){
    addClassName(ulitems[i].getElementsByTagName("li")["0"],"first-child");
   }
  }
  function addLastChild(){
   var olitems=document.getElementsByTagName("ol");
   var ulitems=document.getElementsByTagName("ul");

   for(var i=0;i<olitems.length;i++){
    addClassName(olitems[i].getElementsByTagName("li")[olitems[i].children.length-1],"last-child");
   }
   for(var i=0;i<ulitems.length;i++){
    addClassName(ulitems[i].getElementsByTagName("li")[ulitems[i].children.length-1],"last-child");
   }
  }

  if(document.all && !window.opera){
   window.onload=addFirstChild;
   window.onload=addLastChild;
  }
 </script>

如果有兴趣可以尝试,至此,大家也发现实际上用jQuery并不困难,用好就有讲究了,不过最好还是打好js的基础,下次我将介绍另外一个简单的效果,关于用jQuery控制下拉菜单悬浮,我用了一个很笨的嵌套方法,有空我在写一下.今天就写到这里希望大家能有所收获.


PS: 其实这个例子就是简单介绍了jQuery的两个用法,如果动态脚本支持判断首尾元素的话,其实直接在HTML内写个判断(例如:phpcms文章列表循环不同样式制作方法),给首尾元素加个class=”first-tag”和class=”last-tag”之类的样式也是不错的选择,实际上现在已经不推荐这样的写法,因为你会发现有很多冗余的小代码,维护十分不方便,这里也就是举一反三,大家视情况来写吧( update: 2014年5月17日 )