Как заменить username на id
Есть такой плагин, который отвечает за переадресацию на страницу пользователя
Одним словом, страница с пользователями на сайте реализована так же как на modx.pro
Сейчас есть страница типа /user
И с нее мы можем перейти на страницу самого пользователя user/username
Нужна помощь, как реализовать вместо username — id пользователя
Чтобы вместо вида /user/username был вид ссылок /user/id
Одним словом, страница с пользователями на сайте реализована так же как на modx.pro
Сейчас есть страница типа /user
И с нее мы можем перейти на страницу самого пользователя user/username
Нужна помощь, как реализовать вместо username — id пользователя
Чтобы вместо вида /user/username был вид ссылок /user/id
<?php
if ($modx->event->name != 'OnPageNotFound') return;
$users_page_id = $modx->getOption('users_page_id', $scriptProperties, '');
$redirect_to_username = $modx->getOption('redirect_to_username', $scriptProperties, 1);
$strict_urls = $modx->getOption('strict_urls', $scriptProperties, 1);
if ($page = $modx->getObject('modResource',intval($users_page_id))) {
$req = $modx->context->getOption('request_param_alias', null, 'q');
$url = $_REQUEST[$req];
$cont_type = $modx->getObject('modContentType',array('name' => 'HTML'));
$cont_ext = $cont_type->get('file_extensions');
$cont_isfolder = $page->get('isfolder');
$page_url = $modx->makeUrl(intval($users_page_id));
$cont_suf = $modx->getOption('container_suffix', null, '/');
$url_explode = explode($page_url, $url, 2);
$position = strpos($url, $page_url);
if ($position !== false && $position == 0 && count($url_explode) == 2) {
if (!empty($cont_ext) && $cont_ext != '/') {
$tmp = explode($cont_ext,$url_explode[1]);
$url_explode[1] = $tmp[0];
}
if (substr($url_explode[1],-1) == '/') $url_explode[1] = substr($url_explode[1],0,-1);
if (substr($url_explode[1],0,1) == '/') $url_explode[1] = substr($url_explode[1],1);
if ($redirect_to_username && is_numeric($url_explode[1]) && $user = $modx->getObject('modUser', intval($url_explode[1]))) {
if ($cont_isfolder == 1 && $cont_suf == "/") {
$page_url = substr($page_url,0,-1);
}
$modx->sendRedirect($page_url.'/'.$user->get('username').$cont_type->get('file_extensions'));
}
if ($strict_urls) {
$redirect = false;
if (!empty($cont_ext)) {
if ($cont_ext == '/' && substr($url,-1) != '/') $redirect = $url.$cont_ext;
elseif (strpos($url, $cont_ext) === false) $redirect = $url.$cont_ext;
}
elseif (substr($url,-1) == '/') $redirect = substr($url,0,-1);
if ($redirect) $modx->sendRedirect($redirect);
}
if ($user = $modx->getObject('modUser', array('username' => $url_explode[1]))) {
$modx->setPlaceholders($user->Profile->toArray());
$modx->setPlaceholders($user->toArray());
$modx->sendForward($users_page_id);
}
}
}
return;
Комментарии: 6
В добавок напишу, что в плагине есть еще параметр отдельный
redirect_to_username
Да/Нет
Да
redirect_to_username
Да/Нет
Да
Неужели никто не сможет помочь?
Так весь ответ в этой строчке
Возьми и проставь в поле псевдоним в id ресурса и будет то, что просишь.
Другое дело если пользователей пару тысяч.
$page = $modx->getObject('modResource',intval($users_page_id)
У тебя страницы пользователя на которые происходит редирект — это обычные Modx ресурсы.Возьми и проставь в поле псевдоним в id ресурса и будет то, что просишь.
Другое дело если пользователей пару тысяч.
Для этих целей я писал немного другой плагин. С использованием метода sendForward перенаправлял запрос на нужную страницу, куда подставлял username пользователя. Собственно что username, что id — разницы особо нет. Немного изменить плагин и ресурс на который переадресовывать. По такой схеме я выводил статьи и комментарии пользователя.
В ваш плагин я не вникал, но внешне похоже на не очень хороший код. Если кратко, разбиваете ссылку на составляющие через /. И в зависимости от того, из чего состоит текущая ссылка, делает sendForward на нужную страницу. Можете сделать и по username и по id страницы пользователей.
В ваш плагин я не вникал, но внешне похоже на не очень хороший код. Если кратко, разбиваете ссылку на составляющие через /. И в зависимости от того, из чего состоит текущая ссылка, делает sendForward на нужную страницу. Можете сделать и по username и по id страницы пользователей.
Подскажите пожалуйста, остался ли у вас еще этот плагин? Не могли бы поделиться?
Клиентский сайт работает на этом плагине, в открытом доступе его нету. Вы можете изучить немного этот вопрос и написать плагин самостоятельно, как сделал в свое время и я.
Я вам прямо написал логику. Разбиваете url — смотрите текущий и (if else или switch) с помощью sendForward кидаете пользователя на нужный ресурс. Все остальное это пару-тройка проверок и установка плейсхолдеров, исходя из вашего плагина выше — вы сможете это все сделать.
Я вам прямо написал логику. Разбиваете url — смотрите текущий и (if else или switch) с помощью sendForward кидаете пользователя на нужный ресурс. Все остальное это пару-тройка проверок и установка плейсхолдеров, исходя из вашего плагина выше — вы сможете это все сделать.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.