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

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模板

  1. 从Drupal核心的core/modules/system/templates/pager.html.twig复制模板文件到你的主题templates目录
  2. 打开复制后的模板,找到生成链接的部分,针对首页链接做判断:
    {% 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 %}
    
    注意:不同版本的Drupal模板结构可能有点不一样,你得根据实际代码调整判断条件,比如有的模板里首页文本可能是图标或者其他标识,得对应上。

多主题场景?用自定义模块

如果你的网站有多个主题,或者不想把逻辑绑在主题上,就整个简单的自定义模块,实现同样的hook_preprocess_pager()钩子,代码和上面.theme里的差不多,只是函数名换成[你的模块名]_preprocess_pager()就行。

验证效果

改完清缓存,去/hub/blog?page=1点首页链接,应该直接跳/hub/blog,同时检查其他分页链接(下一页、末页这些)能不能正常用。

内容的提问来源于stack exchange,提问作者SheppardDigital

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:12:53