功能说明:获取自定义字段里附件类型的实际访问地址,去除附件地址后面多余参数。
一、后台 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;
}
}
修改说明
- 模型内容表替换
自定义字段存储在模型内容表,根据你的模型修改
Db::name('这里')
- 文章模型:
article_content - 下载模型:
download_content - 视频模型:
media_content - 产品模型:
product_content - 图集模型:
images_content
- 自定义字段名替换
代码中
value('dopdf'),把dopdf修改成你后台创建的自定义字段名称。
多模型使用:如需多个模型单独调用,复制这段代码,修改函数名(如
get_file_value)、数据表、字段名,模板调用标签同步更换即可。 模板基础调用标签:{$eyou.field.aid|get_dopdf_value}

二、前端模板调用(两种方案可选)
方案一: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,兼容性更好。
补充提示
- 修改
function.php记得备份原文件,防止语法错误导致网站打不开; - 自定义字段类型必须选择【附件】类型,字段值才会存储文件地址;
- 缓存:修改代码后,后台清理 EyouCMS 缓存再测试;
- 多模型场景:复制函数,修改函数名、数据表名、字段名,模板调用对应函数即可。
