Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Общие вопросы по PHP Отдельная страница для редактирования профиля пользователя

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


     04.11.2011    Общие вопросы по PHP, Хаки    11705

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

Ответил: 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 - ПафНутиЙ
Причина: дополнил из комментария

Комментарии пользователей (31)

Stark
11 | 12

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

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

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

promax
29

182 | 174

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

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

Stark
11 | 12

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

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

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

promax
29

182 | 174

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

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

Stark
11 | 12

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

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

Heon
6

87 | 84

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

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

promax
29

182 | 174

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

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

Heon
6

87 | 84

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
29

182 | 174

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

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

promax
29

182 | 174

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

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

puzzleq
16 | 17

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

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

promax
29

182 | 174

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

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

puzzleq
16 | 17

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

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

promax
29

182 | 174

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
16 | 17

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

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

puzzleq
16 | 17

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
16 | 17

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

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

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

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

promax
29

182 | 174

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

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

puzzleq
16 | 17

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

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

Stark
11 | 12

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

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

Hardwell
7 | 6

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

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

ergeykl
14 | 16

ergeykl - 27 июля 2012 23:01 - Юзер

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

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


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


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

ergeykl
14 | 16

ergeykl - 28 июля 2012 18:47 - Юзер

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

Gopr
10

494 | 164

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

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

Amilo130
5 | 1

Amilo130 - 19 июня 2014 12:18 - Юзер

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

osamabanbanan
8 | 1

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

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

YoRkbi
7 | 1

YoRkbi - 21 мая 2014 23:55 - Юзер

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

stoper
15 | 7

stoper - 13 мая 2015 12:21 - Юзер

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

stoper
15 | 7

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
1

32

banbanan - 22 июля 2015 09:55 - Юзер

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

banbanan
1

32

banbanan - 7 августа 2015 12:28 - Юзер

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

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

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