dede 隶属栏目必须选择?如何取消或修改?

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 DEDE建站 正文

下面我将从原因分析多种解决方案(从简单到复杂)以及最佳实践三个方面,详细讲解如何实现“隶属栏目必须选择”的功能。

dede 隶属栏目必须选择
(图片来源网络,侵删)

问题原因分析

“隶属栏目必须选择”这个需求,通常出现在后台的内容发布或投稿页面,在 Dedecms 中,这个栏目选择器通常是一个下拉菜单(<select>),其 name 属性通常是 typeidchannelid

问题之所以存在,是因为 Dedecms 默认的 JavaScript 表单验证不够严格,或者完全没有针对这个字段进行验证,即使不选择任何栏目直接提交表单,也能成功,只是后台数据会缺失 typeid 字段,导致内容在前台无法正常显示或调用。


解决方案

这里提供三种解决方案,您可以根据自己的技术能力和网站定制化程度来选择。

纯前端 JavaScript 验证(最简单、最常用)

这种方法通过修改发布页面的模板文件,添加一段 JavaScript 代码来检查用户是否选择了栏目,如果未选择,则阻止表单提交并提示用户。

dede 隶属栏目必须选择
(图片来源网络,侵删)

适用场景:快速实现,对系统核心文件无改动,方便维护。

操作步骤

  1. 找到模板文件 您需要修改的是内容发布页面的模板,这个文件通常位于 /templets/ 目录下,具体路径取决于您的后台风格和模板。

    • 默认后台风格路径/templets/system/ 目录下。
    • 常见的文件名如:article_add.htm (文章发布)、archives_add.htm (通用内容发布)、mynews_add.htm (自定义表单发布) 等。
  2. 添加 JavaScript 代码 在模板文件中,找到 <form> 标签,并给它加上一个 id 属性,id="myform",然后在 <form> 标签结束前,</form> 之前,添加下面的 JavaScript 代码。

    示例修改:

    <!-- 在 form 标签中添加 id -->
    <form action="dede/archives_add.php" enctype="multipart/form-data" method="POST" name="form1" id="myform">
        ... 原有的表单内容 ...
        <select name='typeid' id='typeid'>
            <option value='0'>请选择栏目...</option>
            {dede:channel type='son' currentstyle="<option value='@me' selected>@me</option>"}
            <option value='@me'>@me</option>
            {/dede:channel}
        </select>
        ... 原有的表单内容 ...
    </form>
    <!-- 在 </form> 标签前添加以下脚本 -->
    <script type="text/javascript">
    function checkSubmit() {
        // 获取栏目选择框的值
        var typeid = document.getElementById('typeid').value;
        // 判断是否为空或为默认值 '0'
        if (typeid == '' || typeid == '0') {
            alert('请选择隶属栏目!');
            // 让焦点回到栏目选择框
            document.getElementById('typeid').focus();
            // 阻止表单提交
            return false;
        }
        // 如果验证通过,则允许提交
        return true;
    }
    </script>
  3. 修改提交按钮 找到表单中的提交按钮(通常是 <input type="submit">),将其修改为调用上面的 checkSubmit() 函数。

    示例修改:

    <!-- 修改前 -->
    <input type='submit' name='submit' value='提交' class='coolbg' />
    <!-- 修改后 -->
    <input type='button' name='submit' value='提交' class='coolbg' onclick="return checkSubmit()" />

优点

  • 实现简单,只需修改模板文件。
  • 无需修改核心 PHP 文件,升级 Dedecms 时不易丢失修改。

缺点

  • 只能在客户端验证,用户如果禁用了 JavaScript,此验证将失效。
  • 对于技术用户,可以通过绕过前端验证直接提交数据。

后端 PHP 验证(最严谨、最推荐)

这种方法直接修改 Dedecms 处理表单提交的核心 PHP 文件,无论前端是否验证,服务器端都会再次检查,确保数据的合法性,这是最安全、最根本的解决方案。

适用场景:对数据完整性要求高的网站,希望从根源上解决问题。

操作步骤

  1. 找到核心处理文件 这个文件是所有内容发布表单的接收和处理中心,它位于 /dede/ 目录下。

    • 文件名:archives_add.php
  2. 在 PHP 文件中添加验证逻辑 用代码编辑器打开 archives_add.php 文件,找到处理表单提交的代码段,通常在文件的开头部分,在接收 $_POST$_GET 数据之后。

    在大约第 30-50 行左右,你会看到类似 $typeid = isset($typeid) ? $typeid : 0; 的代码,我们需要在它之后添加一个判断。

    示例修改:

    // ... 原有的代码 ...
    // 获取并处理栏目ID
    $typeid = isset($typeid) ? $typeid : 0;
    $typeid = preg_replace("#[^0-9]#", "", $typeid);
    // ====== 在这里添加我们的验证逻辑 ======
    if ($typeid == 0) {
        ShowMsg('请选择隶属栏目!', '-1');
        exit();
    }
    // ====================================
    // ... 继续原有的代码,如 $dsql, $arctitle, $body 等变量的获取 ...

    代码解释

    • if ($typeid == 0): 检查从表单提交过来的 typeid 是否为 0(即未选择任何栏目)。
    • ShowMsg('请选择隶属栏目!', '-1');: 这是 Dedecms 内置的函数,用于在页面上弹出一个提示框,并返回上一页。
    • exit();: 立即终止脚本执行,防止后续代码继续运行。

优点

  • 安全性最高,不受前端 JavaScript 状态影响。
  • 从数据源头保证完整性,是专业开发的标准做法。

缺点

  • 需要修改核心文件,如果未来 Dedecms 升级,这个修改可能会被覆盖,需要重新修改。

结合前后端验证(最佳实践)

这是最完善、最专业的解决方案,它结合了方案一和方案二的优点,既有友好的前端即时反馈,又有严谨的后端数据校验。

适用场景:所有对用户体验和数据安全有要求的正式项目。

操作步骤: 只需同时执行方案一和方案二的操作即可。

  1. 前端验证:按照方案一,修改发布页模板(如 article_add.htm),添加 JavaScript 代码和修改提交按钮,这样用户可以立即得到反馈,体验更好。
  2. 后端验证:按照方案二,修改核心处理文件(archives_add.php),添加 PHP 验证逻辑,这样即使前端被绕过,服务器也能拦截非法提交。

优点

  • 用户体验好(即时提示)。
  • 数据安全性高(双重保险)。
  • 代码结构清晰,职责分明。

缺点

  • 需要同时修改模板文件和核心文件。

针对不同场景的扩展

自定义表单(如会员投稿、留言板)

如果你的“隶属栏目”是在一个自定义表单里,方法类似。

  • 前端验证:找到对应的模板文件(如 /templets/plus/post_diy.php),在 <form> 标签中找到 typeid 的下拉框,添加和方案一相同的 JavaScript 验证逻辑。
  • 后端验证:找到处理该表单的 PHP 文件(通常是 /plus/diy.php),在这个文件中,找到处理数据的部分,在插入数据库之前,加入对 typeid 的判断逻辑,与方案二的 PHP 代码类似。

会员中心投稿

会员中心的投稿页面模板通常在 /templets/ 下的 member/ 目录里,article_add.php,修改方法和方案一、方案二完全一样,只是文件路径不同。

方案 优点 缺点 推荐度
前端验证 简单、快速、易于维护 不安全,可被绕过 ⭐⭐☆☆☆ (适合快速测试或内部使用)
后端验证 安全、严谨、根本 升级可能覆盖修改 ⭐⭐⭐⭐☆ (最推荐的核心解决方案)
前后端结合 最佳体验、最高安全 修改点较多,需同步维护 ⭐⭐⭐⭐⭐ (专业开发首选)

对于绝大多数情况,强烈推荐使用方案三(前后端结合),如果只是想快速搞定,方案二(后端验证) 也是完全可以接受的,因为它保证了数据的核心安全。

-- 展开阅读全文 --
头像
如何批量删除织梦文档中的关键词?
« 上一篇 02-14
织梦自定义表单内容如何调用?
下一篇 » 02-14

相关文章

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

目录[+]