按照《Drupal8自定义主题下搜索功能的实现》的说明完成search模块的基本配置,在默认主题或者自定义主题变动不太大的情况下,上述配置可以让搜索功能正常使用。但是,在自定义主题环境下,实际应用中还是会遇到不少问题:区块复用、模板修改、表单配置、变量应用、按钮设置、日期格式的调试等。
一、search区块复用
search模块安装、启动后,会在content区域下生成一个search区块,该区块可以在其他任何区域调用,即:调试好一个search区块的样式后,该区块可以在其它任何区域调用、复用,从而减少开发成本,提高工作效率。
二、搜索模板使用
另外,与搜索模块密切相关的模板有两个,一是搜索页面模板page--search.html.twig,主要用来布局搜索页面的基本样式,通过{{page.content}}变量连接搜索结果;二是搜索结果模板search-result.html.twig,主要是用来输出标题、描述、发布日期等节点内容。
三、搜索变量调用
在搜索结果模板中search-result.html.twig中,有标题{{title}}、描述{{snippet}}、发布日期{{info_split.date}}3个常用的变量,其它变量可根据模板说明详细了解。
四、日期格式修改
默认情况下,搜索结果中的发布日期{{info_split.date}}字段按照“01/12/2022-16:20”格式显示。可以在“管理->配置->日期->Default_short_date”中重新定义发布日期字段的格式。例如,设置“Default_short_date”为“Y-m-d”格式,则搜索结果中的发布日期字段显示为“2022-01-12”形式,依次类推。
五、form表单配置
Drupal的search功能要想生效,必须在form表单中指定action="/search/node",即:<form name="searchForm" id="searchForm" action="/search/node" method="GET"> </form>,其它参数根据实际需要配置即可。
六、搜索按钮修改
最后是搜索按钮的修改。查找了search模块的很多模板也没有找到修改搜索按钮的变量。最后在一个英文网站上找到了方法:通过一个函数ThemeName_form_search_block_form_alter来修改input的value值,进而实现修改搜索按钮样式/图标的目标。具体来说,在自定义主题下,新建一个/themes/ThemeName/ThemeName.theme文件之后,把下面的代码放进去,点击保存,重建缓存,即可将搜索按钮修改成“搜索”或者你想要实现的目标字体。
function ThemeName_form_search_block_form_alter(&$form, &$form_state) {
$form['keys']['#attributes']['placeholder'][] = t('请输入关键词');
$form['actions']['submit']['#value'] = html_entity_decode('搜索');
$form['actions']['submit']['#attributes']['class'][] = 'search-button';
}
这段代码,需要说明4点:
ThemeName:表示自定义主题的名称,一定要修改,否则函数不生效;
代码第一行:修改input的placeholder值;
代码第二行:把drupal默认搜索图标修改成“搜索”文字,如果“搜索”文字不显示,则去掉input中的class类即可显示;
代码第三行:给搜索按钮添加一个类search-button,用来重新定义搜索按钮的样式。
七、隐藏冗余内容
在搜索结果页面中,会额外出现一个搜索框、搜索帮助信息、搜索区块标题等内容。如果要隐藏掉这些内容,可以通过审核元素,找到.search-form,.search-form+h2类,在指定媒介中通过display:none把它们全部隐藏掉。
八、搜索分页功能
配置好普通列表的分页功能后,搜索结果列表页也会自动调用分页功能。可以在搜索结果的分页模板中,直接修改上一页,下一页,首页,末页等信息;需要注意的是,为了确保搜索功能正常使用,在布局搜索功能前,不要动去动搜索相关的任何模板、参数,甚至标签;等有测试数据的时候,能搜索出来结果时,再根据搜索结果页面调用搜索结果页面就行了。另外,搜索结果列表中,可以调用自定义字段的,也可以调用默认字段,具体格式根据模板的解说使用即可。
九、搜索结果表单
表单作为节点出现在搜索结果列表中,某些字段如果没有显示,可以在webform表单实体中添加对应字段,使用《drupal9搜索结果中怎么打印field_image等自定义字段?》方法把添加的字段导入搜索结果列表即可显示。