织梦 列表从第十条开始

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

使用 limit 参数(最推荐、最灵活)

这是实现该需求最标准、最灵活的方法,织梦的列表标签 {dede:list}{dede:arclist} 都支持 limit 属性,它用来限制记录的起始位置和获取的数量。

limit 的语法是:limit 起始位置,获取数量

核心思路:

  • 起始位置:从第 10 条开始,所以起始位置是 9(因为计算机是从 0 开始计数的)。
  • 获取数量:你想从第 10 条开始显示多少条,10 条,就写 10

操作步骤:

  1. 打开你的列表模板文件,通常位于 /templets/你的模板目录/ 目录下,文件名可能是 list_article.htm 或其他自定义名称。

  2. 找到织梦的列表标签,它通常是这样的:

    {dede:list pagesize='10'}
        <!-- 循环体内的内容,比如文章标题、摘要等 -->
        <li>
            <a href="[field:arcurl/]">[field:title/]</a>
            <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
        </li>
    {/dede:list}
  3. 修改 {dede:list} 标签,为其添加 limit 属性。

    示例1:从第10条开始,显示接下来的10条数据(即第10-19条)

    {dede:list limit='9,10' pagesize='10'}
        <!-- 循环体内的内容 -->
        <li>
            <a href="[field:arcurl/]">[field:title/]</a>
            <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
        </li>
    {/dede:list}
    • limit='9,10':表示从第 9 条记录(第10条数据)开始,获取 10 条记录。
    • pagesize='10':这个分页参数仍然保留,它控制的是分页器每页显示多少条,与 limit 是独立的,如果你不希望分页器混乱,可以保持 pagesizelimit 的第二个数字一致。

    示例2:从第10条开始,显示所有剩余数据(常用于无限滚动) 如果你希望从第10条开始一直显示到列表末尾,你可以不指定获取数量,或者设置一个很大的数字。

    {dede:list limit='9'}
        <!-- 循环体内的内容 -->
        <li>
            <a href="[field:arcurl/]">[field:title/]</a>
            <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
        </li>
    {/dede:list}
    • limit='9':只指定了起始位置,织梦会自动获取从该位置开始的所有记录。

优点:

  • 简单直接:只需修改一个标签属性。
  • 灵活可控:可以精确控制从哪里开始,显示多少条。
  • 性能良好:这是数据库查询层面的优化,效率很高。

通过修改 php 文件(不推荐,除非有特殊需求)

如果你想在后台的列表页管理界面就直接看到从第10条开始的结果,或者这个需求是全局性的,你可以修改核心PHP文件。注意:这种方法有升级被覆盖的风险,请谨慎操作。

核心思路: 修改织梦列表页的核心处理文件 arc.listview.class.php,强制改变 limit 语句。

操作步骤:

  1. 找到核心文件: 文件路径通常是:/include/arc.listview.class.php

  2. 备份这个文件!(非常重要!)

  3. 打开文件,找到 GetList() 方法(大约在 130-150 行左右,不同版本可能略有差异)。

  4. GetList() 方法中,找到生成 limit 语句的代码,通常是一个 if 判断,类似下面这样:

    if ($this->PageSize > 0) {
        $limit = " limit {$this->StartPage},{$this->PageSize}";
    } else {
        $limit = " limit 0,{$this->TotalResult}";
    }
  5. 修改 if 判断,强制设置一个固定的起始值,要让它总是从第10条开始:

    // 原代码
    // if ($this->PageSize > 0) {
    //     $limit = " limit {$this->StartPage},{$this->PageSize}";
    // } else {
    //     $limit = " limit 0,{$this->TotalResult}";
    // }
    // 修改后的代码
    if ($this->PageSize > 0) {
        // 强制起始位置为 9 (即第10条数据)
        $limit = " limit 9,{$this->PageSize}";
    } else {
        // 如果不分页,也强制从第10条开始显示
        $limit = " limit 9,{$this->TotalResult}";
    }
  6. 保存文件。

缺点:

  • 破坏性修改:修改了核心文件,未来织梦升级时,你的修改会被覆盖,需要重新修改。
  • 影响全局:这个修改会作用于所有使用这个核心文件的列表页,除非你做更复杂的判断。
  • 不灵活:无法针对某个特定的列表模板进行设置。

使用 JavaScript 实现前端分页(用户体验更好)

这种方法是现代网站常用的“无限滚动”或“点击加载更多”的实现方式,它不会改变服务器端的数据获取,而是先加载第一页,当用户滚动到页面底部时,通过 JavaScript 向服务器请求下一页的数据并追加到当前页面。

核心思路:

  1. 列表页模板 {dede:list} 保持不变,正常显示第一页数据。
  2. 在模板中添加一个“加载更多”的按钮或编写滚动监听脚本。
  3. JavaScript 获取下一页的链接(下一页 按钮的 href)。
  4. 通过 AJAX 请求下一页的内容。
  5. 将返回的内容解析并追加到当前列表的末尾。
  6. 隐藏已加载完的“下一页”按钮。

简单示例(需要一定前端基础):

  1. 模板文件 (list_article.htm) 修改:

    • 在列表标签后面添加一个加载按钮和下一页链接的容器。
      <div class="article-list">
      {dede:list pagesize='10'}
          <li>
              <a href="[field:arcurl/]">[field:title/]</a>
          </li>
      {/dede:list}
      </div>
    ```
  2. 编写 JavaScript 代码 (可以放在模板底部或引入外部JS文件):

    document.addEventListener('DOMContentLoaded', function() {
        const loadMoreBtn = document.getElementById('load-more-btn');
        const paginationContainer = document.getElementById('pagination');
        const articleList = document.querySelector('.article-list');
        let currentPage = 1;
        loadMoreBtn.addEventListener('click', function() {
            // 找到“下一页”的链接
            const nextPageLink = paginationContainer.querySelector('a.next');
            if (!nextPageLink) {
                loadMoreBtn.textContent = '没有更多了';
                loadMoreBtn.disabled = true;
                return;
            }
            // 获取下一页的URL
            const nextPageUrl = nextPageLink.href;
            // 使用 Fetch API 获取下一页内容
            fetch(nextPageUrl)
                .then(response => response.text())
                .then(html => {
                    // 创建一个临时DOM元素来解析返回的HTML
                    const parser = new DOMParser();
                    const doc = parser.parseFromString(html, 'text/html');
                    // 提取新的列表项
                    const newItems = doc.querySelector('.article-list').innerHTML;
                    // 追加到当前列表
                    articleList.insertAdjacentHTML('beforeend', newItems);
                    // 更新分页器(可选,可以隐藏旧的分页器)
                    // paginationContainer.innerHTML = doc.querySelector('#pagination').innerHTML;
                    // 更新当前页码
                    currentPage++;
                    // 如果下一页按钮不存在了,则禁用加载按钮
                    if (!doc.querySelector('a.next')) {
                        loadMoreBtn.textContent = '没有更多了';
                        loadMoreBtn.disabled = true;
                    }
                })
                .catch(error => {
                    console.error('加载失败:', error);
                    loadMoreBtn.textContent = '加载失败,请重试';
                });
        });
    });

优点:

  • 用户体验极佳:页面加载速度快,用户无需等待所有数据加载完毕。
  • 服务器压力小:初始请求的数据量少。
  • 不修改后端:对现有系统无侵入性。

缺点:

  • 需要前端开发能力:需要编写和维护 JavaScript 代码。
  • SEO 考虑:搜索引擎可能无法抓取通过 AJAX 动态加载的内容(但这通常通过技术手段可以解决)。

总结与建议

方法 优点 缺点 适用场景
limit 参数 简单、灵活、高效 无明显缺点 绝大多数情况下的首选,特别是需要简单实现“从某条开始显示”时。
修改PHP文件 影响后台管理界面 破坏性强、不灵活、升级覆盖风险高 极少使用,仅当有特殊后台管理需求且不担心升级时才考虑。
JavaScript 用户体验好、减轻服务器压力 需要前端技能、对SEO有要求 现代网站主流方案,适用于“无限滚动”、“加载更多”等交互场景。

对于你的问题“织梦列表从第十条开始”,我强烈推荐使用【方法一】,因为它最简单、最安全,且完全能满足你的需求,如果是为了提升用户体验,实现动态加载,方法三】是更好的选择。

-- 展开阅读全文 --
头像
C语言中LoadLibrary如何正确使用?
« 上一篇 01-04
织梦取消后台登陆验证码
下一篇 » 01-04

相关文章

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

目录[+]