4

url_rewrite を使用して、pagingモジュールの URL の非友好的なパラメーターを回避しようとしています。みたいなURLにpage-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 エンコードされています - OK、わかりやすい 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];
    }
}

これはDrupal7RC3用です

于 2010-12-27T02:12:27.383 に答える