织梦网页为何显示dir目录?

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 织梦建站 正文

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

织梦网页上显示dir
(图片来源网络,侵删)
  1. 显示某个栏目(目录)下的所有文章列表:这是最常见的需求,比如在“新闻中心”栏目下,显示所有新闻文章的标题、日期、摘要等。
  2. 显示某个物理文件夹(dir)下的文件列表:这个需求比较少见,通常用于下载站或资源站,展示一个服务器文件夹里的所有文件,并提供下载链接。

下面我将针对这两种情况,提供详细的操作方法和代码示例。


显示栏目(目录)下的文章列表(最常用)

这是织梦CMS的核心功能,每个栏目在织梦后台都被称为一个“目录”(dir),其ID(typeid)是关键,要显示某个栏目下的文章列表,主要有两种方法:

方法A:使用织梦的官方标签(推荐,最简单)

这是最标准、最安全的方法,通过调用织梦内置的标签来实现。

常用标签:

  • {dede:arclist}:用于获取指定栏目下的文章列表。
  • {dede:channel}:用于获取栏目列表。

示例1:在首页显示“公司新闻”栏目的最新5篇文章

假设“公司新闻”栏目的ID是 1

  1. 登录织梦后台,找到“栏目管理”,查看“公司新闻”栏目的“栏目ID”,确认是 1
  2. 打开你的首页模板文件(通常是 /templets/default/index.htm)。
  3. 在你想要显示文章列表的位置,插入以下代码:
<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篇文章

  1. 同样,在模板文件中需要的位置插入代码。
  2. 使用 {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查询结果中获取 idtitle 字段的值,文章链接需要手动拼接成织梦的URL格式 /plus/view.php?aid=[id]

显示服务器物理文件夹(dir)的文件列表

这个需求织梦官方标签不直接支持,通常需要结合自定义函数或修改模板文件来实现。

警告: 此方法需要你具备一定的PHP和织梦模板知识,并且操作不当可能导致网站安全风险,请务必在本地测试环境验证无误后再部署到服务器。

实现思路:

  1. 在织梦模板中引入一个自定义的PHP函数。
  2. 这个PHP函数会读取服务器指定目录下的文件列表。
  3. 将文件列表处理成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 目录下的文件。

  1. 打开首页模板 /templets/default/index.htm
  2. 在文件最顶部(<!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} 标签是最佳选择。情况二 则属于高级定制,需要谨慎操作。

-- 展开阅读全文 --
头像
while循环语句的执行逻辑是什么?
« 上一篇 今天
dede后台页面如何直接修改?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码