phpcms自定义文章内容页别名(url)
[ 2016/06/02, Phpcms , 3341阅, 0评 ]

1.模型添加prefix字段,让原有的模型显示自定义html文件名的编辑框

以“文章模型”为例,在该模型中添加字段:

字段类型:单行文本
作为主表字段:是(非常重要,否则在批量生成url中会无法生成自定义字段)
字段名:prefix
字段别名:html文件名(自定义)
字段提示:请输入生成的HTML文件名,为空将系统默认。(自定义)
值唯一:是(你不希望2篇文章的url是同一个吧,如果选否会覆盖上一篇文章)
其余项按需更改即可(最好保持默认)

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

查找:$day = date('d',$time);(约第67行)

在其下面增加以下代码:

if($content_ishtml) {
	if($prefix) {
		$cid = $id;
		$id = $prefix;
	}
}

然后,找到下面这一段代码:

//生成静态 ,在添加文章的时候,同时生成静态,不在批量更新URL处调用
if($content_ishtml && $data) {
    $data['id'] = $id;
    $url_arr['content_ishtml'] = 1;
    $url_arr['data'] = $data;
}

将其中的$data['id'] = $id;改为$data['id'] = $cid;

3.phpcms\modules\content\classes\html.class.php

查找:

$pageurls[$i] = $this->url->show($id, $i, $catid, $data['inputtime'],'','','edit',$upgrade);

(约第117行)修改为:

$pageurls[$i] = $this->url->show($id, $i, $catid, $data['inputtime'],$data['prefix'],'','edit',$upgrade);

4./phpcms/modules/content/create_html.php

查找:

$urls = $this->url->show($r['id'], '', $r['catid'],$r['inputtime']);

共有三处,批量替换成:

$urls = $this->url->show($r['id'], '', $r['catid'],$r['inputtime'],$r['prefix']);
因为phpcms生成内容页html文件共有三个地方,所以上面的替换就有三处:
a.创建或编辑内容时会生成HTML
b.“内容管理”里下面有个“批量生成HTML”按钮
c.发布管理的“批量更新内容页”,它又包含了选择模型更新和选择栏目更新

5.添加URL规则

扩展-URL规则管理-添加规则,如下图:

文章内容页别名url规则.jpg

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

然后找到需要生成静态内容页的栏目,修改-生成HTML设置-内容页URL规则 选定上面添加的规则。

6.到此就算大功告成了,赶快试试吧!

说明:该方法基于版本phpcms_v9.5.10_UTF8

已知bug:“值唯一”仅在add添加文章时起作用,在edit编辑文章时尽管文件名重复却不会提示!

补充:

if($content_ishtml) {
    if($prefix) {
        $prefix = str_replace(" ","-",$prefix);//空格用-代替
        $prefix = strtolower($prefix);//大小写全部转小写
        $cid = $id;
        $id = $prefix;
    }
}

参考文章:

[1]phpcms v9文章别名显示

[2]phpcms文章内容页如何自定义url

有朋自远方来...评论一下呗O(∩_∩)O