Archive for 十一月, 2009

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]

PHPCMS2008提示"Duplicate entry '65535' for key 1"错误的解决方法

这是一个一般情况下不会出现的问题,因为通常一个站点的关键词基数都大65535这个数值以下,不过如果网站数据较大,比如达到了5W或者更高时,关键词的数量也会同步上升,这时问题就出现了!
RT,发表或者修改文章时就会提示上面的错误"Duplicate entry '65535' for key 1".

好了,关键在于怎么解决对吧!
修改字段类型,用MYSQL工具或者直接进入PHPMYADMIN,查找到表phpcms_keyword中的字段"tagid",这个字段默认的类型为SMALLINT,默认长度为5.那么我现在将他的字段类型修改为MEDIUMINT,长度修改为8.
如果后台开启了SQL执行的话,可以直接执行以下语句:
alter table phpcms_keyword modify column tagid mediumint(8) unsigned NOT NULL auto_increment;
修改好后再发表或者修改文章时就不会出现标题中的错误提示了.

查了一下,MEDIUMINT是一个中等大小整数,有符号的范围是-8388608到8388607,无符号的范围是0到16777215,占3字节.
另外,你还可以将这个字段类型直接设置为INT(10),这样表基数将能支持更大值.

程序修改此BUG方案:
install/main/下面phpcms.sql, phpcms_db.sql, phpcms_speed.sql中相应参数都要重新修改.
分别打开这个三表,搜索到tagid,将后面的smallint(5)改为mediumint(8)即可!

做地区门户网站做大后的发展方向?

最近又在思考这个问题了,我们自己做的地区门户主要是指那些二三线城市,当然如果可以的话,一级城市也可以操作的!

做地区门户的前途在哪里?
1.在发展中不断打基础,(找风投)最后公司化运营,自己当老板.
2.做大后被其他公司看中收购掉,你去任职"总监",或者入股.
3.不找风投,也不被收购,就是自个儿运作(难度不小).

上面三个结果,多数人可能会选择第1条.选择这一条的人方向很明确,思路会很清晰,计划也也周密.不过风险也会比较大.毕竟,做大不难,如何持续做大并做强就很重要了.

也会有些人选择第二项吧,这类朋友其实也是明智的,这实际上是转移了风险,网站被收购应该也可以获得一定收益,但这个网站对你的收益也就仅仅这一次而已了.建议在有个好主并且收购重要任务不错的情况下再选这一条吧.

选第三条的应该不多,除非他仅仅是做这个网站来打发自己时间.

让百度天天快照你站的几个方法

根据liuxq(http://www.liuxq.cn)的经验来说,以下几种方法对于提升百度快照日期帮助会比较大.
1.坚持更新,最好是原创性的文章更新,百度会更喜欢.
有些朋友说,我天天更新也不见百度快照上来,干脆就不更新了!这可是很不理智的做法!天天更新务必坚持,百度快照不上来的原因可能是以下几个方面.
2.和那些百度天天快照的网站做链接.
这个是除了天天更新网站内容外的最有效办法了,所以liuxq感觉,做网站的友情链接最重要的并不是看谷歌的PR值,而要看百度的收录值和快照日期了.
3.做一些实用的外链.
外链要做得有生命,不要今天刚做好,明天就被人家网站给删除了,最好到一些权重较高的网站做外链接,比如说软文什么的,可以让更多的人帮你转载,别人引用的话就是一条有用的外链了.
对了,论坛签名效果也可以哦.

差不多就这上面三条,希望liuxq的总结能够对你有所帮助!

SEO优化之title最佳写法

Title的写法对于一个网页来说太重要了,对于大型门户网站同样如此!
winliuxq(http://www.liuxq.cn)根据自己建站积累下来的经验,对于Title这个HTML标记的写法给出以下几点意见,当时这全本人一己之言,能不能优化还真看百度的脸色了.呵呵.
注意:Title中包含的文字尽量在30个汉字以内.

网站首页Title:网站名称-由关键词组成的一个句子
例:热情美女-提供最新的美女图片大全供您欣赏!看美女真的可以长寿!!!

栏目页Title:栏目名称-两三个关键词-网站名称
例:高考辅导-复习资料,试题下载,大纲解析-中国高考网

内容页Title:标题-两个关键词-栏目名称
例:2010年中国首架航天飞机长征号成功发身升空-中国航天飞机,长征号-国内新闻

Title的优化还有很多种,肯定不止这上面说的啦,重在实践,有这方面心得的朋友可以联系我一起交流SEO优化.