Drupal: Hook_url_inbound_alter в url_rewrite: переписать запрос на URL для пейджинга
-
10-10-2019 - |
Вопрос
Я пытаюсь использовать url_rewrite для оборудования не дружелюбными параметрами в URL paging
модуль. Я хочу повернуть 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, это работает, бот заманки US, кодированный - ОК, он показал дружеский URL.
- Если я включите оба, страница переходит в бесконечную перенаправление 301 петлю.
- Комментированные варианты также не работают.
Да, я знаю, что лучше исправить paging
Использовать неверовой URL. Но модуль слишком сложный, чтобы сделать это надежно. pagination
Модуль не имеет для меня функций.
Проблема в изменении URL? Что я могу сделать, чтобы это работало?
Решение
$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
Не связан с StackOverflow