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),仅供参考