各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
收藏本站(不迷路),每天更新好文章!
当前位置:首页 > CMS教程 > PHPCMS

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

管理员 2022-08-28
PHPCMS
699
本教程是根据网上的教程做的简单调整

1、添加字段

内容-模型管理-选择你要修改的模型,一般是文章模型,然后是字段管理,添加字段
作为主表字段,选择 是,非常重要,否则在批量生成url中会无法生成自定义字段
字段名为prefix 不建议修改,因为要跟后面的代码关联起来(为什么网上的所有教程都是用的prefix字段么?因为生成url的方法public function show($id, $page = 0, $catid = 0, $time = 0, $prefix = '',$data = '',$action = 'edit',$upgrade = 0)中就有一个prefix字段,默认我们是用不到的,闲着也是闲着,正好我们可以使用此字段,这样就不需要改这个方法了
字段别名为 html文件名 ,这个随意,好记即可
值唯一选 是,(虽然选择了 唯一,但是只在添加的时候校验,在你重新编辑的时候,如果重复就无法校验了,为此我们需要专门改造一下校验方法,教程:https://www.pweb123.com/cms/zhcms/phpcms/821.html


2、.phpcmsmodulescontentclassesurl.class.php
查找:$day = date('d',$time);(约第67行)
在其下面增加以下代码:
  1. $tempid = $id;//赋值给临时id 
  2. if($content_ishtml) { 
  3.     if($prefix) { 
  4.         $prefix = strtolower(str_replace(" ","-",$prefix));//空格用-代替并小写 
  5.         $tempid = $prefix; 
  6.     } 
再找到代码
  1. $urls = str_replace(array('{$categorydir}','{$catdir}','{$year}','{$month}','{$day}','{$catid}','{$id}','{$page}'),array($categorydir,$catdir,$year,$month,$day,$catid,$id,$page),$urlrule); 
改为:
  1. $urls = str_replace(array('{$categorydir}','{$catdir}','{$year}','{$month}','{$day}','{$catid}','{$id}','{$page}'),array($categorydir,$catdir,$year,$month,$day,$catid,$tempid,$page),$urlrule);//$id改成$tempid; 

3.phpcmsmodulescontentclasseshtml.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.发布管理的“批量更新内容页”,它又包含了选择模型更新和选择栏目更新


最后一步:
修改增加是否唯一判断:(用了我的校验text字段是否唯一的方法之后,此步骤改不改都行)
我新加的自定义字段,设置了判断唯一值。但是当我不想填写这个字段时,他也提示 重复。所以我想有没有办法让他判断,只有在非空值时才判断唯一值?

打开 /phpcms/modules/content/fields/content_input.class.php

查找

if($this->fields[$field]['isunique'] && $this->db->get_one(array($field=>$value),$field) && ROUTE_A != 'edit') showmessage($name.L('the_value_must_not_repeat'));

替换成

if($this->fields[$field]['isunique'] && $value && $this->db->get_one(array($field=>$value),$field) && ROUTE_A != 'edit') showmessage($name.L('the_value_must_not_repeat'));

相关推荐

扫码关注

qrcode

QQ交谈

回顶部