Archive for the 'CMS|CSS' Category


PHPCMS2008内容页分页显示全部的解决办法

问题表现描述以及解决后的显示图示见以下链接:
http://www.liuxq.cn/2009/12/478/

下面直接提供liuxq[www.liuxq.cn]的解决办法,很简单,只要修改一下/include/url.class.php这个文件即可.

打开这个文件,找到并将" function show_pages($page, $pagenumber, $pageurls) "这一行到" function update($contentid,$url) "之间的代码全部替换成以下代码:

{
$pages = '';
$multipage .= '<span>共'.$pagenumber.'页</span>';
$n = 9;//每页显示的页码数
$i = 0;
if ($pagenumber <= $n)
{
$start_page = 1;
$end_page = $pagenumber;
}
else
{
$i = floor($page/$n);
if($page >= 5)
{
if($page+2 >= $pagenumber)
{
$start_page = $page - 6;
}
else{
$start_page = $page - 4;
}
$end_page = ($page + 4) >= $pagenumber ? $pagenumber : $page + 4;
}
else
{
$start_page = 1;
$end_page = 8 >= $pagenumber ? $pagenumber : 8;
}
}
for($i=$start_page; $i<=$end_page; $i++)
{
$pages .= $page == $i ? '<span>'.$i.'</span>' : '<a href="'.$pageurls[$i][1].'" target="_self">'.$i.'</a>';
}
$firstpage =min($page, 1);
$lastpage =max($page,$pagenumber);
$prepage = max($page-1, 1);
$nextpage = min($page+1, $pagenumber);
if($page>1 && $page < $pagenumber)
{
$pagelist=$multipage.'<a href="'.$pageurls[$firstpage][1].'" target="_self">首页</a>'.'<a href="'.$pageurls[$prepage][1].'" target="_self">上一页</a>'.$pages.'<a href="'.$pageurls[$nextpage][1].'" target="_self">下一页</a><a href="'.$pageurls[$lastpage][1].'" target="_self">尾页</a>';
}
elseif($page+1 > $pagenumber)
{
$pagelist=$multipage.'<a href="'.$pageurls[$firstpage][1].'" target="_self">首页</a>'.'<a href="'.$pageurls[$prepage][1].'" target="_self">上一页</a>'.$pages;
}
else
{
$pagelist=$multipage.$pages.'<a href="'.$pageurls[$nextpage][1].'" target="_self">下一页</a><a href="'.$pageurls[$lastpage][1].'" target="_self">尾页</a>';
}
return $pagelist;
}
//重新改造结束 www.liuxq.cn

改造完成,如果是动态URL的话,前台刷新一下页面就能重新看到新的分页样式了,当然,分页的CSS样式需要自己写下了.

PHPCMS2008点击内容中的图片自动跳转到下一页 最终代码放送

效果描述:
只对有分页的内容执行操作,即点击内容中的,图片进入下一页,并且点击内容最后一页时会跳转到当前所属的栏目首页.
话不多说,直接入主题.贴winliuxq[www.liuxq.cn]的改造代码:

{if $pagenumber > 1}
<?php
$nextpage = $page+1;
if(!$pageurls[$nextpage][1])
{
$nurl='/'.$C[url];
}
else
{
$nurl='/'.$pageurls[$nextpage][1];
}
$content1 = str_replace("<img","<img alt='$title($page)' onclick=window.open('$nurl','_self')",$content);
?>
{$content1}
{else}
{$content}
{/if}

给每个文章的浏览次数都加上100,适用于PHPCMS2008

建站后,刚刚发布的文章由于浏览的人还比较少,导致了其浏览次数不高,这样,其他用户刚进来看到后也不会太认真去看,因为用户可能会想,这样一个没有"人气"的文章对于他来说也未必有浏览价值!那么,如何给每个文章的浏览资料在原有基础上都加上100呢.下面就说下方法:

打开根目录里的cont.php,将倒数第三行的<?=$hits?>改为<?=$hits+100?>就可以了,是不是特别简单呢!

有些用户在想着在模板里的<span id="hits">0</span>前面加个100,这样导致的问题就是真实浏览资料前加了一个"100",显然这种做法会有弊端,而且扫尾影响到后期的工作!

PHPCMS2008内容页分页显示全部的解决办法

问题描述:
存在于PHPCMS2008版本中,内容如果有10个分页,前台就显示10个分页,如果内容有20或者30甚至更多的分页时,内容页的分页也全部显示出来,这就极易导致内容页面"不整洁".
看了一下PHPCMS的代码,对内容页分页进行了些许改造,效果如图:

新内容分页1
新内容分页2
新内容分页3

择日发布代码.

PHPCMS2008的评论列表中轻松加入用户的头像

有两个办法,一是使用GET标签获取,不过代码写下来会繁锁(如果用户上传了头像的话,还要判断附件那个表).二是直接使用PHP定义$avatar参数.下面winliuxq(liuxq.cn)就说下第二种方法,比较简单!

在评论列表模板中的{$comment['content']}上面加入以下代码:
<?php
$memberinfo['avatar'] = avatar($comment['userid']);
@extract(new_htmlspecialchars($memberinfo));
?>
<a href="{SITE_URL}space/?userid={$comment[userid]}" target="_blank"><img src="{$avatar}" width="60" border="0" alt="{$comment[username]}头像" /></a>

添加好后保存,刷新评论列表的前台,OK啦!是不是特别简单呢!至于栏目问题,就得靠你自己去调整啦!

除此之外,你还可以在这里使用thumb参数给头像进行切割处理,如:{thumb($avatar,60,60)}

下面再来张效果图:
QQ截图未命名.jpg

给PHPCMS2008的个人空间主页增加用户留言(评论)

这是一个不错的想法呢!相信大部分"正规站"的朋友都想用到,但是按照目前PHPCMS2008程序而言,直接将评论框相关代码加到个人空间主页的模板文件(space/index.html)里,显然不能解决问题.这么做的话,全站用户的个人空间留言都是一个样了!

本篇作者liuxq(http://www.liuxq.cn)即给大家提供一个不需要修改任何程序代码便可以解决个人空间用户评论的方案.话不多说,讲重点.

1.将评论框相关的代码加到space/index.html(模板自己修改,直接加进去可能不太好看哦),在<input type="hidden" name="keyid" value="{$keyid}" />的上面加以下代码:
<?php
$keyid=$userid;
?>
加好后算是完成一半工作了.
注释:加此句主要是重新给变量$keyid赋值.默认$keyid的值是类似于'phpcms-content-title-'.$contentid这种形式.经过上面自定义的PHP程工处理后,$keyid在此时就直接变成$userid(用户ID)了!

2.调用评论,这个比较简单了,直接* from phpcms_comment where keyid='$userid' *,当然这得用在个人主页的模板里面,至于分页问题,你直接在get最后写上page="$page"即可,比如:
{get sql="select * from phpcms_comment where keyid='$userid' and status='1' order by addtime desc" rows="10" page="$page"}
*****
{/get}
{$page}
注释,分页也是直接在个人主页上面来的,大家可以通过利用$page这个变量在这里的评论分页时将不必要的"信息"排除掉,比如:{if !$page}*******{/if}. 相信大家还是可以理解的吧!

好了,今天就说到这里吧.最近一段时间来,我都会比较忙,白天QQ在线的时间可能会比较少,大家有问题的话仍然可以在我QQ上留言,晚上我在线时会一一回复大家的,请见谅!

PHPCMS2008 在网址URL中给参数赋值

有些朋友看到这个标题可能理解到了.
没错,就是用于查询用的,当然前提是网站为动态或者伪静态条件下方有用!
好了,说下案例吧!(网址为动态)

就拿我们的新闻模型来说事吧,比方我们在后台为新闻模型建立了5个类别(typeid),然后在模型里启用这个字段.大家在发布文章就可以给文章选择类别!
程序默认在栏目页面调用时是将所有本栏目的文章列出来,如果要在本栏目页面上直接查询某个类别下的文章该怎么办呢?
这时候,问题就来了,直入解决办法!

我们先将新闻模型所属的类别都列出来,直接GET查询phpcms_type这个表,注意判断新闻模型的参数是modelid,新闻模型的ID为1,这里只要select typeid,name即可!
直接贴上winliuxq的GET代码:
{get select typeid,name from phpcms_type where modelid=1 order by typeid asc" rows="100"}
<a href="{$url}?typeid={$r[typeid]}">{$r[name]}</a>
{/get}

大家注意看上面的href="(*)"中的参数,没错,这里就是在给typeid赋值.该说下使用方法了.
我们可以在模板里面直接写php判断typeid是否为真!如下:
<?php
if($typeid)
{
$gettypeid=' and typeid='.typeid ;
}
else
{
$gettypeid=' ';
}
?>

上面这类很重要,他可以直接从URL中来判断并重新给$gettypeid这个我们自定义的临时参数赋值,可能我说有点晕了.呵呵!
接下,就是GET栏目的列表了!直接贴上winliuxq[http://www.liuxq.cn]的GET代码:
{get sql="select url,title from phpcms_content where catid='$catid' $gettypeid order by inputtime desc" rows="10" page="$page"}
{$r[title]}<br />
{/get}

大家注意看上面一段的GET代码有何不同.没错,新增了一个$gettypeid, 这个临时参数就是用来查询文章类别的.另外这里的GET代码中rows后面不要再加$catid="$catid"了,因为在where中已经有判断了,再加的话会影响到分页标签$pages, 一时半会儿你可能不太理解,不过你自己实践时可以试试加上会出现什么意外吧!

通常这个例子,大家可以很方便地利用URL赋值的方法在同个页面上查询文章了,包括但不限于根据时间,类别,地点或者自定义的参数等来查询和调用信息,同时还可以根据用户选择的查询条数来而页页,或者用户选择的排序方式来调用信息.这个信息可不仅仅是文章哦,你还可以查询图片,下载信息,视频,会员等等.

强大吧!

解决PHPCMS的自定义会员类型问题

注意:这里所要解决的会员类型并不是指系统默认的会员模型,这与会员模型是两个不同的问题!

解决问题前,我先来打个比方,大家对照看下此文是否会对你有帮助!
1.管理员后台>相关设置>类别设置,添加若干个类别(如工人/学生/其他等),并指定所属模块为"普通会员"(供用户在注册普通会员时选择的.
2.在用户注册的模板页面添加一个参数memberinfo[typeid](具体做法参照其他参数设置,这里的typeid用select来调用,值可以用GET标签来有条件地调出来.
3.提示注册成功后,你会发现typeid这个值无从查起,原因就是因为程序在设计时疏忽了这一点,导致这个值不会像地区areaid一样会传递并写进数据库.

winliuxq提供的解决方案:
进数据库添加一个字段,先进入PHPMYADMIN或者其他数据管理工具,然后进入表phpcms_member_info,在最后新增一个字段typeid,字段的各项设置可以参照phpcms_content中相应设置.

试试重新注册,你会发现phpcms_member_info中有typeid的值了!这样的话,我们在前台就可以方便地根据typeid的值来调用用户的会员类型(不是所属模型)了.

在解决此问题的期间,winliuxq同样发现一个问题,就是在初始会员注册时,数据只能写进phpcms_member,phpcms_member_cache,phpcms_mebmer_info这三个表中,默认情况下写不进会员专属的模型数据,必须要进入第二步时才能写入数据,例如用户的生日,QQ,手机等这类信息.临时解决的话只能将相关字段添加到phpcms_member_info这个表中了.

PHPCMS2008急需解决的新BUG

出现此BUG的前提:
管理员从后台关闭了会员注册时的"注册选择模型"选项.

问题表现:
1.注册后的会员不会直接进入"登陆状态",而是跳转到首页,需要另行登陆一下.
2.进入会员中心后不能修改会员信息.提示MYSQL出错,关键是MYSQL查询的表就不对头,成了phpcms_member_.
可想而知,去查询一个不存在的表肯定是会出现错误的!
不仅如此,如果你进入会员专属模型的数据表的话,你会发现表里面都没有这个用户ID.所以修改账号信息时就提示出错了!

目前官方尚未提供解决方案,BUG已经提交官方,希望官方下次补丁中修复.

winliuxq给大家的解决方案如下:
修改member/register.html模板文件,找到 <input name="action" type="hidden" value="register" /> , 修改为 <input name="action" type="hidden" value="{$M[url]}register.php{if $modelid}?modelid={$modelid}{else}?modelid=10{/if}" />
修改后,注册会员的信息就可以正常写入到会员模型数据表中,正常的用户信息修改就不会存在问题了!
不过,winliuxq提供的方案目前只能临时解决用户注册后修改账户信息的问题,但是登陆状态问题仍然有待完善!

.htaccess自定义404错误页面等设置技巧(Apache PHP环境下)

  httpd.conf对目录开启
  AllowOverride All
  然后在目录里放一个.htaccess(.htaccess)
  在里面写
  errorDocument 404 /404.html(这个的内容根据你的情况改写)
  可是有时候当你用IE浏览的时候会发现,这玩意压根就不跳转
  关键的地方就是这个html
  如果404.html的小于512字节的话,那么IE会认为这个错误页面不够“友好”,会忽视掉的,现在分享出来,遇到相同问题的朋友就知道原因了。

  附:
  .htaccess文件(或者"分布式配置文件"提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。

  - 子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。
  - .htaccess必须以ASCII模式上传,最好将其权限设置为644。
  错误文档的定位
  常用的客户端请求错误返回代码:
  401 Authorization Required
  403 Forbidden
  404 Not Found
  405 Method Not Allowed
  408 Request Timed Out
  411 Content Length Required
  412 Precondition Failed
  413 Request Entity Too Long
  414 Request URI Too Long
  415 Unsupported Media Type
  常见的服务器错误返回代码:
  500 Internal Server Error
  用户可以利用.htaccess指定自己事先制作好的错误提醒页面。一般情况下,人们可以专门设立一个目录,例如errors放置这些页面。然后再.htaccess中,加入如下的指令:
  ErrorDocument 404 /errors/notfound.html
  ErrorDocument 500 /errors/internalerror.html
  一条指令一行。上述第一条指令的意思是对于404,也就是没有找到所需要的文档的时候得显示页面为/errors目录下的notfound.html页面。不难看出语法格式为:
  ErrorDocument 错误代码 /目录名/文件名.扩展名
  如果所需要提示的信息很少的话,不必专门制作页面,直接在指令中使用HTML号了,例如下面这个例子:
  ErrorDocument 401 "
  你没有权限访问该页面,请放弃!
  "
  文档访问的密码保护
  要利用.htaccess对某个目录下的文档设定访问用户和对应的密码,首先要做的是生成一个.htpasswd的文本文档,例如:
  zheng:y4E7Ep8e7EYV
  这里密码经过加密,用户可以自己找些工具将密码加密成.htaccess支持的编码。该文档最好不要放在www目录下,建议放在www根目录文档之外,这样更为安全些。
  有了授权用户文档,可以在.htaccess中加入如下指令了:
  AuthUserFile .htpasswd的服务器目录
  AuthGroupFile /dev/null (需要授权访问的目录)
  AuthName EnterPassword
  AuthType Basic (授权类型)
  require user wsabstract (允许访问的用户,如果希望表中所有用户都允许,可以使用 require valid-user)
  注,括号部分为学习时候自己添加的注释
  拒绝来自某个IP的访问
  如果我不想某个政府部门访问到我的站点的内容,那可以通过.htaccess中加入该部门的IP而将它们拒绝在外。
  例如:
  order allow,deny
  deny from 210.10.56.32
  deny from 219.5.45.
  allow from all
  第二行拒绝某个IP,第三行拒绝某个IP段,也就是219.5.45.0~219.2.45.255
  想要拒绝所有人?用deny from all好了。不止用IP,也可以用域名来设定。
  保护.htaccess文档
  在使用.htaccess来设置目录的密码保护时,它包含了密码文件的路径。从安全考虑,有必要把.htaccess也保护起来,不让别人看到其中的内容。虽然可以用其他方式做到这点,比如文档的权限。不过,.htaccess本身也能做到,只需加入如下的指令:
  order allow,deny
  deny from all
  URL转向
  我们可能对网站进行重新规划,将文档进行了迁移,或者更改了目录。这时候,来自搜索引擎或者其他网站链接过来的访问就可能出错。这种情况下,可以通过如下指令来完成旧的URL自动转向到新的地址:
  Redirect /旧目录/旧文档名 新文档的地址
  或者整个目录的转向:
  Redirect 旧目录 新目录
  改变缺省的首页文件
  一般情况下缺省的首页文件名有default、index等。不过,有些时候目录中没有缺省文件,而是某个特定的文件名,比如在pmwiki中是pmwiki.php。这种情况下,要用户记住文件名来访问很麻烦。在.htaccess中可以轻易的设置新的缺省文件名:
  DirectoryIndex 新的缺省文件名
  也可以列出多个,顺序表明它们之间的优先级别,例如:
  DirectoryIndex filename.html index.cgi index.pl default.htm
  防止盗链
  如果不喜欢别人在他们的网页上连接自己的图片、文档的话,也可以通过htaccess的指令来做到。
  所需要的指令如下:
  RewriteEngine on
  RewriteCond % !^$
  RewriteCond % !^http://(www.)?liuxq.cn...*$ [NC]
  RewriteRule .(gif|jpg)$ - [F]
  如果觉得让别人的页面开个天窗不好看,那可以用一张图片来代替:
  RewriteEngine on
  RewriteCond % !^$
  RewriteCond % !^http://(www.)?liuxq.cn...*$ [NC]
  RewriteRule .(gif|jpg)$ http://www.liuxq.cn/替代图片文件名 [R,L]

« 上一页下一页 »