Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Отдельная страница для редактирования профиля пользователя

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


     04.11.2011    профиль пользователя, отдельно    Общие вопросы по PHP, Хаки    12608

вопрос
Здравствуйте! Подскажите пожалуйста как сделать так, чтобы редактирование данных происходило не на персональной странице пользователя, а на отдельной странице?
Извините если некорректно поставил вопрос. Спасибо.

Ответил: promax


Был у меня такой вопрос и вот его решение
1. .htaccess
После:
Код:
RewriteRule ^user/([^/]*)(/?)+$ index.php?subaction=userinfo&user=$1 [L]

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

2. engine/modules/profile.php
Найти:

 $tpl->set( '{hidemail}', "<input type=\"checkbox\" name=\"allow_mail\" value=\"1\" " . $mailbox . " /> " . $lang['news_noamail'] );
    $tpl->set( '{usertitle}', stripslashes( $row['name'] ) );
    $tpl->set( '{fullname}', stripslashes( $row['fullname'] ) );

Ниже добавить:

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

Найти:

  if($is_logged and ($member_id['user_id'] == $row['user_id'] or $member_id['user_group'] == 1)) {
        $tpl->copy_template = "<form  method=\"post\" name=\"userinfo\" id=\"userinfo\" enctype=\"multipart/form-data\" action=\"\">" . $tpl->copy_template . "
        <input type=\"hidden\" name=\"doaction\" value=\"adduserinfo\" />
        <input type=\"hidden\" name=\"id\" value=\"{$row['user_id']}\" />
        <input type=\"hidden\" name=\"dle_allow_hash\" value=\"{$dle_login_hash}\" />
        </form>";
    }


Добавить в IF условие

AND ($_REQUEST['a'] == "settings")


Вот что должно получиться:

 if( $is_logged and ($member_id['user_id'] == $row['user_id'] or $member_id['user_group'] == 1) and ($_REQUEST['a'] == "settings") ) {
        $tpl->copy_template = "<form  method=\"post\" name=\"userinfo\" id=\"userinfo\" enctype=\"multipart/form-data\" action=\"\">" . $tpl->copy_template . "
        <input type=\"hidden\" name=\"doaction\" value=\"adduserinfo\" />
        <input type=\"hidden\" name=\"id\" value=\"{$row['user_id']}\" />
        <input type=\"hidden\" name=\"dle_allow_hash\" value=\"{$dle_login_hash}\" />
        </form>";
    }


3. templates/{THEME}/userinfo.tpl
Заключить код профиля в теги [profile] и [/profile], а найстройки в [settings] и [/settings]

4.в profile.php редактировать тег ))

if( $is_logged and ($member_id['user_id'] == $row['user_id'] or $member_id['user_group'] == 1) ) {
        $tpl->set( '{edituser}', "<a href=\"".$config['http_home_url']."user/".urlencode($row['name'])."/settings/\">" . $lang['news_option'] . "</a> " );
    } else
        $tpl->set( '{edituser}', "" );
Отредактировал 5-11-2011, 00:49 - ПафНутиЙ
Причина: дополнил из комментария

32 комментария

Stark
Юзер

Stark - 4 ноября 2011 19:33 -

Почему-то не работает, при нажатии на "Редактировать" ничего не происходит.
Ссылка "Редактировать" имеет адрес
javascript:ShowOrHide('options')

Может поэтому не открывает страницу?
А если ввести адрес вручную, то на странице пусто..
http://s05.radikal.ru/i178/1111/96/b001dd6c5a3c.png

promax
Юзер

promax - 4 ноября 2011 19:50 -

потому что ссылка на редактирование профиля
http://ваш сайт/user/username/settings/
это с ЧПУ . А вы в шаблоне правильно теги заключили ?

Stark
Юзер

Stark - 4 ноября 2011 20:05 -

Теги то правильно, а вот убрать этот div я забыл, извините smile
<div id="options" style="display:none;">...</div>

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

promax
Юзер

promax - 4 ноября 2011 20:14 -

***Комментарий удален***

Stark
Юзер

Stark - 4 ноября 2011 20:51 -

Спасибо за помощь теперь всё работает winked

Heon
Юзер

Heon - 5 ноября 2011 20:15 -

Почему то у меня не работает [ редактировать профиль ] а если в user/Heon/settings/ то нормально,как изменить [ редактировать профиль ]

promax
Юзер

promax - 5 ноября 2011 20:37 -

Heon, в ответе все написано , читайте внимательно wink

Heon
Юзер

Heon - 5 ноября 2011 23:52 -

Что с этим делать что тут редактировать?

if( $is_logged and ($member_id['user_id'] == $row['user_id'] or $member_id['user_group'] == 1) ) {
        $tpl->set( '{edituser}', "<a href=\"".$config['http_home_url']."user/".urlencode($row['name'])."/settings/\">" . $lang['news_option'] . "</a> " );
    } else
        $tpl->set( '{edituser}', "" );

promax
Юзер

promax - 6 ноября 2011 09:18 -

найти такой код в profile.php и заменить на этот wink

promax
Юзер

promax - 6 ноября 2011 09:18 -

***Комментарий удален***

puzzleq
Юзер

puzzleq - 6 ноября 2011 14:05 -

у меня в userinfo.tpl присутствует тег [not-logged]/[not-logged] в которы заключены настройки. За что от отвечает?

promax
Юзер

promax - 6 ноября 2011 14:16 -

Если вы являетесь администратором или это ваш профиль , то настройки будут показываться и наоборот ... эти теги нужно тоже заключить в [settings][/settings]

puzzleq
Юзер

puzzleq - 6 ноября 2011 14:25 -

[settings][not-logged]/[not-logged] [/settings] - таким образом, если я правильно понял?

promax
Юзер

promax - 6 ноября 2011 14:42 -

да так , вот мой код
[settings][not-logged]<form  method="post" name="userinfo" id="userinfo" enctype="multipart/form-data" action="{$link_profile}"> {оформление}   </form>[/not-logged][/settings]

puzzleq
Юзер

puzzleq - 6 ноября 2011 16:07 -

похоже на 9.3 никто не тестил?) Все прекрасно до 4 пункта. Куда применять пункт 4 на 9.3 - неясно.

puzzleq
Юзер

puzzleq - 6 ноября 2011 16:28 -

Встает только на 9.2. С 9.3 - глухо. В частности при ссылке /settings нету не то, что пустой страницы, сам профиль изчезает напрочь :) Возможно дело в 4 пункте, так как

в 9.2 код:

if( $is_logged and ($member_id['user_id'] == $row['user_id'] or $member_id['user_group'] == 1) ) {
            $tpl->set( '{edituser}', " <div class=\"editprof\"><a href=\"javascript:ShowOrHide('options')\">" . $lang['news_option'] . "</a></div> " );
        $tpl->set( '[not-logged]', "" );
        $tpl->set( '[/not-logged]', "" );
    } else {
        $tpl->set( '{edituser}', "" );
        $tpl->set_block( "'\\[not-logged\\](.*?)\\[/not-logged\\]'si", "<!-- profile -->" );
    }


а в 9.3

if( $is_logged and ($member_id['user_id'] == $row['user_id'] OR $member_id['user_group'] == 1) ) {
        $tpl->set( '{edituser}', " <div class=\"editprof\"><a href=\"javascript:ShowOrHide('options')\">" . $lang['news_option'] . "</a> " );
        $tpl->set( '[not-logged]', "" );
        $tpl->set( '[/not-logged]', "" );

$ignore_list = array();
        $temp_result = $db->query( "SELECT * FROM " . USERPREFIX . "_ignore_list WHERE user='{$row['user_id']}'" );
        while ( $temp_row = $db->get_row( $temp_result ) ) {


в общем, большое отличие

puzzleq
Юзер

puzzleq - 6 ноября 2011 17:57 -

ап, ложная тревога. сообщения выше можно удалить, проблема решена.

Единственный вопрос такой:

на новую страницу вместе с настройками переносятся и новости на модерации. Как сделать так, чтобы новости на модерации не переносились на новую страницу вместе с настройками, а оставались на странице профиля?

promax
Юзер

promax - 7 ноября 2011 12:47 -

можно убрать показ новостей , но и тогда в профиле их тоже не будет ...

puzzleq
Юзер

puzzleq - 7 ноября 2011 17:54 -

а так, чтобы в профиле были, а в настройках нет - нельзя сделать никак?

Stark
Юзер

Stark - 10 января 2012 04:17 -

А подскажи пожалуйста как их совсем убрать или можно эти новости тоже вывести на отдельную страницу?

Hardwell
Юзер

Hardwell - 28 февраля 2012 22:31 -

Перепишите пожалуйста кто-нибудь на 9.5 версию. Ибо не работает!

ergeykl
Юзер

ergeykl - 27 июля 2012 23:01 -

Или я что-то недопонял или ещё чего, НО!
В моем профиле как администратора всё ок т.е. редактирование на отдельной странице и профиль тоже.
но на странице пользователя если ты как пользователь , видны все теги

[settings][not-logged]    [/not-logged][/settings]


включая и
[profile] [/profile]


Может я что-то не понимаю?

ergeykl
Юзер

ergeykl - 28 июля 2012 18:47 -

то есть у администратора всё хорошо профиль отдельно и настройки тоже а у пользователя всё на одной странице и видны теги, ну как я писал выше

Gopr
Юзер

Gopr - 27 сентября 2013 23:11 -

Для чего нужно условие AND ($_REQUEST['a'] == "settings") ?

Amilo130
Юзер

Amilo130 - 19 июня 2014 12:18 -

У меня без этого условия работает на 10.2 версии =)

osamabanbanan
Гости

osamabanbanan - 6 октября 2013 04:03 -

а для 10 как сделать?

YoRkbi
Юзер

YoRkbi - 21 мая 2014 23:55 -

А как сделать 2 страницы, мне нужно страницу редактирования профиля (то есть имя, дату рождения, icq) и ещё одну для смены пароля и email'a. Как такое сделать?

stoper
Юзер

stoper - 13 мая 2015 12:21 -

Данный хак имеет дырку, решение есть, но не скажу)
Любой пользователь может зайти в настройки профиля, любого юзера, введя в строке
http://sait.ru/user/stoper/settings/

stoper
Юзер

stoper - 13 мая 2015 12:45 -

Нужно добавить условие
$is_logged and ($member_id['user_id'] == $row['user_id'] or $member_id['user_group'] == 1) and ($_REQUEST['a'] == 'settings')

banbanan
Юзер

banbanan - 22 июля 2015 09:55 -

спасибо огромное, все пашет) проверил на 10.5

banbanan
Юзер

banbanan - 7 августа 2015 12:28 -

не забудьте удалить в файле userinfo.tpl теги <div id="options" style="display: none">...</div>

Верстала
Юзер

Верстала - 17 января 2017 23:57 -

как вывести текст если просматриваемые настройки не принадлежат пользователю?
например мои настройки по адресу
http://site.ru/user/login/settings/

а я случайно зайду в настройки другого пользователя, например
http://site.ru/user/login2/settings/

и увижу пустую страницу

как вывести текст типа (доступ к этой странице закрыт)?

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

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

наверх