Drupal 9搜索表单:如何仅提交后显示无结果提示?
解决Drupal 9.3 + Search API视图无结果提示仅在提交后显示的问题
方法一:用Twig条件控制无结果文本显示
这是无需额外开发的简便方案:
- 进入目标搜索视图的编辑页面,找到「No result behavior」区域,删除默认文本项,添加「Global: Text area」(自定义文本区域)
- 在文本编辑框切换到「Twig」模式,输入以下代码(若URL中搜索关键词参数不是
keys,替换为实际参数名即可):
{% if app.request.query.get('keys') %} 抱歉,未找到匹配的搜索结果,请尝试更换关键词或调整筛选条件。 {% endif %}
- 保存视图设置。原理:初始加载页面时无搜索请求参数,Twig判断不成立,提示不显示;用户点击提交后URL携带搜索参数,此时若无结果,条件成立则提示显示。
方法二:通过自定义模块钩子控制
需要更灵活逻辑时,可编写自定义模块实现:
- 在自定义模块的
.module文件中添加以下代码(替换search_view和page_1为你的视图机器名与显示ID):
/** * Implements hook_views_pre_render(). */ function my_custom_module_views_pre_render(\Drupal\views\ViewExecutable $view) { // 定位目标搜索视图和显示 if ($view->id() === 'search_view' && $view->current_display === 'page_1') { // 获取搜索请求参数(根据实际参数名调整) $search_keys = \Drupal::request()->query->get('keys'); // 无搜索参数时清空无结果行为内容 if (empty($search_keys)) { $view->empty = []; } } }
- 启用自定义模块并刷新缓存即可生效。
方法三:调整视图暴露表单与过滤器设置
若希望初始状态下视图不执行空搜索:
- 进入视图「Advanced」设置,找到「Exposed form」确保提交按钮可见
- 在视图「Criteria」中,将Search API的「Fulltext search」过滤器设置为「Exposed」(暴露给用户)
- 可选:若要求用户必须输入关键词才能搜索,勾选过滤器的「Required」选项,初始状态视图不会执行查询,自然不会显示无结果提示;若允许空提交(如筛选其他条件),则不勾选「Required」,配合方法一的Twig判断即可。
内容的提问来源于stack exchange,提问作者Andrei
相关产品推荐
相关产品推荐

