“显示目录”在织梦CMS中通常有两种理解:

- 显示某个栏目(目录)下的所有文章列表:这是最常见的需求,比如在“新闻中心”栏目下,显示所有新闻文章的标题、日期、摘要等。
- 显示某个物理文件夹(
dir)下的文件列表:这个需求比较少见,通常用于下载站或资源站,展示一个服务器文件夹里的所有文件,并提供下载链接。
下面我将针对这两种情况,提供详细的操作方法和代码示例。
显示栏目(目录)下的文章列表(最常用)
这是织梦CMS的核心功能,每个栏目在织梦后台都被称为一个“目录”(dir),其ID(typeid)是关键,要显示某个栏目下的文章列表,主要有两种方法:
方法A:使用织梦的官方标签(推荐,最简单)
这是最标准、最安全的方法,通过调用织梦内置的标签来实现。
常用标签:
{dede:arclist}:用于获取指定栏目下的文章列表。{dede:channel}:用于获取栏目列表。
示例1:在首页显示“公司新闻”栏目的最新5篇文章
假设“公司新闻”栏目的ID是 1。
- 登录织梦后台,找到“栏目管理”,查看“公司新闻”栏目的“栏目ID”,确认是
1。 - 打开你的首页模板文件(通常是
/templets/default/index.htm)。 - 在你想要显示文章列表的位置,插入以下代码:
<h3>公司新闻</h3>
<ul>
{dede:arclist typeid='1' titlelen='30' row='5'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:arclist}
</ul>
代码解释:
{dede:arclist ...}:开始调用文章列表。typeid='1':指定要调用哪个栏目下的文章,1公司新闻”的栏目ID,len='30'`:标题长度,最多显示30个字符。row='5':获取的文章数量,这里获取5篇。<li>:列表项,每篇文章会被包裹在一个<li>标签里。[field:arcurl/]:文章的链接地址。[field:title/]:文章的标题。[field:pubdate ...]:文章的发布日期。function="MyDate('Y-m-d', @me)"是一个函数,用于将时间戳格式化为年-月-日的格式。{/dede:arclist}:结束调用。
示例2:在子页面模板中显示当前栏目下的文章列表
如果你在一个栏目的列表页模板(通常是 /templets/default/list_article.htm)中,并且想显示这个栏目自己的文章,那么不需要指定 typeid。
<h3>{dede:field name='typename'/}</h3> <!-- 显示当前栏目的名称 -->
<ul>
{dede:arclist titlelen='50' row='10'}
<li>
<a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
</li>
{/dede:arclist}
</ul>
在这个例子中,typeid 被省略了,arclist 标签会自动获取当前栏目(typeid由页面自身决定)下的文章。
方法B:使用自定义SQL查询(高级,更灵活)
当官方标签无法满足复杂需求时,可以使用自定义SQL。
示例:显示“公司新闻”(ID=1)栏目下,点击量最高的3篇文章
- 同样,在模板文件中需要的位置插入代码。
- 使用
{dede:sql}
<h3>热门新闻</h3>
<ul>
{dede:sql sql="SELECT * FROM `dede_archives` WHERE typeid=1 ORDER BY click DESC LIMIT 0,3"}
<li>
<a href="/plus/view.php?aid=[id]">[title]</a>
</li>
{/dede:sql}
</ul>
代码解释:
{dede:sql sql="..."}:开始执行自定义SQL查询。SELECT * FROM \dede_archives`从文章主表dede_archives中查询数据。**注意**:表名dede_archives中的dede是你的数据库表前缀,如果你的前缀不是dede`,需要修改。WHERE typeid=1:条件,只查询栏目ID为1的文章。ORDER BY click DESC:按点击量(click字段)降序排列。LIMIT 0,3:从第0条开始,取3条数据。[id]和[title]:直接从SQL查询结果中获取id和title字段的值,文章链接需要手动拼接成织梦的URL格式/plus/view.php?aid=[id]。
显示服务器物理文件夹(dir)的文件列表
这个需求织梦官方标签不直接支持,通常需要结合自定义函数或修改模板文件来实现。
警告: 此方法需要你具备一定的PHP和织梦模板知识,并且操作不当可能导致网站安全风险,请务必在本地测试环境验证无误后再部署到服务器。
实现思路:
- 在织梦模板中引入一个自定义的PHP函数。
- 这个PHP函数会读取服务器指定目录下的文件列表。
- 将文件列表处理成HTML格式,并返回到模板中显示。
步骤示例:
创建一个自定义函数文件
在你的织梦网站根目录下,创建一个名为 my_functions.php 的文件(文件名可以自定义),并写入以下PHP代码:
<?php
/**
* 获取指定目录下的文件列表
* @param string $dir 相对于网站根目录的目录路径,'uploads/downloads'
* @param int $limit 显示文件数量
* @return string 返回HTML格式的文件列表
*/
function GetDirFileList($dir = '', $limit = 20) {
// 安全检查,防止目录遍历攻击
$dir = str_replace(array('../', '..\\'), '', $dir);
// 完整的物理路径
$full_path = $_SERVER['DOCUMENT_ROOT'] . '/' . $dir;
// 检查目录是否存在且可读
if (!is_dir($full_path) || !is_readable($full_path)) {
return '<p>目录不存在或不可读。</p>';
}
// 获取目录中的文件和文件夹
$files = scandir($full_path);
$file_list_html = '<ul class="file-list">';
$count = 0;
foreach ($files as $file) {
// 跳过 . 和 .. 以及子目录
if ($file == '.' || $file == '..' || is_dir($full_path . '/' . $file)) {
continue;
}
// 达到数量限制则停止
if ($count >= $limit) {
break;
}
// 构建文件的完整URL
$file_url = 'http://' . $_SERVER['HTTP_HOST'] . '/' . $dir . '/' . $file;
// 构建列表项HTML
$file_list_html .= '<li>';
$file_list_html .= '<a href="' . $file_url . '" target="_blank">' . htmlspecialchars($file) . '</a>';
// 可以在这里添加文件大小等信息
// $file_list_html .= ' (' . round(filesize($full_path . '/' . $file) / 1024, 2) . ' KB)';
$file_list_html .= '</li>';
$count++;
}
$file_list_html .= '</ul>';
return $file_list_html;
}
?>
在织梦模板中调用这个函数
假设你想在首页显示 uploads/downloads 目录下的文件。
- 打开首页模板
/templets/default/index.htm。 - 在文件最顶部(
<!DOCTYPE html>之前)引入你的函数文件:
{dede:include filename='my_functions.php'/}
在你想要显示文件列表的位置,调用这个函数:
<h3>下载文件</h3>
{dede:geturl function='GetDirFileList("uploads/downloads", 10)'/}
代码解释:
{dede:include filename='...'}:这是织梦的引入文件标签,相当于PHP的include。{dede:geturl function='...'}:这是一个可以执行自定义函数的标签(或者你也可以使用更直接的PHP标签{dede:php}...{/dede:php},但geturl更简洁)。GetDirFileList("uploads/downloads", 10):调用我们刚才创建的函数,传入目录路径uploads/downloads和显示数量限制10。
清理缓存
登录织梦后台,点击“系统” -> “一键更新站点” -> “更新HTML” 和 “更新缓存”,让新的模板生效。
| 需求类型 | 推荐方法 | 核心标签/代码 | 适用场景 |
|---|---|---|---|
| 显示栏目文章 | 官方标签 | {dede:arclist typeid='1' row='5'} |
99%的列表展示需求,安全、简单。 |
| 显示栏目文章 | 自定义SQL | {dede:sql sql="SELECT ... FROM dede_archives..."} |
需要复杂排序、筛选等高级查询时。 |
| 显示物理文件夹 | 自定义函数 | 结合PHP函数和 {dede:include} |
下载站、资源站,直接展示服务器文件。 |
对于绝大多数用户来说,情况一 使用 {dede:arclist} 标签是最佳选择。情况二 则属于高级定制,需要谨慎操作。
