Транслитерация имени пользователя и знак +
Доброго вечера, возможно кто-то уже решал подобную проблему, буду благодарен за любые подсказки.
Есть плагин показывающий виртуальную страницу пользователя userPagePlugin:
пробовал вырезать знак плюс разными способами, пробовал urldecode и htmlentities. Запретить ввод символа + не желательно и уже есть такие пользователи, которые используют имя для логина с плюсом.
Есть плагин показывающий виртуальную страницу пользователя userPagePlugin:
<?php
if ($modx->event->name != 'OnPageNotFound') {return false;}
$alias = $modx->context->getOption('request_param_alias', 'q');
if (!isset($_REQUEST[$alias])) {return false;}
$request = $_REQUEST[$alias];
$tmp = explode('/', $request);
if ($tmp[0] == 'users' && count($tmp) >= 2) {
$section = 1262;
$name = str_replace('.html', '', $tmp[1]);
if ($user= $modx->getObject('modUser', array('username' => $name))) {
$user_id = $user->get('id');
$username = $user->get('username');
$modx->setPlaceholder('username', $username);
$modx->setPlaceholder('user_id', $user_id);
$modx->setPlaceholders($user->Profile->toArray());
$modx->sendForward($section);
}
}
Работает отлично, спасибо modx.pro именно здесь найдено решение. Но теперь нужно русские имена транслитерировать, а ещё важнее понять что делать если в имени пользователя есть знак +, так как в этом случае плагин уже не отрабатывает.пробовал вырезать знак плюс разными способами, пробовал urldecode и htmlentities. Запретить ввод символа + не желательно и уже есть такие пользователи, которые используют имя для логина с плюсом.
Поблагодарить автора
Отправить деньги
Комментарии: 7
$modx->setPlaceholder('username', str_replace("+","+",$username));
или$modx->setPlaceholder('username', str_replace("+","+",$username));
Спасибо за идею, попробовал.
Только это же плейсхолдер, до него дело не доходит, знак плюс мешает где-то выше в запросе страницы.
пока сделал по другому:
Только это же плейсхолдер, до него дело не доходит, знак плюс мешает где-то выше в запросе страницы.
пока сделал по другому:
<?php
if ($modx->event->name != 'OnPageNotFound') {return false;}
$alias = $modx->context->getOption('request_param_alias', 'q');
if (!isset($_REQUEST[$alias])) {return false;}
$request = $_REQUEST[$alias];
$tmp = explode('/', $request);
if ($tmp[0] == 'users' && count($tmp) >= 2) {
$section = 1262;
$iduser = str_replace('.html', '', $tmp[1]);
$user = $modx->getObject('modUser', array('id' => $iduser));
$username = $user->get('username');
$modx->setPlaceholder('username', $username);
$modx->setPlaceholder('user_id', $iduser);
$modx->setPlaceholders($user->Profile->toArray());
$modx->sendForward($section);
}
теперь у меня в алиас уходит id юзера и все ссылки на юзеров через id. В целом получилось удобно для моих целей, но если найдётся способ с транслитерацией, будет здорово.
Вот сейчас вызов у тебя правильный (сверка по ID)
$user = $modx->getObject('modUser', array('id' => $iduser));
Да. Только я не могу в адресную строку потом имя передать. Если сверка по id то в строке браузера будет .../users/777. Как сделать чтобы было .../users/Гена после плагина со сверкой по id не могу придумать.
Дело в том, что первый плагин отрабатывает ссылку вида .../users/{$username}, а второй .../users/{$user_id}
Дело в том, что первый плагин отрабатывает ссылку вида .../users/{$username}, а второй .../users/{$user_id}
Тогда тебе надо работать через rawurldecode()
php.net/manual/ru/function.rawurldecode.php
php.net/manual/ru/function.rawurldecode.php
Тоже личные страницы есть. Проблему решаю просто, ссылка на профиль пользователя = username, который приводится в нижнем регистре и в котором запрещены все символы кроме букв и цифр. Этот момент отсекаю еще при регистрации, а сам username просто не вывожу для редактирования.
Согласен, так проще, но мне нужно решить вопрос по-другому. Уже есть много пользователей с разными именами, не хочу заставлять их менять.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.