PHPCMS X

PHPCMS设置目录式伪静态的修改方法:
PHPCMS自带的伪静态规则比较死板,例如list-1-1 html和show-1-1 html的形式,很多时候我们希望使用目录式伪静态,就例如www phpcmsx com一样的伪静态,本人介绍如何设置。

PHPCMS设置目录式伪静态的修改方法
PHPCMS自带的伪静态规则比较死板,例如list-1-1 html和show-1-1 html的形式,很多时候我们希望使用目录式伪静态,就例如www phpcmsx com一样的伪静态,本人介绍如何设置。
2020-09-04 07:56:04  来源:PHPCMSX

   有些勇于捯饬的小伙伴可能已经尝试过在PHPCMS的后台 - 扩展 - 自定义URL里设置过如下图类似 xinwen/guoji/12.html这样式的伪静态了,但是最后会惊喜的发现,基本上所有栏目和文章页都描边404,哇哈哈,容我开心一下。


QQ截图20200904080321.png

   其实PHPCMS在不生成静态页面的情况下,对于您在后台自定义的URL规则中的{$categorydir}和{$catdir}是不能正常解析的,就造成了您定义的伪静态地址都变成了404,如果希望实现和www.phpcmsx.com一样的目录式伪静态需要按以下步骤对PHPCMS程序进行调整和修改。


首先定个小目标:

 我希望栏目页的动态地址   

    index.php?m=content&c=index&a=lists&catid=1

 用下面这种形式的URL来访问

    yourdomain.com/lanmudir/  (lanmudir是栏目的目录名,在后台设置栏目的时候填写的英文字母)


我希望内容页的动态地址   

    yourdomain.com/index.php?m=content&c=index&a=show&catid=1&id=5

 用下面这种形式的URL来访问

    yourdomain.com/lanmudir/5.html   (lanmudir是栏目的目录名,在后台设置栏目的时候填写的英文字母)

 

那么首先我们就要让栏目和文章可以通过目录名正常访问到

也就是说URL要先变成下面这样(注意黄色字体是变化的地方)

    yourdomain.com/index.php?m=content&c=index&a=lists&catdir=dir1

    yourdomain.com/index.php?m=content&c=index&a=show&catdir=dir1&id=5


为了实现这个变化,我们赶紧上号!(JetBrains或vs或dw什么的)


    phpcms\modules\content\classes\url.class.php

找到122行左右的

$url = str_replace(array('{$catid}', '{$page}'), array($catid, $page), $urlrule);

修改成

$category_dir = $this->get_categorydir($catid);
$url = str_replace(array('{$catid}', '{$page}','{$catdir}','{$categorydir}'), array($catid, $page,$category['catdir'],$category_dir), $urlrule);


    phpcms\modules\content\index.php  (修改两处,增加两处)

找到207行左右的

$catid = $_GET['catid'] = intval($_GET['catid']);

修改成

if(isset ($_GET['catid'])){
    $catid = $_GET['catid'] = intval($_GET['catid']);
} else{
    $catid=$this->_getCategoryId($_GET['catdir']);
}


找到35行左右的

$catid = intval($_GET['catid']);
$id = intval($_GET['id']);

修改成

if(isset ($_GET['catid'])){
    $catid = intval($_GET['catid']);
} else{
    $catid=$this->_getCategoryId($_GET['catdir']);
}

if(isset($_GET['id'])){
    $id = intval($_GET['id']);
} else{
    $id = $this->_getPrefixId($_GET['catdir'],$_GET['prefix']);
}


找到本文件最下方最后一个 } 在其上面添加以下代码

private function _getCategoryId($catdir){
    if(!strpos($catdir,'/')) {
        $dirname = $catdir;
    } else{
        $dirname = end(explode('/',$catdir));
    }

    $this->category_db = pc_base::load_model('category_model');
    $result = $this->category_db->get_one(array('catdir'=>$dirname));
    return $result['catid'];
}
private function _getPrefixId($catdir,$prefix){
    if(!strpos($catdir,'/')) {
        $dirname = $catdir;
    } else{
        $dirname = end(explode('/',$catdir));
    }

    $this->category_db = pc_base::load_model('category_model');
    $result = $this->category_db->get_one(array('catdir'=>$dirname));
    $catid = $result['catid']; $siteids = getcache('category_content','commons');
    $siteid = $siteids[$catid]; $CATEGORYS = getcache('category_content_'.$siteid,'commons');

    if(!isset($CATEGORYS[$catid]) || $CATEGORYS[$catid]['type']!=0) showmessage(L('information_does_not_exist'),'blank');

    $this->category = $CAT = $CATEGORYS[$catid];
    $this->category_setting = $CAT['setting'] = string2array($this->category['setting']);
    $siteid = $GLOBALS['siteid'] = $CAT['siteid'];
    $MODEL = getcache('model','commons');
    $modelid = $CAT['modelid'];
    $tablename = $this->db->table_name = $this->db->db_tablepre.$MODEL[$modelid]['tablename'];
    $result = $this->db->get_one(array('prefix'=>$prefix));
    if(empty($result)){ $result = $this->db->get_one(array('id'=>$prefix)); } return $result['id'];
}


然后,我们在PHPCMS的后台管理 - 扩展 - URL规则管理中添加两条新规则

第一条:

规则名称:填写category

模块名称: 选择‘内容模块’

是否生成静态: 选择‘否’

URL实例:填写 dir.html|dir-1.html

URL规则:填写 

{$catdir}.html|{$catdir}-{$page}.html

第二条:


规则名称:填写show

模块名称: 选择‘内容模块’

是否生成静态: 选择‘否’

URL实例:填写 dir/1.html|dir/1-1.html

URL规则:填写 

{$catdir}/{$id}.html|{$catdir}/{$id}-{$page}.html

然后更新全站缓存或栏目缓存,批量更新url (重要)


最后,还有最最最重要的一步: 见下页


上一页 1 2 下一页