1.首先前台路由改下,需要在各文章列表增加subtitle字段属性跟title一样
Route::rule('lists/:catid/[:condition]', 'cms/index/lists')->pattern(['catid' => '[d|w/]+', 'condition' => '[0-9_&=a-zA-Z]+']); Route::rule('shows/:catid/:id', 'cms/index/shows')->pattern(['catid' => '[d|w/]+', 'id' => '[d|w/]+']);
2./application/cms/controller/index.php 文件修改
1.) public function lists()函数修改
//$catid = $this->request->param('catid/d', 0); $catid = $this->request->param('catid/w', 0); $page = $this->request->param('page/d', 1); //获取栏目数据 //$category = getCategory($catid); if (is_numeric($catid)) { $category = getCategory($catid); } else{ $category = getCategoryByName($catid); $catid = $category['id']; }
2.)public function shows() 函数修改
//$id = $this->request->param('id/d', 0); $id = $this->request->param('id', 0); //栏目ID //$catid = $this->request->param('catid/d', 0); $catid = $this->request->param('catid', 0); $page = $page = $this->request->param('page/d', 1); //获取栏目数据 //$category = getCategory($catid); if (is_numeric($catid)) { $category = getCategory($catid); } else { $category = getCategoryByName($catid); }
$modelInfo = cache('Model')[$modelid]; //后增加的 if (!is_numeric($id)) { $id = Db::name($modelInfo['tablename'])->where('subtitle', $id)->value("id"); } //更新点击量 Db::name($modelInfo['tablename'])->where('id', $id)->setInc('hits');
3.application/cms/model/Category.php 文件
$this->assign([ 'top_parentid' => $top_parentid, 'SEO' => $seo, 'catid' => $catid, 'image' => $image, 'parentid' => $parentid, 'page' => $page, 'modelid' => $modelid, ]); //后增加的 $this->assign("catid",$category['id']); $this->assign("id",$id);
1.)修改public static function getCategory()函数
//$cache['url'] = self::buildCatUrl($cache['type'], $catid, $cache['url']); //修改的地方 $cache['url'] = self::buildCatUrl($cache['type'], $cache['catdir']?$cache['catdir']:$catid, $cache['url']);
2.)增加public static function getCategoryByName() 函数
public static function buildCatUrl($type, $id, $url = '') { switch ($type) { case 3: //自定义链接 $url = empty($url) ? '' : ((strpos($url, '://') !== false) ? $url : url($url)); break; default: $url = url('cms/index/lists', ['catid' => $id]); break; } //后增加的 $url = str_replace("%2F","/",$url); return $url; }
3.) 修改 public static function buildCatUrl()函数
public static function getCategoryByName($catid, $field = '', $newCache = false) { if (empty($catid)) { return false; } $key = 'getCategory_' . $catid; //强制刷新缓存 if ($newCache) { Cache::rm($key, null); } $cache = Cache::get($key); if ($cache === 'false') { return false; } if (empty($cache)) { //读取数据 $cache = db('category')->where(['catdir' => $catid])->find(); if (empty($cache)) { Cache::set($key, 'false', 60); return false; } else { //扩展配置 $cache['setting'] = unserialize($cache['setting']); //修改的地方 $cache['url'] = self::buildCatUrl($cache['type'], $cache['catdir'], $cache['url']); //栏目扩展字段 //$cache['extend'] = $cache['setting']['extend']; $cache['image'] = get_file_path($cache['image']); Cache::set($key, $cache, 3600); } } if ($field) { //支持var.property,不过只支持一维数组 if (false !== strpos($field, '.')) { $vars = explode('.', $field); return $cache[$vars[0]][$vars[1]]; } else { return $cache[$field]; } } else { return $cache; } }
4.application/cms/model/Cms.php 文件
1.)修改public function addModelData() 函数
//后增加的 if($id){ $catdir= getCategory($catid,'catdir'); $pinyin= new OvertruePinyinPinyin('OvertruePinyinMemoryFileDictLoader'); if (!empty($data['title'])){ $subtitle= $pinyin->permalink($data['title'],''); if ($subtitle && $catdir){ $subtitle .= $id; DB::name($tablename)->where('id',$id)->update(['subtitle'=>$subtitle]); } } } return $id;
if (!empty($result)) { $ModelField = cache('ModelField'); foreach ($result as $key => $vo) { $catdir=getCategory($vo['catid'],'catdir'); $vo = $this->dealModelShowData($ModelField[$modeId], $vo); //$vo['url'] = $this->buildContentUrl($vo['catid'], $vo['id']) $vo['url'] = $this->buildContentUrl($vo['catid'], $vo['id'], $vo['subtitle'], $vo['title'], $catdir, $tableName ); $result[$key] = $vo; } }
3.) 修改public function getContent()函数2.)修改public function getList() 函数
if (!empty($dataInfo)) { $ModelField = cache('ModelField'); $catdir = getCategory($dataInfo['catid'],'catdir'); $dataInfo = $this->dealModelShowData($ModelField[$modeId], $dataInfo); //$dataInfo['url'] = $this->buildContentUrl($dataInfo['catid'], $dataInfo['id']); $dataInfo['url'] = $this->buildContentUrl($dataInfo['catid'], $dataInfo['id'], $dataInfo['subtitle'], $dataInfo['title'], $catdir, $tableName ); }
public function buildContentUrl($catid, $id, $subtitle='',$title='', $catdir='', $tableName='') { if (($subtitle || $title) && $catdir){ $pinyin = new OvertruePinyinPinyin('OvertruePinyinMemoryFileDictLoader'); if ($subtitle ==''&& !empty($title)){ $subtitle=$pinyin->permalink($title,''); if($subtitle && $catdir){ $subtitle .= $id; Db::name($tableName)->where('id',$id)->update(['subtitle'=>$subtitle]); } } $url = url('cms/index/shows', ['catid' => $catdir, 'id' => $subtitle]); $url = str_replace("%2F","/",$url); return $url; } $url = url('cms/index/shows', ['catid' => $catid, 'id' => $id]); $url = str_replace("%2F","/",$url); return $url; }
5.application/cms/taglib/CmsTagLib.php文件4.) 修改public function buildContentUrl()函数
修改public function Category()函数
if (!empty($categorys)) { foreach ($categorys as &$vo) { //$vo['url'] = Category_Model::buildCatUrl($vo['type'], $vo['id'], $vo['url']); $vo['url'] = Category_Model::buildCatUrl($vo['type'], $vo['catdir'], $vo['url']); $vo['image'] = get_file_path($vo['image']); $vo['image2'] = get_file_path($vo['image2']); } }
1.)修改验证后台验证规则6.application/cms/validate/Category.php文件
//'catdir|唯一标识' => 'require|alphaNum', 'catdir|唯一标识' => 'require|alphaCat',
2.) 增加验证函数
public function alphaCat($val) { if (!preg_match('/^[a-zA-Z0-9/]+$/u',$val)) { return false; } return true; }
3.) 增加验证提示
//定义验证提示 protected $message = [ 'modelid.number' => '所属模型不得为空', 'catdir.alphaCat' => '唯一标识只能为数字或字母及左斜杠/', ];
7.application/cms/common.php 文件
1.)增加 function getCategoryByName()函数
function getCategoryByName($catid, $field = '', $newCache = false) { return Category_Model::getCategoryByName($catid, $field, $newCache); }
2.)修改当前位置
function catpos($catid, $symbol = ' > ') { if (getCategory($catid) == false) { return ''; } //获取当前栏目的 父栏目列表 $arrparentid = array_filter(explode(',', getCategory($catid, 'arrparentid') . ',' . $catid)); foreach ($arrparentid as $cid) { $catdir= getCategory($catid ,'catdir'); $url = Category_Model::buildCatUrl(getCategory($cid, 'type'), $catdir, getCategory($cid, 'url')); $parsestr[] = '<a href="' . $url . '" >' . getCategory($cid, 'catname') . '</a>'; } $parsestr = implode($symbol, $parsestr); return $parsestr; }
可能会有落下的,后续增加,比水月洞天的方法复杂好多,栏目一级标识正常获取,二级标识填写 一级标识/二级标识,三级标识一级标识/二级标识/三级标识 以此类推,外联形式cms/index/lists?catid=Aboutus/Introduction 形式