Мощные VPS/VDS-сервера на новейшем поколении процессоров Intel от 330р в месяц   •   Реклама
3 748 просм
12 комм
Поделиться:

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

12 мар
Хаки

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

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

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

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

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

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

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

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

      • 0
      896
        •  Команда Pandoge
      11 мар в 18:35

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

    • 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
      896
        •  Команда Pandoge
      11 мар в 18:57

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

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

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

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

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

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

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

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

      • 1
      896
        •  Команда Pandoge
      3 дек в 00:48

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

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

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

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

      • 1
      896
        •  Команда Pandoge
      3 дек в 15:06

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

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

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

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

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

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

      • 0
      896
        •  Команда Pandoge
      11 мар в 18:52

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

      Спасибо angel

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