当前位置:首页 > 行业动态 > 正文

如何在织梦DedeCms列表页实现输入数字跳转到指定分页?

在织梦DedeCms列表页,通过URL参数传递页码数字,即可实现跳转到指定分页。

在织梦DedeCms中,列表页的分页功能是一个常见的需求,为了提升用户体验,我们可以通过输入数字直接跳转到指定的分页,本文将详细讲解如何在织梦DedeCms列表页实现这一功能,并提供相关代码示例和FAQs。

一、准备工作

在开始之前,我们需要确保以下几点:

1、织梦DedeCms已安装并正常运行:确保你的网站已经搭建好,并且能够正常访问。

2、模板文件准备:找到需要修改的列表页模板文件,通常位于/templets/default/list_***.htm

3、了解分页参数:织梦DedeCms的分页参数通常是p,代表当前页数。

二、修改模板文件

1. 添加输入框和提交按钮

我们需要在列表页模板文件中添加一个输入框和一个提交按钮,打开你的列表页模板文件(例如list_article.htm),并在适当位置添加以下代码:

Markup
<form action="" method="get">
    <input type="text" name="p" id="pageNumber" placeholder="输入页码" style="width: 50px;">
    <input type="submit" value="跳转">
</form>

这段代码创建了一个表单,包含一个文本输入框和一个提交按钮,用户在输入框中输入想要跳转的页码后,点击提交按钮即可。

2. 使用JavaScript进行验证

如何在织梦DedeCms列表页实现输入数字跳转到指定分页?

为了提高用户体验,我们可以使用JavaScript对输入的页码进行简单的验证,确保用户输入的是有效的数字,在上述表单代码之后添加以下JavaScript代码:

Markup
<script type="text/javascript">
document.getElementById('pageNumber').addEventListener('keypress', function(event) {
    if (event.key === 'Enter') {
        event.preventDefault();
        this.form.submit();
    }
});
document.querySelector('form').addEventListener('submit', function(event) {
    var pageNumber = document.getElementById('pageNumber').value;
    if (!pageNumber || isNaN(pageNumber)) {
        alert('请输入有效的页码');
        event.preventDefault();
        return false;
    }
});
</script>

这段代码监听了输入框的键盘事件,当用户按下回车键时,会自动提交表单,它还会在表单提交前验证输入的内容是否为有效数字。

三、处理分页跳转

我们需要在PHP代码中处理分页跳转的逻辑,打开你的列表页模板文件,找到生成分页链接的部分,通常位于循环显示内容的下方,我们需要修改这部分代码,使其支持通过GET参数p 来指定当前页数。

假设原来的分页代码如下:

PHP
<?php
if ($cfg_cmspath == '/') {
    $pageval = ",";
} else {
    $pageval = ".html,";
}
$nowurl = $cfg_cmspath . $pageval . strtolower($row['typedir']) . '/' . strtolower($row['id']) . '.html';
include_once("include/arc.partview.class.php");
$arcpageview = new PartView();
$arcpageview>SetTemplet($cfg_basedir . $cfg_templates_dir . "/list_article.htm");
$arcpageview>Row = $row;
$arcpageview>PageNo = $cpage;
$arcpageview>TotalResult = $totalcount;
$arcpageview>PageSize = $row['listnum'];
$arcpageview>Flink = $flink;
$arcpageview>MakeUp($nowurl);
?>

我们需要将其修改为支持通过GET参数p 来指定当前页数,修改后的代码如下:

PHP
<?php
if ($cfg_cmspath == '/') {
    $pageval = ",";
} else {
    $pageval = ".html,";
}
$nowurl = $cfg_cmspath . $pageval . strtolower($row['typedir']) . '/' . strtolower($row['id']) . '.html';
include_once("include/arc.partview.class.php");
$arcpageview = new PartView();
$arcpageview>SetTemplet($cfg_basedir . $cfg_templates_dir . "/list_article.htm");
$arcpageview>Row = $row;
$arcpageview>PageNo = isset($_GET['p']) && is_numeric($_GET['p']) ? intval($_GET['p']) : $cpage;
$arcpageview>TotalResult = $totalcount;
$arcpageview>PageSize = $row['listnum'];
$arcpageview>Flink = $flink;
$arcpageview>MakeUp($nowurl);
?>

这样,当用户在输入框中输入页码并提交表单时,系统会根据输入的页码跳转到相应的分页。

如何在织梦DedeCms列表页实现输入数字跳转到指定分页?

四、测试功能

完成上述步骤后,保存模板文件并刷新页面,检查输入框和提交按钮是否正常显示,尝试输入不同的页码并点击提交按钮,确认页面是否正确跳转到指定的分页,如果一切正常,说明功能已经成功实现。

五、优化用户体验

为了进一步提升用户体验,可以考虑以下优化措施:

1、样式美化:通过CSS样式美化输入框和提交按钮,使其与页面整体风格更加协调。

2、错误提示:在JavaScript验证失败时,除了弹出警告框外,还可以在输入框旁边显示错误信息,让用户更容易理解问题所在。

3、历史记录:利用浏览器的历史记录功能,当用户刷新页面时,保留上一次输入的页码。

4、移动端适配:确保输入框和提交按钮在移动设备上也能正常使用。

如何在织梦DedeCms列表页实现输入数字跳转到指定分页?

六、完整代码示例

以下是一个完整的代码示例,结合了上述所有内容:

Markup
<! list_article.htm >
<!DOCTYPE html>
<html lang="zhCN">
<head>
    <meta charset="UTF8">
    <title>文章列表</title>
    <style>
        /* 样式美化 */
        #pageNumber {
            width: 50px;
            padding: 5px;
            marginright: 10px;
        }
        #jumpForm {
            display: flex;
            alignitems: center;
        }
    </style>
</head>
<body>
    <! 其他内容 >
    <div id="jumpForm">
        <input type="text" name="p" id="pageNumber" placeholder="输入页码" style="width: 50px;">
        <input type="submit" value="跳转">
    </div>
    <script type="text/javascript">
        document.getElementById('pageNumber').addEventListener('keypress', function(event) {
            if (event.key === 'Enter') {
                event.preventDefault();
                this.form.submit();
            }
        });
        document.querySelector('form').addEventListener('submit', function(event) {
            var pageNumber = document.getElementById('pageNumber').value;
            if (!pageNumber || isNaN(pageNumber)) {
                alert('请输入有效的页码');
                event.preventDefault();
                return false;
            }
        });
    </script>
    <?php
    if ($cfg_cmspath == '/') {
        $pageval = ",";
    } else {
        $pageval = ".html,";
    }
    $nowurl = $cfg_cmspath . $pageval . strtolower($row['typedir']) . '/' . strtolower($row['id']) . '.html';
    include_once("include/arc.partview.class.php");
    $arcpageview = new PartView();
    $arcpageview>SetTemplet($cfg_basedir . $cfg_templates_dir . "/list_article.htm");
    $arcpageview>Row = $row;
    $arcpageview>PageNo = isset($_GET['p']) && is_numeric($_GET['p']) ? intval($_GET['p']) : $cpage;
    $arcpageview>TotalResult = $totalcount;
    $arcpageview>PageSize = $row['listnum'];
    $arcpageview>Flink = $flink;
    $arcpageview>MakeUp($nowurl);
    ?>
    <! 其他内容 >
</body>
</html>

七、常见问题解答(FAQs)

Q1: 如何修改每页显示的文章数量?

A1: 在织梦DedeCms后台,进入“系统” > “系统设置” > “基本设置”,找到“每页显示文章数目”选项,修改对应的数值即可,也可以通过模板文件中的$row['listnum'] 变量来动态调整每页显示的文章数量。

Q2: 如果输入的页码超出范围怎么办?

A2: 可以在JavaScript验证部分添加额外的逻辑,确保输入的页码不超过总页数。

JavaScript
document.querySelector('form').addEventListener('submit', function(event) {
    var pageNumber = document.getElementById('pageNumber').value;
    var totalPages = <?php echo $totalPages; ?>; // 确保在PHP代码中计算总页数并传递过来
    if (!pageNumber || isNaN(pageNumber) || pageNumber > totalPages) {
        alert('请输入有效的页码');
        event.preventDefault();
        return false;
    }
});

这样可以确保用户只能输入有效的页码,并且不会超出总页数的范围。