MODx Revolution, ЧПУ, помогите расширить возможности

[Удален]
2097

Сталкнулся с такой задачей.

Необходимо реализовать ЧПУ с возможностью передавать параметры как ЧПУ.

Например, даже при включенных дружественных URL все равно приходится передавать параметры через стандартные параметры

http://site.ru/users/?user=my_login

В то время как мне необходимо иметь строку вида

http://site.ru/users/my_login

или хотя бы

http://site.ru/users/user/my_login

Как это реализовать в MODx Revolution?

siv1987
На сайте с 02.04.2009
Offline
427
#1

RewriteRule ^users/my_login /users/?user=my_login [L]

/users/?user=my_login можно заменить на оригинальную ссылку движка (как там в MODx не знаю)

[Удален]
#2

Близко, но не то...

Он не заходит на этот url, а переадресовывает на ссылку с параметром.

т.е. при попытке зайтина

/users/ivanov

переадресует на

/user?user=ivanov

IL
На сайте с 20.04.2007
Offline
435
#3

[L] не нужно.. слэш начальный, если RewriteBase указан - тоже..

---------- Post added 22-07-2012 at 01:56 ----------

А вообще, если официального дополнения нет, можно написать хак/плагин, который будет разбирать URL в параметры и передавать "дальше". Не проверял, но похоже, что-то вроде такого (для EVO?): http://venugopalreddy.com/modx/add-custom-friendly-urls-snippets/

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
[Удален]
#4

Иван, спасибо.

Все верно. Я сделал плагин, который отслеживает нужное событие и в нем обработал запрос.

Вот готовое решение данной задачи через PHP MODx Revolution

Создаем новый плагин. Называем его так, как нравится. В содержимое пишем


$eventName = $modx->event->name;

switch($eventName) {
// Отслеживаем событие 'OnHandleRequest'
case 'OnHandleRequest':
// Определяем метод запроса (включен ли ЧПУ)
$method = $modx->request->getResourceMethod();
if ($method == 'alias') {

// Получаем строку запроса, например 'users/24'
$resourceIdentifier = $modx->request->getResourceIdentifier($method);

// Получаем параметр, в котором приходит alias-запрос (по-умолчанию 'q')
$rAlias = $modx->getOption('request_param_alias', null, 'q');

// Ищем совпадение по нашему alias`у и разбиваем строку
// на два параметра
$matches = null;
if (preg_match('/^(users)\/(.*)/', $resourceIdentifier, $matches)){
$q = $matches[1];
$u = $matches[2];
$_GET[$rAlias] = $q;
$_REQUEST[$rAlias] = $q;
if (isset($u) && $u != ''){
$_GET['user'] = $u;
$_REQUEST['user'] = $u;
}
}
}
break;
}

Во вкладке Системные события ставим галочку напротив события 'OnHandleRequest'.

Сохраняем.

p.s. Не забудьте изменить параметры в регулярке согласно Вашему алиасу и передаваемым параметрам.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий