4

我正在尝试使用 url_rewrite 来解决paging模块 URL 中的非友好参数。我希望将 URLpage-title.html?page=0,1转换为page-title/page1.html.

这是我的钩子:

function mymod_url_outbound_alter(&$path, &$options, $original_path) {
    $localPath = $path . '?' . $options['query'];
    dpm("_url_outbound_alter($localPath)");
    if (preg_match('|(.+)\.html\?page=0%2C(\d+)|', $localPath, $matches)) {
        $path = "${matches[1]}/page${matches[2]}.html";
        unset($options['query']);
        dpm("altering path to $path");
    }
}

function mymod_url_inbound_alter(&$result, $path, $path_language) {
    if (preg_match('|(.+)/page(\d+)\.html|', $path, $matches)) {
        //$result = "${matches[1]}.html?page=0,${matches[2]}";
        $result = "${matches[1]}.html";
        //$_GET['q'] = "page=0,${matches[2]}";
        $_GET['page'] = "0,${matches[2]}";
        dpm("altering in-path to $result");
    }
}

function mymod_boot() {}

是不是不能在 hook_url_inbound_alter 中添加查询部分?

  • 如果我注释掉 mymod_url_outbound_alter,它可以工作,机器人逗号我们 URL 编码 - 好的,它确实显示了友好的 URL。
  • 如果我同时启用两者,页面将进入无限重定向 301 循环。
  • 注释掉的变体似乎也不起作用。

是的,我知道最好修复paging使用非查询 URL。但是该模块有点过于复杂,无法可靠地做到这一点。pagination模块对我来说缺少功能。

是 URL 更改的问题吗?我该怎么做才能让它发挥作用?

4

1 回答 1

3

$options['query']是一个包含查询参数及其值的数组,因此您必须执行类似的操作

$localPath = $path . '?' . $options['query']['page']

另请注意,$path尚未被 Path 模块重写。这对我有用:

function pageing_url_outbound_alter(&$path, &$options, $original_path)
{
    if ($path == 'admin/content' && isset($options['query']['page']))
    {
        $path = 'admin/content/page' . $options['query']['page'];
        unset($options['query']['page']);
    }
}

function pageing_url_inbound_alter(&$path, $original_path, $path_language)
{
    if (preg_match('|admin/content/page(\d+)|', $path, $matches))
    {
        $path = 'admin/content';
        $_GET['page'] = $matches[1];
    }
}

这适用于 Drupal 7 RC3

于 2010-12-27T02:12:27.383 回答