PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > CMS教程 > SIYUCMS

SIYUCMS,文章模块优化详情页URL

管理员 2024-12-15
SIYUCMS
160

以下代码只针对 V6.0 以上版本

需求调研

近日收到求助需要优化文章模块的url地址
优化前:/index/information/17.html
优化后:/17.html

需求分析

1、/index是应用的名称,我们可以通过域名绑定应用的方式来隐藏
2、系统的每个模块是独立的表,如文章模块和产品模块的id可能存在重复所以这里需要做取舍

思路

通过需求分析我们能明确,如果想得到/17.html这种url我们只能给一个模块来做优化,如果多个模块的话需要加以区分比如叫做news_17.html,product_17.html等。
我们需要通过url确定是哪个表的数据,这样我们就能反推出当前的模型和表名称,剩下的自然就好处理了。

路由部分修改

1、只给其中一个模块做优化,其他的放弃(以下代码基于此)

// 这里我们匹配所有数字到Article控制器的infoArticle方法Route::any('<id>$', 'Article/infoArticle')->pattern(['id' => '\d+']);
复制

2、多个模块做优化

Route::any('news_<id>$', 'Article/infoArticle')->pattern(['id' => '\d+']);Route::any('product_<id>$', 'Article/infoArticle')->pattern(['id' => '\d+']);
复制

控制器部分的修改

1、由于我们并没有Article控制器,所以会调用默认的Error空控制器,我们在该控制器中添加新的方法(基本等同于复制一份info方法)

public function infoArticle(string $id){    // 获取栏目ID
    $catId = getCateId();    // 当前模型ID
    $this->moduleId = Cate::where('id', '=', $catId)->value('module_id');    // 当前表名称
    $this->tableName = Module::where('id', '=', $this->moduleId)->value('table_name');    // 当前模型字段列表
    $this->fields = Field::getFieldList($this->moduleId);    if (empty($catId)) {
        $this->error('未找到对应栏目');    }    // 获取栏目信息
    $cate = Cms::getCateInfo($catId);    // 更新点击数
    Cms::addHits($id, $this->tableName);    // 查找内容详情
    $info = Cms::getInfo($id, $this->tableName);    // 跳转    if (isset($info['url']) && !empty($info['url'])) {        return redirect($info['url']);    }    // 当前地址
    $info['url'] = getShowUrl($info);    // tdk
    $tdk = Cms::getInfoTdk($info, $cate, $this->system);    // 模板
    $template = Cms::getInfoView($info, $cate, $this->tableName);

    $view = [        'cate'        => $cate,         // 栏目信息        'fields'      => $this->fields, // 字段列表        'info'        => $info,         // 详情信息        'system'      => $this->system, // 系统信息        'public'      => $this->public, // 公共目录        'title'       => $tdk['title'],        'keywords'    => $tdk['keywords'],        'description' => $tdk['description'],    ];

    View::assign($view);    return View::fetch($template);}
复制

公共方法的修改

common.php 中修改以下两个方法

/***
 * 获取当前栏目ID
 * @return mixed
 */function getCateId(){    if (\think\facade\Request::has('cate')) {
        $result = (int)\think\facade\Request::param('cate');    } else {
        $result = \app\common\model\Cate::where('cate_folder', '=', \think\facade\Request::controller())            ->value('id');        if (!$result) {
            $article = \app\common\model\Article::find(request()['id']);            if ($article) {
                $result = $article->cate_id;            }        }    }    return $result;}getShowUrl 需要根据具体情况做调整,具体做法就是根据模块id做处理
复制

希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部