序言:帮一个客户用PHPCMS做了一个网站,要自定义内容页HTML文件名称。
下面将一步一步来修改程序文件,一共涉及到model.sql、url.class.php、html.class.php这三个文件,并抓图做演示:
一、修改model.sql
打开 phpcms\modules\content\fields\model.sql,找到:
`updatetime` int(10) unsigned NOT NULL default '0',
在下面增加代码:
`prefix` char(20) NOT NULL default '',
并在文件的最后一行增加一下代码:
INSERT INTO `$table_model_field` (`modelid`, `siteid`, `field`, `name`, `tips`, `css`, `minlength`, `maxlength`, `pattern`, `errortips`, `formtype`, `setting`, `formattribute`, `unsetgroupids`, `unsetroleids`, `iscore`, `issystem`, `isunique`, `isbase`, `issearch`, `isadd`, `isfulltext`, `isposition`, `listorder`, `disabled`, `isomnipotent`) VALUES($modelid, $siteid, 'prefix', 'html文件名', '请输入生成的HTML文件名,为空将系统默认。', '', 0, 20, '/^[0-9a-z]+$/i', '', 'text', 'array (\n ''size'' => ''20'',\n ''defaultvalue'' => '''',\n ''ispassword'' => ''0'',\n)', '', '', '', 0, 1, 0, 0, 0, 0, 0, 0, 56, 0, 0);
二、修改url.class.php
打开 phpcms\modules\content\classes\url.class.php,找到68行的代码:
$day = date('d',$time);
在下面增加一下代码:
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;
将修改第三个文件html.class.php,以及新增模型字段
三、修改html.class.php
打开phpcms\modules\content\classes\html.class.php,找到代码:
$pageurls[$i] = $this->url->show($id, $i, $catid, $data['inputtime'],'','','edit',$upgrade);
修改为:
$pageurls[$i] = $this->url->show($id, $i, $catid, $data['inputtime'],$data['prefix'],'','edit',$upgrade);
到这里,修改的3个文件基本完成,需要注意的是:注意使用英文半角的引号和分号,以免产生错误!
四、模型添加prefix字段,让原有的模型显示自定义html文件名的编辑框
可以看出,在上面的修改中,已经定义了一个字段prefix当作html的文件名,但是prefix默认是没有数值的,于是需要在模型自定义字段中添加一个字段:prefix,在发表内容的时候填入自定义的html名称。
具体位置:后台》内容》模型管理》文章模型(也可以是其他模型)》字段管理,添加字段:
字段类型:单行文本,作为主表字段字段名:prefix字段别名:html文件名字段提示:请输入生成的HTML文件名,为空将系统默认。文本框长度:20数据校验正则:/^[0-9a-z]+$/i字符长度取值范围:0 20
值唯一:否
以下全选否
备注说明:关于“数据校验正则”这一点,可以为空,这样不限定输入的自定义html名称类型,这样可以输入下划线,中线,不然只能输入字母和数字了。
本文转自:http://www.cmsyou.com/support/86_2.html
上述方法搞定了自定义html内容页文件名,在使用过程中发现了一个问题,【内容】-》【发布管理】-》【批量更新URL】,执行了这个操作,你会发现自定义的文件名,又变回原来的id文件名啦。在网上找了很久,没有解决方法,自己花了我两个小时终于解决了。
第一步:找到目录 phpcms\modules\content下的create_html.php文件 86行,156行找到下列代码//更新URL链接
$this->urls($r['id'], $r['catid'], $r['inputtime'], $r['prefix']);
更改成:
if($r['url']){
$aurl=explode("/",$r['url']);
$burl=explode(".",$aurl[count($aurl)-1]);
$r['prefix']=$burl[0];
}
//更新URL链接
$this->urls($r['id'], $r['catid'], $r['inputtime'], $r['prefix']);
搞定,是不是很简单啊。