在织梦CMS中,附件类型的字段主要用于存储与文章内容相关的各种文件,如图片、文档、压缩包、音视频等,理解这个字段的工作原理对于自定义表单、发布内容以及后续的数据处理都至关重要。
核心概念:@me 和 texturl 字段
在织梦中,附件类型的字段存储的不是文件本身,而是文件的路径信息,这个路径信息在模板中通过特殊的标记来使用。
-
@me- 含义:这是一个系统变量,代表当前字段的值,也就是说,
@me就是你在这个字段里填写的那个文件路径字符串。 - 用途:主要用于在底层模板(
{dede:field.字段名 function='...'/})中进行处理,当你需要对原始路径进行修改、拼接或判断时,就使用@me。
- 含义:这是一个系统变量,代表当前字段的值,也就是说,
-
texturl- 含义:这是一个系统函数,专门用来处理附件字段,它的作用是将字段中存储的路径字符串转换成一个可以直接访问的、完整的URL链接。
- 工作原理:它会自动判断附件的存储位置(是上传目录还是附件目录),并拼接上网站的域名,生成一个标准的、可点击的链接。
- 用途:这是在模板中直接显示附件链接时最常用、最推荐的方法。
如何创建和使用附件字段
步骤1:在后台添加字段
- 登录织梦后台,进入 “核心” -> “内容模型管理”。
- 选择你需要修改的内容模型(“文章模型”),点击 “管理字段”。
- 点击 “添加新字段”。
- 在字段添加页面,填写以下信息:
- 字段名称:如
downloadfile(英文,不含空格)。 - 字段别名:如
下载附件(中文,方便识别)。 - 字段类型:选择“附件”。
- 字段说明:可选,对该字段的描述。
- 默认值:可选。
- 是否为空:根据需要选择。
- 前台显示:选择“是”,这样在前台发布内容时就能看到这个字段。
- 参数设置:通常可以保持默认,或者根据需要设置是否允许多个附件等。
- 字段名称:如
- 保存。
步骤2:在前台发布内容时使用
添加完字段后,在前台发布内容的表单中,就会出现一个文件上传按钮,你可以选择一个或多个文件上传,织梦会自动将文件路径保存到数据库中对应的字段里。
步骤3:在前台模板中调用显示
这是最关键的一步,假设你添加的字段名是 downloadfile。
场景1:直接显示附件的下载链接(最常用)
使用 texturl 函数,它会自动将路径转换为可点击的链接。
{dede:field.downloadfile function='texturl(@me)'/}
输出结果:
如果数据库中 downloadfile 字段的值是 /uploads/soft/2025/abc.zip,那么上面的代码会输出:
<a href="https://www.yourdomain.com/uploads/soft/2025/abc.zip" target="_blank">下载附件</a>
(注意:链接文本“下载附件”是固定的,如果你想自定义文本,请看场景3)
场景2:获取原始路径(不推荐直接用于链接)
如果你只是想获取原始的路径字符串,可以使用 @me。
{dede:field.downloadfile function='@me'/}
输出结果:
/uploads/soft/2025/abc.zip
这个路径不能直接点击,因为它缺少域名,所以除非有特殊处理需求,否则一般不直接使用。
场景3:自定义链接文本
texturl 函数默认的链接文本是“下载附件”,如果你想要自定义文本,比如文件名,就需要结合 @me 和其他函数来处理。
{dede:field.downloadfile function='
if(@me != ""){
$filename = basename(@me);
echo "<a href=\"".texturl(@me)."\" target=\"_blank\">".$filename."</a>";
}
'/}
代码解析:
if(@me != ""):判断字段是否为空,如果为空则不显示任何内容。$filename = basename(@me);:使用basename()函数从完整路径中提取出文件名(如abc.zip)。echo "...":输出自定义的HTML代码。texturl(@me):将路径转换为完整的URL。target="_blank":让链接在新窗口打开,这是下载链接的最佳实践。
场景4:显示多个附件
如果你的字段设置允许多个附件,它们通常会用特定的符号(如 )隔开存储,你需要先分割字符串,然后循环输出。
{dede:field.downloadfile function='
if(@me != ""){
$files = explode("|", @me);
foreach($files as $file){
if(trim($file) != ""){
$filename = basename($file);
echo "<a href=\"".texturl($file)."\" target=\"_blank\">".$filename."</a><br />";
}
}
}
'/}
代码解析:
explode("|", @me):用 符号将字符串分割成一个数组。foreach($files as $file):遍历数组中的每一个文件路径。if(trim($file) != ""):过滤掉可能存在的空值。- 循环内部的处理逻辑与场景3相同,并为每个链接后面加上一个换行
<br />。
附件的存储位置
了解织梦附件的存储位置有助于你更好地理解 texturl 的工作原理。
织梦有两个主要的附件上传目录:
/uploads/:这是默认的附件目录,通常用于存放文章、软件等模型的附件。/special/:这是专题目录,有时也会被用作附件存储。
texturl 函数会智能地判断你的附件路径是相对于哪个目录,并自动补全完整的URL,你可以在后台的 “系统” -> “附件设置” 中找到相关的配置。
| 需求 | 推荐的模板代码 | 说明 |
|---|---|---|
| 显示一个可点击的下载链接 | {dede:field.字段名 function='texturl(@me)'/} |
最常用,自动生成带域名的链接。 |
| 获取原始文件路径 | {dede:field.字段名 function='@me'/} |
输出数据库中存储的原始路径字符串。 |
| 用文件名作为链接文本 | 见场景3的代码 | 使用 basename() 提取文件名,实现更美观的显示。 |
| 显示多个附件 | 见场景4的代码 | 使用 explode() 分割路径,并用 foreach 循环输出。 |
掌握 @me 和 texturl 的区别与用法,是灵活运用织梦附件类型字段的关键,希望这份详细的解释能帮助你!
