织梦使用option下拉框

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

直接在模板文件中硬编码(最简单)

当你下拉框的选项是固定不变,不需要从后台数据中获取时,可以直接在模板文件中手写HTML代码。

适用场景:固定的性别选择(男/女)、固定的状态选择(启用/禁用)等。

示例代码

<select name="gender" id="gender">
    <option value="">请选择性别</option>
    <option value="1">男</option>
    <option value="2">女</option>
</select>

说明

  • name 属性:在表单提交时,用于标识这个字段。
  • id 属性:用于JavaScript或CSS进行精确定位。
  • value 属性:提交到服务器的实际值。
  • <option>标签之间的文本:用户在下拉框中看到的文本。

使用织梦的{dede:arclist}{dede:channel}标签动态生成(最常用)

这是织梦最核心、最强大的用法,通常用于动态生成栏目分类、文章列表等。

场景1:生成顶级栏目下拉框(用于文章分类选择)

使用{dede:channel}标签可以轻松获取栏目列表。

示例代码

<select name="typeid" id="typeid">
    <option value="0">请选择栏目</option>
    {dede:channel type='top' row='10'}
    <option value="[field:id/]">[field:typename/]</option>
    {/dede:channel}
</select>

代码解析

  • {dede:channel type='top' row='10'}:
    • type='top': 表示只获取顶级栏目,如果去掉这个属性,会获取包括所有子栏目在内的所有栏目。
    • row='10': 表示获取10个栏目,不写则默认获取所有。
  • [field:id/]: 输出当前栏目的ID。
  • [field:typename/]: 输出当前栏目的名称。

场景2:生成带层级的栏目下拉框(高级用法)

如果希望栏目在下拉框中能体现出层级关系(如“一级栏目 > 二级栏目”),需要使用{dede:channelartlist}并配合一些CSS样式。

示例代码

<select name="typeid" id="typeid">
    <option value="0">请选择栏目</option>
    {dede:channelartlist type='top' row='20'}
        <optgroup label="[field:typename/]">
            {dede:channel type='son' noself='yes'}
            <option value="[field:id/]">|-- [field:typename/]</option>
            {/dede:channel}
        </optgroup>
    {/dede:channelartlist}
</select>

代码解析

  • {dede:channelartlist}: 循环顶级栏目。
  • <optgroup label="...">: HTML中用于对选项进行分组的标签,label属性是分组的标题。
  • {dede:channel type='son' noself='yes'}: 在顶级栏目循环内部,再循环出该顶级栏目下的所有子栏目。
    • type='son': 表示获取子栏目。
    • noself='yes': 表示不获取栏目本身。
  • 这里用符号来模拟层级缩进,你也可以用CSS的padding-left来实现更美观的缩进效果。

通过调用自定义字段(自定义模型)

模型中添加了“单选列表”类型的自定义字段,织梦会自动为你生成一个下拉框。

适用场景:文章的来源选择、产品规格选择等。

操作步骤

  1. 在后台添加自定义字段

    • 进入“后台” -> “核心” -> “内容模型管理” -> 选择你想要修改的模型(如“文章”) -> “更改字段”。
    • 点击“添加新字段”。
    • 字段名: source (英文,用于数据库)
    • 字段别名: 来源 (中文,用于后台显示)
    • 字段类型: 单选列表(选择框)
    • 字段参数: 在这里输入你的选项,每行一个。
      新浪新闻
      搜狐新闻
      腾讯新闻
      其他
    • 保存。
  2. 在前台模板中调用: 在文章内容页模板(article_article.htm)中,直接使用{field:来源/}即可,织梦会自动将其渲染成一个<select>下拉框。

渲染后的HTML效果

<select name="source" id="source">
    <option value="新浪新闻">新浪新闻</option>
    <option value="搜狐新闻">搜狐新闻</option>
    <option value="腾讯新闻">腾讯新闻</option>
    <option value="其他">其他</option>
</select>

使用SQL直接查询数据库(最灵活)

当下拉框的数据来源比较复杂,或者不是织梦默认的栏目、文章表时,可以使用自定义SQL查询。

适用场景:从自定义的数据表中读取地区列表、品牌列表等。

示例代码

假设你有一个名为dede_shop_brands的表,你想从中读取所有品牌。

<select name="brand" id="brand">
    <option value="0">请选择品牌</option>
    {dede:sql sql='SELECT id, brandname FROM `dede_shop_brands` ORDER BY id ASC'}
    <option value="[field:id/]">[field:brandname/]</option>
    {/dede:sql}
</select>

代码解析

  • {dede:sql}: 织梦的自定义SQL标签。
  • sql='...': 你要执行的SQL查询语句。
  • [field:id/][field:brandname/]: 分别对应SQL查询结果中的idbrandname字段。

综合示例:一个完整的搜索表单

这是一个结合了多种方法的常见例子:一个带有分类和地区筛选的搜索框。

<form action="/plus/search.php" name="searchform" id="searchform">
    <div>
        <label for="keyword">关键词:</label>
        <input type="text" name="keyword" id="keyword" />
    </div>
    <div>
        <label for="typeid">文章分类:</label>
        <select name="typeid" id="typeid">
            <option value="0">全部分类</option>
            {dede:channel type='top' row='20'}
            <option value="[field:id/]">[field:typename/]</option>
            {/dede:channel}
        </select>
    </div>
    <div>
        <label for="areaid">所在地区:</label>
        <select name="areaid" id="areaid">
            <option value="0">全部地区</option>
            {dede:sql sql='SELECT id, area FROM `dede_area` ORDER BY paixu ASC'}
            <option value="[field:id/]">[field:area/]</option>
            {/dede:sql}
        </select>
    </div>
    <div>
        <button type="submit">搜索</button>
    </div>
</form>

总结与建议

方法 适用场景 优点 缺点
硬编码 固定不变的选项 简单直接,无需调用数据 不灵活,数据变更需修改代码
{dede:channel} 生成栏目列表 织梦原生支持,与系统无缝集成 仅适用于栏目等特定数据源
自定义字段 调用模型的单选/多选数据 无需写模板代码,后台配置即可 仅适用于模型内的数据
{dede:sql} 任意复杂的数据源 灵活性最高,可查询任意表 需要懂SQL,有一定性能开销

对于大多数织梦使用者来说,方法二({dede:channel})和方法三(自定义字段) 是最常用和最应该掌握的,根据你的具体需求选择最合适的方法即可。

-- 展开阅读全文 --
头像
dede调用当前栏目的二级栏目
« 上一篇 2025-12-30
C语言insertsort函数如何实现高效插入排序?
下一篇 » 2025-12-30

相关文章

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

目录[+]