Артём Мáлков

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

12 мар20 комм

По умолчанию, редактирование профиля пользователя в 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]

Стили «style="display:none;"» здесь необходимо удалить. Сохраняете изменения и в этом файле, и затем отправляете его на сайт.

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

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

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

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

Рекомендуем к просмотру
Как вывести URL-адрес аватара авторизованного пользователя в WordPress?
Хаки
«U.Efficiency» 2.0 – модуль расчета коэффициента активности пользователя для DLE
Модули и скрипты
Как убрать .html в конце адреса статистических страниц в DLE?
Хаки
20
комментариев
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 3
    16
      •  Проверенный
    4 окт в 21:22

    Супер спасибо!

    • 3
    11
      •  Проверенный
    19 апр в 16:00

    Держите народ готовый плагин под DLE 15.1

    https://mega.nz/file/0j4ylZLB#oEy9xnbU28_wsQoFdG3SjwZ8tDT1datK2hzXnJikZPA

    И париться не надо..

    Добавляете плагин а дальше с 6 пункта начинаете (т.е. в шаблон просто прописываете теги)

    • 3
    4
      •  Пользователь
    22 янв в 20:43

    Не знаю какого года статья... Но данный способ походу не рабочий. При попытке зайти в профиль по адресу site.ru/user/nick браузер даёт "Сайт mcpehaxs.com сейчас не может обработать этот запрос."

      • 1
      1067
        •  Команда Pandoge
      23 янв в 19:31

      Example, сделали всё строго по инструкции? Какая версия CMS?

    • 2
    11
      •  Проверенный
    1 мар в 15:03

    Возникли вопросы по этому..

    Если в профиль добавить доп. поля. И вывести их тегом {xfields}

    То при заполнении их - они не будут сохранены.

    Как сделать чтобы их тоже сохраняло?

    Другие стандарт поля норм сохраняет..

      • 1
      1067
        •  Команда Pandoge
      11 мар в 18:35

      Upseg, мы немного обновили статью (исправили несколько ошибок). Попробуйте установить хак еще раз.

      • 4
      11
        •  Проверенный
      12 окт в 20:30

      Артём Мáлков,

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

      сайт/user/пользователь/setting/

      И можем тупо смотреть данные любого пользователя.

      Я бы сказал - это фиаско.

      • 1
      1067
        •  Команда Pandoge
      изменено 13 окт в 03:36

      Upseg, вы вероятно удалили теги [not-logged][/not-logged], в которых заключена стандартная форма редактирования. Делать этого нельзя и об этом не говориться в статье. Пожалуй, нужно добавить пояснение.

      А так, у вас должно быть нечто следующее:

      [not-logged][setting]
      
      	Код формы
      
      [/setting][/not-logged]
    • 2
    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} (линк на редактирование) только на странице редактирования, а не в профиле пользователя. Нам ведь нужно вывести на странице пользователя, или я что-то не так понял.

      • 2
      1067
        •  Команда Pandoge
      11 мар в 18:57

      Mr Alex, не {edituser}, а часть формы редактирования. Область видимости ссылки {edituser} вы задаете в 6 пункте.

    • 2
    2
      •  Пользователь
    22 мар в 01:25

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

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

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

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

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

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

      • 2
      1067
        •  Команда Pandoge
      3 дек в 00:48

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

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

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

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

      • 2
      1067
        •  Команда Pandoge
      3 дек в 15:06

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

      • 1
      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>");
      • 2
      3
        •  Проверенный
      9 мая в 01:13

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

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

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

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

      • 1
      1067
        •  Команда Pandoge
      11 мар в 18:52

      Bymerpro, не должно, исправили в статье.

      Спасибо angel

      • 1
      1
        •  Пользователь
      26 апр в 16:30

      Артём Мáлков, После 4 пункта на 15 версии, не выводит кнопку - редактировать профиль.

      Стоит изменить условие - if( $is_logged and ($member_id['user_id'] == $row['user_id'] or $member_id['user_group'] == 1) ) {

      Выводит... roll

      • 0
      1067
        •  Команда Pandoge
      16 июл в 14:05

      Soon, здравствуйте!

      Посмотреть бы вёрстку персональной страницы. Думаю, не в том месте прописана ссылка на редактирование.

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