You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 07:36:22