CMS案例:phpcms v9把分类文件伪静态目录例子

《CMS案例:PHPcms v9把分类文件伪静态目录例子》要点:
本文介绍了CMS案例:PHPcms v9把分类文件伪静态目录例子,希望对您有用。如果有疑问,可以联系我们。

导读:目录伪静态在PHPcmsv9中是不支持了,如果我们希望有这种效果是需要自行进行二次开发了,下面我们一起来看看具体的配置方法.URL规则部分,...
目录伪静态在PHPcmsv9中是不支持了,下面我们一起来看看具体的配置方法.
URL规则部分,使用PHPcms的大多是知道的,就不再赘述.如果需要支持自定义文件名的,需要去看看PHPcms v9自定义HTML文件名一文.下面就着重将Web服务器重写链接这一项.
PHPcms v9怎么目录式伪静态:
首先看urlrewrite的规则,这个是Nginx下的,其它环境下的规则自己转换下.

 CMS案例

  1. rewrite ^/([a-z]+)/$ /index.PHP?m=content&c=index&a=lists&catdir=$1 last;   
  2. rewrite ^/([a-z]+)/index_(\d+)\.html$ /index.PHP?m=content&c=index&a=lists&catdir=$1&page=$2 last;   
  3. rewrite ^/([a-z]+)/([a-z0-9-]+)\.html$ /index.PHP?m=content&c=index&a=show&catdir=$1&prefix=$2 last;   
  4. rewrite ^/([a-z]+)/([a-z0-9-]+)_(\d+)\.html$ /index.PHP?m=content&c=index&a=show&catdir=$1&prefix=$2&page=$3 last;   

这个Nginx规则就是把后面的链接重写为前面的链接形式的.所以接下来需要做的就是让后面的链接能够访问到正确的页面.PHPcms v9认是无法访问到正确页面的,因为缺少必要的参数.下面就对PHPcms v9进行修改.CMS案例

1、打开PHPcms\modules\content目录下的index.PHP找到 public function lists() {,将$catid = intval($_GET['catid']);替换成:
 CMS案例

  1. if(isset ($_GET['catid'])){   
  2.    $catid = intval($_GET['catid']);   
  3. }else{   
  4.    $catid=$this->_getCategoryId($_GET['catdir']);   
  5. }   
  6.    
  7. //并且在最后的}?> 前添加:   
  8.    
  9. private function _getCategoryId($catdir){   
  10.     if(!strpos($catdir,'/')) {   
  11.         $dirname = $catdir;   
  12.     }else {   
  13.         $dirname = end(explode('/',$catdir));   
  14.     }//xiariboke.com   
  15.         $this->category_db = pc_base::load_model('category_model');   
  16.         $result = $this->category_db->get_one(array('catdir'=>$dirname));   
  17.     return $result['catid'];   
  18.     }   

这段代码的作用就是判断参数是否catdir,栏目自定义目录名,如果是目录名则根据目录名得到对应的catid,从而顺利得到栏目页.理解了自定义目录的伪静态方法之后,自定义文件名的伪静态也就可以类似解决.CMS案例

2、打开PHPcms\modules\content目录下的index.PHP找到 public function show() {,
 CMS案例

  1. //将:   
  2. $catid = intval($_GET['catid']);   
  3. $id = intval($_GET['id']);   
  4. //替换成:   
  5. if(isset ($_GET['catid'])){   
  6.     $catid = intval($_GET['catid']);   
  7. }else{   
  8.     $catid=$this->_getCategoryId($_GET['catdir']);   
  9. }   
  10. if(isset($_GET['id'])){   
  11.     $id = intval($_GET['id']);   
  12. }else{   
  13.     $id = $this->_getPrefixId($_GET['catdir'],$_GET['prefix']);   
  14. }   

跟上面一样,还需要加上判断出文章id的函数,函数如下:
 CMS案例

  1. private function _getPrefixId($catdir,$prefix){   
  2.     if(!strpos($catdir,'/')) {   
  3.         $dirname = $catdir;   
  4.     }else {   
  5.         $dirname = end(explode('/',$catdir));   
  6.     }   
  7.     $this->category_db = pc_base::load_model('category_model');   
  8.     $result = $this->category_db->get_one(array('catdir'=>$dirname));   
  9.     $catid = $result['catid'];   
  10.     $siteids = getcache('category_content','commons');   
  11.     $siteid = $siteids[$catid];   
  12.     $CATEGORYS = getcache('category_content_'.$siteid,'commons');   
  13.     if(!isset($CATEGORYS[$catid]) || $CATEGORYS[$catid]['type']!=0) showmessage(L('information_does_not_exist'),'blank');   
  14.     $this->category = $CAT = $CATEGORYS[$catid];   
  15.     $this->category_setting = $CAT['setting'] = string2array($this->category['setting']);   
  16.     $siteid = $GLOBALS['siteid'] = $CAT['siteid'];   
  17.     $MODEL = getcache('model','commons');   
  18.     $modelid = $CAT['modelid'];   
  19.     $tablename = $this->db->table_name = $this->db->db_tablepre.$MODEL[$modelid]['tablename'];   
  20.     $result = $this->db->get_one(array('prefix'=>$prefix));   
  21.     if(emptyempty($result)){   
  22.         $result = $this->db->get_one(array('id'=>$prefix));   
  23.     }   
  24.     return $result['id'];   
  25. }   

到这里之后,就可以通过自定义目录加自定义文件名的形式访问了.其他一些细节的地方,就不再赘述.CMS案例

相关文章

1、想好字段名! 这里取一个test 商品发布模板:post_trad...
一、后台 → 全局 → 关闭站点(为了不影响数据库备...
<?php /** [Discuz!] (C) 2001-2099 Comsenz Inc. con...
今天给大家讲讲 如何把已经切割好的html页面或者模仿的页面转...
打开网站根目录下/template/default/common header_common....
打开网站根目录/source/module/portal/portal_list.php搜 c...