Быстрый и надёжный хостинг на SSD-дисках от 165р в месяц   •   Реклама
2 327 просм
8 комм
Поделиться:

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

19 мая
Хаки

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

Мне это показалось не совсем удобным. Поэтому я покажу, как можно вынести редактирование своего (и, соответственно, ваших пользователей) профиля на отдельную страницу.

1. Первым делом вам необходимо подключиться к вашему сайту по FTP.

2. Далее в корне вашего сайта откройте файл .htaccess и найдите в нем строку:

RewriteRule ^user/([^/]*)(/?)+$ index.php?subaction=userinfo&user=$1 [L]

Сразу после нее вставьте:

RewriteRule ^user/([^/]*)/setting(/?)+$ index.php?subaction=userinfo&user=$1&a=setting [L]

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

Более с этим файлом мы работать не будем, поэтому сохраняем изменения и отправляем его обратно на сайт.

3. Далее открываем для редактирования файл profile.php, находящийся в папке /engine/modules/. В нем ищем строку:

$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", "");

}

4. Здесь же, чуть ниже, ищите:

<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")) {

5. Последней правкой в этом файле будет следующее. Вы ищите строку, похожую на:

$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>");

Сохраняете все изменения в файле и оправляете его обратно на сайт.

6. Открываете файл шаблона userinfo.tpl, находящийся в папке вашей темы, отвечающий за вид персональной страницы пользователя.

Здесь все, что касается самого профиля, – вы заключаете в теги:

[profile]

	Код профиля
	
[/profile]

А все, что относится к редактированию (если у вас стандартная тема – это код, заключенный в:

<div id="options" style="display:none;">

), соответственно, вы заключаете в теги:

[setting]

	Код формы
	
[/setting]

Сохраняете изменения и в этом файле, и затем отправляете его на сайт.

7. Чистите кэш сайта. На этом внедрение нового функционала на ваш сайт закончено.

На что здесь стоит обратить внимание? Если вы захотите изменить адрес страницы редактирования профиля с «setting» на свой – замените все совпадения этого слова во всех шагах установки.

Инструкция тестировалась на DataLife Engine версии 10.6, и проблем в использовании не обнаружилось.

Что показалось непонятным – спрашивайте. До новых встреч!

8
комментариев
Форма комментирования этой статьи скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 1
    1
      •  Проверенный
    17 июн в 09:33

    Если я правильно понимаю то этот код

    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")) {

    и в итоге само условие будет

    если пользователь авторизирован и (id пользователя профиля = id пользователя на сайте или группа администраторов) и страница setting

    то будет выведено {edituser} (линк на редактирование) только на странице редактирования, а не в профиле пользователя. Нам ведь нужно вывести на странице пользователя, или я что-то не так понял.

    • 0
    3
      •  Проверенный
    9 мая в 01:13

    Разобрался с 4 пунктом, но в 5 слеши точно нужны по крайней мере на 14 версии движка.

    Еще тут разглядел слеша не хватает

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

    Так и должно быть?

    • 0
    3
      •  Проверенный
    9 мая в 00:31

    в 4 пункте найти

    <input type="hidden" name="dle_allow_hash" value="{$dle_login_hash}" />

    А дальше с ним что делать???

    5 пункт

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

    Не работает если не поставить слеши.

    $tpl->set( '{edituser}', "<a href=\"".$config['http_home_url']."user/".urlencode($row['name'])."/setting/\">Редактировать профиль</a>");
    • 0
    2
      •  Пользователь
    22 мар в 01:25

    Спасибо! Отличная штука. Единственное не сработало, опечатка в коде с кавычками.

    Поправил под свой вариант DLE 10.x таким образом:

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

    Может кому пригодится.

    • 1
    839
      •  Администратор
    3 дек в 15:06

    cotasorum, спасибо за замечание. Была ошибка в коде - исправили. Попробуйте сейчас авторизоваться.

    • 0
    1
      •  Пользователь
    3 дек в 03:55

    К сожалению сайт на локалке. Кстати у вас на сайте что-то с авторизацией, ввожу логин и пароль страница просто перегружается и я не авторизируюсь. neutral

    • 1
    839
      •  Администратор
    3 дек в 00:48

    bymerpro, можете предоставить доступ к сайту?

    FTP + любой профиль.

    • 0
    3
      •  Проверенный
    2 дек в 23:31

    На Dle 13.1 Все работает отлично! Но на странице настроек в самом низу показываются материалы ожидающие модерации или инфо о том что их нет. Это можно иправить?

Подняться наверх
«Pandoge» - помощник вебмастера