Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Общие вопросы по PHP Как вывести id пользователя в адресе на персональной странице, вместо логина?

Как вывести id пользователя в адресе на персональной странице, вместо логина?


     30.08.2015    Общие вопросы по PHP    1286

вопрос
Задача такова: необходимо вместо логина в адресе сайта на странице профиля вывести его id, чтобы было так
http://сайт.su/user/id1 вместо http://сайт.su/user/Admin
так, чтобы в title страницы отображался логин.

Версия dle: 10.4
Спасибо.

Ответил: Gameer


1) Открыть .htaccess, найти
# вывод для отдельного юзера
RewriteRule ^user/([^/]*)/rss.xml$ engine/rss.php?subaction=allnews&user=$1 [L]
RewriteRule ^user/([^/]*)(/?)+$ index.php?subaction=userinfo&user=$1 [L]
RewriteRule ^user/([^/]*)/page/([0-9]+)(/?)+$ index.php?subaction=userinfo&user=$1&cstart=$2 [L]
RewriteRule ^user/([^/]*)/news(/?)+$ index.php?subaction=allnews&user=$1 [L]
RewriteRule ^user/([^/]*)/news/page/([0-9]+)(/?)+$ index.php?subaction=allnews&user=$1&cstart=$2 [L]
RewriteRule ^user/([^/]*)/news/rss.xml(/?)+$ engine/rss.php?subaction=allnews&user=$1 [L]
Заменить на :
# вывод для отдельного юзера
RewriteRule ^user/id([0-9]+)/rss.xml$ engine/rss.php?subaction=allnews&user=$1 [L]
RewriteRule ^user/id([0-9]+)(/?)+$ index.php?subaction=userinfo&user=$1 [L]
RewriteRule ^user/id([0-9]+)/page/([0-9]+)(/?)+$ index.php?subaction=userinfo&user=$1&cstart=$2 [L]
RewriteRule ^user/id([0-9]+)/news(/?)+$ index.php?subaction=allnews&user=$1 [L]
RewriteRule ^user/id([0-9]+)/news/page/([0-9]+)(/?)+$ index.php?subaction=allnews&user=$1&cstart=$2 [L]
RewriteRule ^user/id([0-9]+)/news/rss.xml(/?)+$ engine/rss.php?subaction=allnews&user=$1 [L]

2) Открыть /engine/engine.php найти :
$sql_select = "SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE autor = '{$user}' AND approve=0 ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];
Заменить на :
$sql_select = "SELECT u.user_id, u.name, p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) LEFT JOIN " . PREFIX . "_users u ON (p.autor=u.name) WHERE u.user_id = '{$user}' AND approve=0 ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];
Далее найти :
$sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE autor = '$user' AND approve=0";
Заменить на :
$sql_count = "SELECT COUNT(*) as count, u.user_id, u.name FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_users u ON (p.autor=u.name) WHERE u.user_id = '$user' AND approve=0";
Далее найти :
$sql_select = "SELECT id, autor, date, short_story, full_story, xfields, title, category, alt_name FROM " . PREFIX . "_post where {$stop_list}autor = '$user' AND approve=1" . $where_date . " ORDER BY date DESC LIMIT 0," . $config['rss_number'];
Заменить на :
$sql_select = "SELECT u.user_id, u.name, p.id, p.autor, p.date, p.short_story, p.full_story, p.xfields, p.title, p.category, p.alt_name FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_users u ON (p.autor=u.name) where {$stop_list}u.user_id = '$user' AND approve=1" . $where_date . " ORDER BY date DESC LIMIT 0," . $config['rss_number'];
Далее найти :
$sql_select = "SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}autor = '$user' AND approve=1" . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];
Заменить на :
$sql_select = "SELECT u.user_id, u.name, p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) LEFT JOIN " . PREFIX . "_users u ON (p.autor=u.name) WHERE {$stop_list}u.user_id = '$user' AND approve=1" . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];
Далее найти :
$sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE {$stop_list}autor = '$user' AND approve=1" . $where_date;
Заменить на :
$sql_count = "SELECT COUNT(*) as count, u.user_id, u.name FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_users u ON (p.autor=u.name) WHERE {$stop_list}u.user_id = '$user' AND approve=1" . $where_date;
Далее найти (13 или больше раз):
e.reason
Заменить на :
e.reason, e.user_id

3) Открыть /engine/init.php найти :
$tpl->set( '{profile-link}', $config['http_home_url'] . "user/" . urlencode ( $member_id['name'] ) . "/" );
Заменить на :
$tpl->set( '{profile-link}', $config['http_home_url'] . "user/id" . urlencode ( $member_id['user_id'] ) . "/" );

4) Открыть /engine/modules/profile.php найти :
if( preg_match( "/[\||\'|\<|\>|\"|\!|\?|\$|\@|\/|\\\|\&\~\*\+]/", $user ) ) $user="";
Заменить на :
if(is_numeric($user)) $user = intval($user); else $user="";
Далее найти :
$sql_result = $db->query( "SELECT * FROM " . USERPREFIX . "_users WHERE name = '$user'" );
Заменить на :
$sql_result = $db->query( "SELECT * FROM " . USERPREFIX . "_users WHERE user_id = '$user'" );
Далее найти ( 6 РАЗ ) :
urlencode( $row['name'] )
Заменить на :
"id" .urlencode( $row['user_id'] )

5) Открыть /engine/modules/show.full.php, show.short.php, show.custom.php и /engine/classes/comments.class.php найти :
"user/" . urlencode( $row['autor'] )
Заменить на :
"user/id" . urlencode( $row['user_id'] )

6) Открыть /engine/ajax/profile.php найти (2 раза) :
"user/" . urlencode( $row['name'] )
Заменить на
"user/id" . urlencode( $row['user_id'] )

И так же меняем везде где есть ссылка на профиль.

для благодарностей за потраченное время, не откажусь от пива на webmoney
R118095764291 - рубли
U218134219019 - гривны
Z228640084773 - доллары

Комментарии пользователей (15)

SkiFteL
20 | 2

SkiFteL - 31 августа 2015 00:32 - Юзер

Только сегодня об этом думал)))
Тоже интересует данная реализация!

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 4 сентября 2015 16:53 - Админ

Если кто-то сможет аргументированно ответить для чего это нужно, и какой от этого профит - специально для вас сделаю бесплатно.

Каков вопрос - таков и ответ. Просто помните об этом.

AleksMey
5

51 | 7

AleksMey - 4 сентября 2015 21:44 - Юзер

Всё просто. Когда на сайте стоит регистрация и вход с социальных сетей (стандартный модуль), адрес профиля формируется на основе логина и фамилии и имени соответственно. Следовательно при входе на сайт через социальные сети, логин пользователя становится нечитабельным, вида:

site.com/user/%CA%EE%F1%F2%FF+%C3%EE%F0%E1%F3%ED%EE%E2/

Для того, чтобы избежать этого, нужно ввести вместо логина в адресе сайта id или же ковырятся в движке, чтобы брать из вк не имя и фамилию, а свой адрес. Мне кажется, первый вариант намного удобнее, ибо так пользователи будут равны, а при входе с соц сетей они не смогут выбрать логин в отличии от тех, кто просто зарегистрировался.
P.S. На regger (и подобные сторонние модули) денег нет

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 4 сентября 2015 22:40 - Админ

1. Ваша проблема решается установкой движка в нормальной кодировке (UTF-8).
2. Ну и объяснение ваше никак, вообще совсем никак не является аргументом и уж тем более профита в вашем случае никакого нет (см п.1).

Каков вопрос - таков и ответ. Просто помните об этом.

AleksMey
5

51 | 7

AleksMey - 5 сентября 2015 15:21 - Юзер

Как я понял перевести заполненную базу с win 1251, где на сайте уже установлено не мало хаков и модулей проще чем изменить логин в адресе на id ?

Proff
1

126 | 28

Proff - 6 сентября 2015 08:45 - Юзер

Пафнутий прав, вы правда думаете, что это последняя ваша проблема из-за устаревшей кодировки?
Сайт любого размера переводится на другую кодировку за 1 день. И делается это один раз.

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 6 сентября 2015 09:13 - Админ

Вполне возможно smile
Этот сайт тоже когда то был в 1251, превратился в utf-8 за один вечер от начала создания бэкапа до выкатывания в продакшн.

Каков вопрос - таков и ответ. Просто помните об этом.

AleksMey
5

51 | 7

AleksMey - 6 сентября 2015 10:29 - Юзер

А как эта проблема решится, если перевести сайт на utf ?

Gameer
225

1121 | 395

Gameer - 6 сентября 2015 10:35 - Эксперт

AleksMey, у вас будет уже полноценные ЧПУ. Так как utf-8 поддерживает кириллицу.

Истина в противоречии.​

ПафНутиЙ
1065

3395 | 2433

ПафНутиЙ - 6 сентября 2015 12:18 - Админ

https://dle-faq.ru/user/ПафНутиЙ вот так и решится.

Каков вопрос - таков и ответ. Просто помните об этом.

AleksMey
5

51 | 7

AleksMey - 6 сентября 2015 13:56 - Юзер

Чтож, спасибо, скорее всего прислушаюсь к совету. Тогда в догонку смежный вопрос. У меня на сайте нужно организовать поиск по людям, я решил этот вопрос путём установки модуля, но там возможен поиск только по логину. (в частности из-за этого я и хотел сделать у всех одинаковые адреса), но как правило пользователи в большинстве указывают в логине не свои ФИО, а поиск нужно организовать именно по ним. Может посоветуете чего?

Gameer
225

1121 | 395

Gameer - 6 сентября 2015 14:06 - Эксперт

AleksMey, а полное имя для чего в dle ?

Истина в противоречии.​

AleksMey
5

51 | 7

AleksMey - 6 сентября 2015 21:59 - Юзер

Никто за бесплатно допиливать этот модуль не возьмётся, чтобы сделать поиск по полному имени

Gameer
225

1121 | 395

Gameer - 6 сентября 2015 22:27 - Эксперт

AleksMey, тогда платите

Истина в противоречии.​

websot
2

61 | 10

websot - 12 ноября 2016 05:49 - Юзер

С таким вопросом прошу в Стол заказов =)

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы