Drupal 9如何将分页首页链接从/hub/blog?page=0改为/hub/blog
解决Drupal 9分页首页链接移除page=0参数的问题
两种可行方案,推荐用主题修改
完全可以在.theme文件里实现,也可以通过重写分页模板搞定,下面说具体操作:
方案1:修改主题的.theme文件
找到你的主题目录下的[你的主题机器名].theme文件(比如mycustomtheme.theme),添加这段代码:
/** * Implements hook_preprocess_pager(). */ function mycustomtheme_preprocess_pager(&$variables) { foreach ($variables['items'] as &$item) { // 定位到带page=0的首页链接 if (isset($item['href']) && strpos($item['href'], '?page=0') !== FALSE) { // 删掉page=0参数 $item['href'] = str_replace('?page=0', '', $item['href']); // 顺便清理query数组里的page参数 if (!empty($item['query']['page']) && $item['query']['page'] == 0) { unset($item['query']['page']); } } } }
把mycustomtheme换成你实际的主题机器名,清完缓存就能生效。
方案2:重写分页Twig模板
- 从Drupal核心的
core/modules/system/templates/pager.html.twig复制模板文件到你的主题templates目录 - 打开复制后的模板,找到生成链接的部分,针对首页链接做判断:
注意:不同版本的Drupal模板结构可能有点不一样,你得根据实际代码调整判断条件,比如有的模板里首页文本可能是图标或者其他标识,得对应上。{% if pager_item.text == 'First' and pager_item.query.page is defined and pager_item.query.page == 0 %} {{ pager_item.href|replace({'?page=0': ''}) }} {% else %} {{ pager_item.href }} {% endif %}
多主题场景?用自定义模块
如果你的网站有多个主题,或者不想把逻辑绑在主题上,就整个简单的自定义模块,实现同样的hook_preprocess_pager()钩子,代码和上面.theme里的差不多,只是函数名换成[你的模块名]_preprocess_pager()就行。
验证效果
改完清缓存,去/hub/blog?page=1点首页链接,应该直接跳/hub/blog,同时检查其他分页链接(下一页、末页这些)能不能正常用。
内容的提问来源于stack exchange,提问作者SheppardDigital
相关产品推荐
相关产品推荐

