zdcms使用自定义函数来配置URL的方法

使用zdcms建站时,当网站中包含大量不同规则的URL时,使用默认的正则URL来做伪静态时,容易出现规则冲突的问题,今天就来说说用自定义函数来设置伪静态URL,从而规避伪静态规则冲突的问题。

第一步,首先打开config/custom.php,在里面定义自定义规则函数。

举例,我想实现栏目URL为:根目录/目录名;内容URL为:根目录/id.html;那么可以用下面代码实现:

//根目录+当前栏目URL
function brand_cat_url($data) {     //函数名自定义,定义你自己能记得的名称即可
    $dirname = ($data['dirname']);  //获取目录名称
    $url = "/".$dirname."/";        //拼接需要的URL格式
    dr_mkdirs(WRITEPATH.'brandcat/'); // 创建id缓存存储目录,目录名称自己设定
    file_put_contents(WRITEPATH.'brandcat/'. md5(trim($url, '/')).'.txt', $data['id']); // 将id号存储缓存文件
    return $url; //返回url
}



//根目录+文章IDURL
function brand_id_url($data) {     //函数名自定义,定义你自己能记得的名称即可
 $artid = ($data['id']);    //获取文章id
    $url = "/".$artid.".html"; // 拼接需要的url规则:/id.html
    dr_mkdirs(WRITEPATH.'brandaid/'); // 创建id缓存存储目录,目录名称自己设定
    file_put_contents(WRITEPATH.'brandaid/'. md5(trim($url, '/')).'.txt', $data['id']); // 将id号存储缓存文件
    return $url; //返回url
}


第二步,打开config/rewrite.php,在return []代码之前加上如下代码:

// 判断url是否是来自自定义函数
if (CMSURI) {
/*自定义规则开始*/
    
//根目录+当前栏目URL(栏目页使用) 
    $brandcat = WRITEPATH.'brandcat/'.md5(urldecode(CMSURI)).'.txt';
    
    if (is_file($brandcat)) {
        $catid = file_get_contents($brandcat);
        if ($catid) {
            return [
                CMSURI => 'index.php?c=category&id='.$catid, // 栏目动态URL地址
            ];
        }
    }
    
  
    
//根目录+文章ID URL
    $brandid = WRITEPATH.'brandaid/'.md5(urldecode(CMSURI)).'.txt';
    
    if (is_file($brandid)) {
        $id = file_get_contents($brandid);
        if ($id) {
            return [
                CMSURI => 'index.php?c=show&id='.$id, // 内容动态URL地址
            ];
        }
    }
/*自定义规则结束*/ 



}


完成以上两步就可以实现通过自定义函数来做栏目页和内容页的URL伪静态了。

这里再举个例子,假如想实现用拼音来实现内容页的URL呢?可以参考以下代码:

/* /config/custom.php代码如下: */

//根目录+文章拼音URL
function root_title_url($data) { 
    $title = ($data['title']);  //获取标题文字
    $py = \Phpcmf\Service::L('pinyin')->result($title); // 把每个汉字转换为拼音
    $url = "/".$py.".html"; // url规则:/pinyin.html
    dr_mkdirs(WRITEPATH.'myroottitleurl/'); // 创建id缓存存储目录
    file_put_contents(WRITEPATH.'myroottitleurl/'. md5(trim($url, '/')).'.txt', $data['id']); // 将id号存储缓存文件
    return $url; //返回最终URL
} 



/* /config/rewrite.php代码如下: */

if (CMSURI) {

/*自定义规则开始*/

//根目录+文章拼音URL        
    $myroottitleurl = WRITEPATH.'myroottitleurl/'.md5(urldecode(CMSURI)).'.txt';
    
    if (is_file($myroottitleurl)) {
        $id = file_get_contents($myroottitleurl);
        if ($id) {
            return [
                CMSURI => 'index.php?c=show&id='.$id, // 内容页动态URL
            ];
        }
    }
    
}


评论