易优CMS自定义附件获取真实的地址方法

功能说明:获取自定义字段里附件类型的实际访问地址,去除附件地址后面多余参数。

一、后台 PHP 函数配置(extend/function.php)

打开文件 \extend\function.php,在文件最底部添加自定义查询函数。

基础函数模板

if (!function_exists('get_dopdf_value')) 
{
    /**
     * 查询当前内容模型自定义附件字段值
     */
    function get_dopdf_value($aid = 0)
    {
        // 查询条件
        $condition = ['a.aid' => $aid];
        
        // 查询对应模型内容表,读取自定义字段
        $record = \think\Db::name('article_content')
            ->alias('a')
            ->where($condition)
            ->value('dopdf');
        
        return $record;
    }
}

修改说明

  1. 模型内容表替换

自定义字段存储在模型内容表,根据你的模型修改 Db::name('这里')

  • 文章模型:article_content
  • 下载模型:download_content
  • 视频模型:media_content
  • 产品模型:product_content
  • 图集模型:images_content
  1. 自定义字段名替换

代码中 value('dopdf'),把 dopdf 修改成你后台创建的自定义字段名称。

多模型使用:如需多个模型单独调用,复制这段代码,修改函数名(如get_file_value)、数据表、字段名,模板调用标签同步更换即可。 模板基础调用标签:{$eyou.field.aid|get_dopdf_value}




ScreenShot_2026-09-14_084150_333.png



二、前端模板调用(两种方案可选)

方案一:JS 处理地址(前端截取,简单上手) 方案二:PHP 函数处理地址(推荐,后端直接处理,不需要 JS)

方案一:JS 截取附件后缀(前端处理)

内容页模板写入链接代码

<a href="{$eyou.field.aid|get_dopdf_value}" id="myLink">{$eyou.field.aid|get_dopdf_value}</a>

模板底部添加 JS 代码,自动截取 pdf/zip/rar 等文件真实地址

<script>
const link = document.getElementById('myLink');
const href = link.href;
const pdfPos = href.indexOf('.pdf');
if (pdfPos !== -1) {
  link.href = href.substring(0, pdfPos + 4);
  link.textContent = href.substring(0, pdfPos + 4);
}
</script>

多文件类型通用 JS(支持 pdf、rar、zip、docx、xlsx)

<script>
const fileTypes = ['.pdf', '.rar', '.zip', '.docx', '.xlsx'];
const links = document.querySelectorAll('a');
links.forEach(link => {
  const href = link.href.toLowerCase();
  const matchedType = fileTypes.find(type => href.includes(type));
  if (matchedType) {
    const typePos = href.indexOf(matchedType);
    const cleanHref = href.substring(0, typePos + matchedType.length);
    link.href = cleanHref;
    link.textContent = cleanHref;
  }
});
</script>

JS 说明:数组内的文件后缀按需增减;部分特殊符号链接可能存在兼容问题,绝大多数场景正常使用。


方案二:PHP 后端清理地址(推荐,无需 JS)

\extend\function.php 文件,追加清理地址函数,和上面自定义函数放在一起:

function trim_extra_after_ext($url) {
    $extensions = ['pdf', 'rar', 'zip', 'doc', 'docx', 'xls', 'xlsx'];
    $pattern = '/(' . implode('|', array_map(function($ext) {
        return preg_quote($ext, '/');
    }, $extensions)) . ')(\?.*)?$/i';
    
    if (preg_match($pattern, $url, $matches)) {
        $ext = $matches[1];
        return substr($url, 0, strpos(strtolower($url), $ext) + strlen($ext));
    }
    return $url;
}

模板调用标签

内容页:

<a href="{$eyou.field.aid|get_dopdf_value|trim_extra_after_ext}">{$eyou.field.aid|get_dopdf_value|trim_extra_after_ext}</a>

列表页:

<a href="{$field.aid|get_dopdf_value|trim_extra_after_ext}">{$field.aid|get_dopdf_value|trim_extra_after_ext}</a>

原理:PHP 正则直接过滤附件地址后缀后面多余参数,返回纯净文件真实路径,前端无需额外 JS,兼容性更好。


补充提示

  1. 修改 function.php 记得备份原文件,防止语法错误导致网站打不开;
  2. 自定义字段类型必须选择【附件】类型,字段值才会存储文件地址;
  3. 缓存:修改代码后,后台清理 EyouCMS 缓存再测试;
  4. 多模型场景:复制函数,修改函数名、数据表名、字段名,模板调用对应函数即可。
分享: