2010-12-15 65 views
3

我試圖使用url_rewrite來解決paging模塊的URL中的不友好參數。我希望將網址page-title.html?page=0,1轉換爲page-title/page1.htmlDrupal:url_rewrite中的hook_url_inbound_alter:重寫查詢的URL部分

這裏是我的鉤:

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模塊缺乏對我的功能。

網址改變是否存在問題?我能做些什麼來使它工作?

+0

我必須說,我有點糊塗了。你爲drupal-6標記了這個問題,然而hook_url_outbound_alter(http://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_url_outbound_alter/7)自從Drupal 7以來一直存在另一方面,分頁模塊(http://drupal.org/project/paging)尚未被移植到Drupal 7,僅適用於Drupal 6及更早的版本。 – Oswald 2010-12-27 00:06:54

+0

我使用url_alter模塊,以便具有向前兼容性。 – 2011-05-29 07:51:29

回答

2

$options['query']是包含查詢參數及其值的數組,所以你將不得不做一些像

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

還要注意的是$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