Редактирование профиля пользователя на отдельной странице

Редактирование профиля пользователя на отдельной странице

По умолчанию, редактирование профиля пользователя в CMS DataLife Engine осуществляется на той же странице, что и сам профиль. Ниже, при нажатии на соответствующую ссылку, появляется форма, с помощью которой и происходит редактирование профиля. Мне это показалось не совсем удобным, поэтому будет показан способ, как можно вынести редактирование профиля на отдельную страницу.


Установка:
1. В корне сайта открыть .htaccess и найти:
RewriteRule ^user/([^/]*)(/?)+$ index.php?subaction=userinfo&user=$1 [L]

Добавить ниже:
RewriteRule ^user/([^/]*)/setting(/?)+$ index.php?subaction=userinfo&user=$1&a=setting [L]

Обратите внимание, в этой строке на «setting» – это будущий адрес страницы редактирования профиля.

2. Открыть engine/modules/profile.php и найти:
$tpl->set( '{usertitle}', stripslashes( $row['name'] ) );

Добавить ниже:

if($_REQUEST['a'] == 'setting') {
	
	$tpl->set('[setting]', '');
	$tpl->set('[/setting]', '');
	$tpl->set_block("'\\[profile\\](.*?)\\[/profile\\]'si", '');

} else {
	
	$tpl->set("[profile]", '');
	$tpl->set("[/profile]", '');
	$tpl->set_block("'\\[setting\\](.*?)\\[/setting\\]'si", '');

}

Ниже найти:
<input type="hidden" name="dle_allow_hash" value="{$dle_login_hash}" />

И здесь очень внимательно. На разных версиях условие всего этого блока выглядит по-разному. В нашем же случае условие выглядело так:
if( $is_logged and ($member_id['user_id'] == $row['user_id'] or $member_id['user_group'] == 1) ) {

Сразу перед последней скобкой добавить:
AND ($_REQUEST['a'] == 'setting')

Чтобы в итоге получилось так:
if($is_logged and ($member_id['user_id'] == $row['user_id'] or $member_id['user_group'] == 1) AND ($_REQUEST['a'] == 'setting')) {

Далее найти строку, похожую на:
$tpl->set( '{edituser}', "<a href=\"javascript:ShowOrHide('options')\">" . $lang['news_option'] . "</a>" );

Заменить её на:
$tpl->set('{edituser}', '<a href="'.$config['http_home_url'].'user/'.urlencode($row['name']).'/setting/">Редактировать профиль</a>');

3. Открыть в папке вашей темы userinfo.tpl и всё, что касается самого профиля, заключить в теги:
[profile]
	Код профиля
[/profile]

А все, что относится к редактированию (если у вас стандартная тема – это код, заключенный в:
<div id="options" style="display:none;">

Заключить в теги:
[setting]
	Код формы
[/setting]

Стили «style="display:none;"» здесь необходимо удалить.

4. Очистить кэш сайта.

Готово!

Чтобы изменить адрес страницы редактирования профиля с «setting» на свой – замените все совпадения этого слова на всех шагах установки.
 
Версия DLE: 10.6
Автор: Артем Мáлков
Источник
Информация
Посетители, находящиеся в группе Гость, не могут оставлять комментарии к данной публикации.

Комментариев 4

TalkingFOX 30 июля 2021 06:47
Oxigen, Разобрался, кажется.
В файле две одинаковые строки, ну так было в одной из предыдущих версий:
if( $is_logged and ($member_id['user_id'] == $row['user_id'] or $member_id['user_group'] == 1) ) {

И в системе плагинов я добавлял действие со второго "вхождения", в DLE 14.3 эти строки чуть-чуть отличаются и параметр со второго вхождения не нужен. Но, DLE никаких ошибок не вывел...
TalkingFOX 30 июля 2021 06:29
Oxigen, Ну на DLE 14.3 в режиме гостя мне вывалилась страница настроек при переходе по прямому адресу настроек пользователя...
Oxigen 29 июля 2021 13:52
TalkingFOX, так эта строка как раз все это дело и выполняет
if($is_logged and ($member_id['user_id'] == $row['user_id'] or $member_id['user_group'] == 1) AND ($_REQUEST['a'] == 'setting')) {
--------------------
Всё, что вы напишите, будет использовано против вас при показе контекстной рекламы :)
TalkingFOX 29 июля 2021 07:06
if($_REQUEST['a'] == 'setting') {

Надо добавить проверку на пользователя и авторизацию, иначе будет отдавать страницу настроек всем подряд.