October CMS Search Input 搜索输入控件实战指南:从 data-control 标记到后端 Search Widget 的完整实现
CMS后端前端【免费下载链接】octoberSelf-hosted CMS platform based on the Laravel PHP Framework.项目地址https://gitcode.com/gh_mirrors/oc/october点击查看免费下载导读本文以 October CMS 仓库中 search-input 控件文档 为主体系统讲解后台搜索输入框的完整技术方案包括带清空按钮、加载状态与搜索图标的 HTML 结构、data-*属性约定、前端控件的生命周期与交互逻辑以及与之配套的后端SearchWidget 与会话存储机制。读完本文你将能够在 October CMS 的列表页、设置页等后台场景中独立实现一个可实时触发 AJAX 请求、支持一键清空并自动刷新数据的搜索框。一、控件概览一个完整的搜索输入框由什么组成在 October CMS 的 Toolbox 前端框架中搜索输入Search Input是一个开箱即用的交互控件。按照 官方控件文档 的定义它需要同时具备三项能力清空输入clear input输入有内容时显示清空按钮点击后一键清空加载状态loading state发起 AJAX 请求时显示加载指示器搜索图标search icon输入框内渲染一个搜索图标通过storm-icon-pseudo伪元素类实现。该控件在仓库中的完整实现位于 modules/system/assets/toolbox/controls/search-input/ 目录包含三个文件文件作用README.md官方用法文档给出基础 HTML 示例search-input-control.js控件前端逻辑基于 larajax 的ControlBasesearch-input-control.css控件视觉样式.control-search规则从 toolbox.js 的源码可以看到该控件在 Toolbox 中通过registerControl(search-input, SearchInputControl)完成注册任何页面只要引入 Toolbox 并在元素上声明对应的data-control属性即可自动激活。需要特别指出一个值得注意的细节README.md 中示例使用data-controlsearchwidget但仓库内实际注册的控件名是search-input见 toolbox.js后端 Search Widget 的渲染 partial 与 UI 辅助视图 中使用的也都是data-controlsearch-input。因此实际使用时请以search-input为准。二、基本用法纯 HTML 上手官方示例完整还原官方文档给出的最小可用示例是纯 HTML 结构不依赖任何后端代码适合直接在页面中验证控件行为。完整代码如下div>init() { this.$form this.element.closest(form); this.$triggerEl this.$form ? this.$form : this.element; this.$input this.element.querySelector([data-search-input]); this.$clearBtn this.element.querySelector([data-search-clear]); this.extraData null; }初始化阶段完成三件事向上查找最近的form若控件位于表单内后续 AJAX 请求将以表单为触发容器自动携带表单数据定位[data-search-input]输入框与[data-search-clear]清空按钮预留extraData字段供请求附加数据。3.2 连接connect与事件监听connect() { this.element.classList.add(control-search); this.element.classList.add(size-input-text); this.element.classList.add(loading-indicator-container); this.listen(ajax:setup, this.linkToListWidget); this.listen(ajax:request-complete, this.$triggerEl, this.toggleClearButton); this.listen(input, this.$input, this.toggleClearButton); this.listen(click, this.$clearBtn, this.clearInput); this.toggleClearButton(); }连接阶段注册了四条关键监听ajax:setup在每次 AJAX 请求配置阶段执行linkToListWidget将列表联动数据注入请求上下文ajax:request-complete请求完成后同步清空按钮的显隐状态例如服务端重置了搜索词后按钮应隐藏input用户键入时实时切换清空按钮click点击清空按钮时执行clearInput。同时disconnect()会移除上述三个样式类保证控件销毁后不污染页面样式。3.3 清空与重新搜索clearInputclearInput() { this.$input.value ; this.toggleClearButton(); if (this.$input.dataset.request) { oc.request(this.$input); } }这是该控件最实用的行为点击清空按钮后不仅清空输入内容还会自动重新发起一次 AJAX 请求前提是输入框定义了data-request。因此清空搜索条件并刷新列表无需任何额外代码即可实现——这也是搜索体验中非常常见的需求。3.4 与列表联动linkToListWidgetlinkToListWidget(ev) { var listId $(this.element).closest([data-list-linkage]).data(list-linkage); if (!listId) { return; } var $widget $(#listId .control-list:first); if (!$widget.data(oc.listwidget)) { return; } ev.detail.context.options.data.allChecked $widget.listWidget(getAllChecked); }当搜索框外层存在data-list-linkage属性指向某个 List Widget 的 ID时控件会在 AJAX 请求前把列表当前全选状态allChecked注入请求数据从而保证搜索过滤时不会丢失用户的选择状态。源码中该处带有// todo this should be moved to the list widget注释可见官方倾向未来将此联动逻辑下沉到 List Widget 内部从源码结构看这是已知的演进方向。四、与后端 Search Widget 的结合列表页搜索的真实用法前端控件只是壳搜索的真正业务逻辑由后端 Backend\Widgets\Search 承担。该类的类注释明确写道Used for building a toolbar, Renders a search container即它专为列表工具栏构建搜索容器而设计。4.1 可配置属性通过fillFromConfig见 Search.php可知Search Widget 支持以下配置属性默认值说明prompt无搜索框占位提示文本Lang翻译键渲染时经Lang::get()解析见 prepareVarsgrowabletrue是否可伸缩为真时追加is-growable样式类partial无自定义 partial 文件定义在控制器上下文解析mode无搜索模式通常传给模型的searchWhere()查询scope无自定义查询方法名通常传给查询构造器searchOnEnterfalse是否仅在按下回车时触发搜索为false时每次键入都触发4.2 渲染输出Widget 渲染时render()默认调用 partials/_search.php其输出与第二节的 HTML 示例结构一致但加入了 Widget 特有的动态内容data-request? $this-getEventHandler(onSubmit) ?请求指向 Widget 的onSubmit事件处理器name? $this-getName() ?字段名由 getName() 生成格式为search[term]别名[term]? !$searchOnEnter ? data-track-input : ?当配置searchOnEnter: true时移除data-track-input属性从而只在回车时触发请求额外追加is-searchable样式类。4.3 onSubmit 与搜索词的会话存储后端处理逻辑集中在 onSubmit()通过post($this-getName())读取本次提交的搜索词调用setActiveTerm()将搜索词写入会话session——空字符串或非字符串值会重置会话非空值则调用putSession(term, $term)持久化触发search.submit事件供列表等业务方监听并执行过滤若事件返回数组则以array_merge合并为可渲染的视图数据异常时清空搜索词并重新抛出。对应的读取侧是getActiveTerm()见 Search.php通过getSession(term, )从会话恢复当前搜索词——这意味着搜索词在请求间天然保持刷新页面后搜索条件不会丢失。而resetSession()则在搜索词被清空时生效与前端clearInput()的自动重新请求形成完整闭环。五、视觉样式CSS 细节search-input-control.css 中为.control-search定义了两种特殊场景的视觉规则.control-search { .is-modal-search .form-control, .form-control.recordfinder-search { background-position: right -81px !important; border-top-color: transparent; border-left-color: transparent; border-right-color: transparent; border-radius: 0; padding-left: 22px; } }当容器带有is-modal-search类弹窗内的搜索框或输入框带有recordfinder-search类RecordFinder 控件的搜索框时采用无边框、无圆角、左侧留白 22px的扁平化样式使搜索框在弹窗场景下与内容区域融为一体background-position: right -81px !important用于对齐搜索图标的背景位图位置。六、进阶用法与生态配合6.1 UI 辅助视图开箱即用的 PHP 渲染函数除了手写 HTML 和通过 Widget 渲染仓库还提供了独立的 UI 辅助视图 modules/system/views/ui/input/search-input.php。它接受name、placeholder、value、handler等变量并在传入handler时自动追加data-request $handler, data-request-trigger input changed delay:500, data-load-indicator , data-load-indicator-opaque true,其中data-request-triggerinput changed delay:500表示输入变化后延迟 500ms 防抖再发起请求——这与data-track-input的即时触发策略不同更适合高频输入场景可显著减少无效请求。6.2 系统设置侧栏中的搜索modules/system/partials/_system_sidebar.php 展示了该控件在真实后台页面中的用法settings-nav控件通过data-search-input#settings-search-input指定目标搜索框 ID实现在设置列表中键入即过滤菜单项的效果点击Show All Settings后还会自动$(#settings-search-input).focus()聚焦搜索框。6.3 与 Toolbox 其他控件的组合搜索输入控件位于 Toolbox 的controls/目录与 change-monitor、input-trigger、loader-container、toolbar 等控件平级。实际项目中搜索框通常作为 Toolbar 的一部分与列表联动——这也正是 Search Widget 类注释中为构建工具栏而生的设计定位。七、总结October CMS 的 Search Input 解决方案是一条完整的技术链路前端data-controlsearch-inputdata-search-input/data-search-clear属性即可激活控件自动获得搜索图标、加载指示、实时键入监听与一键清空清空后自动重新请求能力核心逻辑见 search-input-control.js后端Backend\Widgets\Search 提供prompt、growable、searchOnEnter等配置项onSubmit处理器通过search[term]字段读写会话中的搜索词并通过search.submit事件与列表过滤逻辑解耦样式.control-search规则覆盖普通工具栏与弹窗modal-search / recordfinder-search两种视觉场景。无论是手写 HTML 快速验证还是通过 Search Widget 构建正式列表页搜索均可直接复用本文的完整示例与源码级解析。赞分享CMS后端前端【免费下载链接】octoberSelf-hosted CMS platform based on the Laravel PHP Framework.项目地址https://gitcode.com/gh_mirrors/oc/october点击查看免费下载相关推荐October CMS Tab Control 标签页控件完全指南从 Bootstrap 封装到后端表单集成October CMS Tab Control 标签页控件完全指南从 Bootstrap 封装到后端表单集成 October CMS 的 Tab ControCMS后端前端October CMS 可视化配置 Inspector 控件完整指南从 HTML data 属性到 JSON Schema 的端到端实战October CMS 可视化配置 Inspector 控件完整指南从 HTML data 属性到 JSON Schema 的端到端实战 InspectorCMS后端前端Mongoose Atlas Search 完整实战指南从 Schema 搜索索引到 $search、向量搜索与混合检索Mongoose Atlas Search 完整实战指南从 Schema 搜索索引到 $search、向量搜索与混合检索 Mongoose 对 MongoDB数据库后端上一篇CXX 内置绑定Built-in Bindings完全参考Rust 与 C 之间可直接互通的 12 类类型下一篇YimMenu终极教程GTA5免费辅助工具完整配置与安全使用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Hyperf Nano 极简框架实战:单文件、零配置、闭包风格快速构建 Hyperf 应用

Hyperf Nano 极简框架实战:单文件、零配置、闭包风格快速构建 Hyperf 应用

后端Web框架微服务RPC框架异步编程 【免费下载链接】hyperf 🚀 A coroutine framework that focuses on hyperspeed and flexibility. Building microservice or middleware with ease. 项目地址: https://gitcode.com/hyperf/hyperf 点击查看 免费下载 …

2026/10/12 6:42:39 阅读更多 →
PaddleX 3.0.0 RC 接口升级全解析:模型与产线配置、推理 API 及产线功能变更指南

PaddleX 3.0.0 RC 接口升级全解析:模型与产线配置、推理 API 及产线功能变更指南

人工智能大模型低代码计算机视觉深度学习NLP模型推理服务RAG 【免费下载链接】PaddleX All-in-One Development Tool based on PaddlePaddle 项目地址: https://gitcode.com/paddlepaddle/PaddleX 点击查看 免费下载 导读 PaddleX 3.0.0 RC 对模型(Mod…

2026/10/12 1:09:02 阅读更多 →
uniTerm v1.9.5:AI原生终端工作台深度解析

uniTerm v1.9.5:AI原生终端工作台深度解析

1. uniTerm 是什么:一个被低估的 AI 原生终端工作台uniTerm v1.9.5 这个版本号乍看平平无奇,但如果你最近在 Linux 桌面、WSL 或 macOS 上频繁切换 Terminal.app、iTerm2、Tabby、VS Code 内置终端,甚至还在为 SSH 连接卡顿、多项目并行调试时…

2026/10/14 7:25:44 阅读更多 →

最新新闻

IntelliJ IDEA 的Qoder CN 插件报错“暂时无法同步代码库索引选择”怎么解决?完整排查与修复指南

IntelliJ IDEA 的Qoder CN 插件报错“暂时无法同步代码库索引选择”怎么解决?完整排查与修复指南

摘要 本文针对在IDEA中使用Qoder CN时出现的报错,给出官方说明与实战解决步骤。官方指出需启用代码库索引:可点击“创建”手动启用,或切换“自动索引”。实战中,先登录Qoder CN且不要输入提示词,再进入设置—>Qode…

2026/10/14 17:36:00 阅读更多 →
PTZ-C8T6.zip 云台控制 C 工程解析:编译、协议与避坑指南

PTZ-C8T6.zip 云台控制 C 工程解析:编译、协议与避坑指南

简介:PTZ-C8T6.zip 是一份面向嵌入式开发初学者与 STM32 学习者的云台控制项目工程源码,基于 STM32F103 系列芯片与 HAL 库构建,适合用于课程设计、毕业设计或电赛类云台控制方案的参考与二次开发。压缩包共 98 个文件,约 675KB&a…

2026/10/14 17:36:00 阅读更多 →
Python 读取 Excel 并写入 zip:自动化报表打包实战

Python 读取 Excel 并写入 zip:自动化报表打包实战

简介:这份资源面向需要处理表格数据的Python学习者与开发者,聚焦Excel文件的读取与写入这一常见任务,帮助解决数据分析、数据清洗与自动化报告中的表格操作问题。压缩包共4个文件,全部为py脚本,整体约6KB,涵…

2026/10/14 17:36:00 阅读更多 →
Terminus(Olares)RabbitMQ 中间件集成实战:用 OlaresManifest.yaml 声明式接入消息队列

Terminus(Olares)RabbitMQ 中间件集成实战:用 OlaresManifest.yaml 声明式接入消息队列

云原生后端运维 【免费下载链接】Terminus Open-Source Personal Cloud OS for Always-On Agents 项目地址: https://gitcode.com/gh_mirrors/terminus2/Terminus 点击查看 免费下载 本篇技术指南基于 Terminus 仓库中 RabbitMQ 集成文档 展开,讲解如何…

2026/10/14 17:36:00 阅读更多 →
九轴姿态解算实战:C语言实现Mahony互补滤波与四元数融合

九轴姿态解算实战:C语言实现Mahony互补滤波与四元数融合

简介:九轴姿态解算源代码是一套面向嵌入式开发、无人机及机器人等场景的C语言实现,融合加速度计、磁力计与陀螺仪数据,用于实时估计物体的横滚、俯仰与偏航角。资源包含4个文件,全部为2个C源文件和2个头文件,压缩包仅5…

2026/10/14 17:36:00 阅读更多 →
C#工业级图形面积周长计算:精度、鲁棒性与性能平衡

C#工业级图形面积周长计算:精度、鲁棒性与性能平衡

1. 项目概述:为什么一个“图形周长、面积计算”功能值得花时间深挖? 你可能第一眼看到“C# 图形周长、面积计算”这个标题,会下意识觉得:“不就是几个数学公式封装成方法吗?勾股定理、πr、底高2……抄一遍就完事。”我…

2026/10/14 17:34:59 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →