Arhar Опубликовано 8 Марта 2007 Жалоба Поделиться Опубликовано 8 Марта 2007 Недавно, в силу необходимости тыкать вновь зарегистрированных пользователей в описание особенностей форума, задался вопросом, каким образом лучше всего это сделать.Есть возможность описать эти особенности в правилах, выводимых при регистрации, но 90% пользователей их не читают, а пролистывают и ставят галочку.Пришел к выводу, что лучше всего это делать посредством личного сообщения, отправляемого пользователю при регистрации. Скачал с mods.invisionize.com мод Welcome PM и ужаснулся, насколько все сложно, ведь есть же замечательная возможность сделать все проще.Ковыряя register.php в ходе создания защиты от ботов, заметил if ( USE_MODULES == 1 ) { require ROOT_PATH."modules/ipb_member_sync.php"; $this->modules = new ipb_member_sync(); $this->modules->ipsclass =& $this->ipsclass; }Вызывается это в самом начале.Значение USE_MODULES определяется еще в файле init.php, по умолчанию 1, так что код происходит.В register.php в функции create_account есть //----------------------------------------- // Use modules? //----------------------------------------- if ( USE_MODULES == 1 ) { $this->modules->register_class($this); $member['password'] = trim($this->ipsclass->input['PassWord']); $this->modules->on_create_account($member); if ( $this->modules->error == 1 ) { return; } $member['password'] = ""; }это значит, опят таки, если модули используются, вызывается функция on_create_account из ipb_member_sync.php Рассмотрим наконец возможности использования этой функцииЕй передаются все данные о новом пользователе, даже НЕ закодированный пароль, что также можно использовать.Используем следующим образом.В файле modules/ipb_member_sync.php есть function on_create_account($member) { global $DB, $std, $ibforums; //---- START //---- END }ну или что-то похожее.. тем не менее она пустая, а это значит, что можно написать все, что угодно.Напишем Welcome PM.Для этого между //---- START и //---- END вставим следующий код, который будет отвечать за PM require_once( ROOT_PATH.'sources/lib/func_msg.php' ); $this->lib = new func_msg(); $this->lib->ipsclass =& $this->ipsclass; $this->lib->init(); $this->lib->to_by_id = $member['id'];//ид вновь зарегестрированного пользователя $this->lib->from_member['id'] = 1;//ид ОТ кого будет приходить сообщение $this->lib->msg_title = "Добро пожаловать!"; $this->lib->msg_post = "Поздравляем! Вы успешно зарегестрировались!"; $this->lib->force_pm = 0; $this->lib->send_pm(); if ( $this->lib->error ) { print $this->error; exit(); }Используются стандартные функции форума, не надо ничего придумывать про обращение к базе и т.д.Все придумано до нас.В переменной $this->lib->msg_title будет хранится название нового сообщения.В переменной $this->lib->msg_post его текст. Можете придумать все, что угодно.Вы также можете сообщить пользователю его пароль, который он вводил, следующим образом:$this->lib->msg_post = "Поздравляем! Вы успешно зарегестрировались! Ваш пароль: ".$member['password'].". В целях безопасности запишите этот пароль и удалите это сообщение!";Правда пароль будет хранится в базе в таблице личных сообщений в открытом виде, так что это не безопасно.Хотя, с другой стороны, всегда можно посмортеть его в случае если пользователь его забудет. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 8 Марта 2007 Жалоба Поделиться Опубликовано 8 Марта 2007 Спасибо, полезная фича. Как раз думал над этим файлом на днях, зачем он, особенно смутило "global $DB, $std, $ibforums;", показалось что это из 2.0.х артефакт... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 9 Марта 2007 Автор Жалоба Поделиться Опубликовано 9 Марта 2007 да, но это никак не влияет на выполнение кодавроде в index.php им присваивается что-тоif ( LEGACY_MODE ) { $DB =& $ipsclass->DB; $std =& $ipsclass; $ibforums =& $ipsclass; $forums =& $ipsclass->forums; $print =& $ipsclass->print; $sess =& $ipsclass->sess; $ipsclass->load_template('skin_global'); $ipsclass->skin_global = $ipsclass->compiled_templates['skin_global']; }но это в случае LEGACY_MODE, а оно в init.phpdefine( 'LEGACY_MODE', 0 );так что они пустые Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 9 Марта 2007 Жалоба Поделиться Опубликовано 9 Марта 2007 Ну вот я и засомневался на счет них, на форуме читал, что они из 2.0.х остались и их применять нельзя. подумал что файл вообще лишний в дистрибутиве, не удалили от пред. версии, хотел даже в баги писать, а тут эта тема Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Tugo Опубликовано 21 Сентября 2007 Жалоба Поделиться Опубликовано 21 Сентября 2007 А штука эта в 2.3.1 работать будет? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 21 Сентября 2007 Автор Жалоба Поделиться Опубликовано 21 Сентября 2007 ну откуда я знаюя же написал - 2.1.х Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 21 Сентября 2007 Жалоба Поделиться Опубликовано 21 Сентября 2007 А штука эта в 2.3.1 работать будет?Будет. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Grek Опубликовано 9 Февраля 2008 Жалоба Поделиться Опубликовано 9 Февраля 2008 Не работает в 2.3.4 В файле init.php нет этого куска //----------------------------------------- // Use modules? //----------------------------------------- if ( USE_MODULES == 1 ) { $this->modules->register_class($this); $member['password'] = trim($this->ipsclass->input['PassWord']); $this->modules->on_create_account($member); if ( $this->modules->error == 1 ) { return; } $member['password'] = ""; } Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 9 Февраля 2008 Автор Жалоба Поделиться Опубликовано 9 Февраля 2008 В register.php в функции create_account есть это во первыха во вторых, это статья, а не моди говорится в ней о том, что такое модуль ipb_member_sync.php Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Slepec Опубликовано 14 Февраля 2008 Жалоба Поделиться Опубликовано 14 Февраля 2008 а во вторых, это статья, а не моди говорится в ней о том, что такое модуль ipb_member_sync.phpпускай и статья, но работает на 2.3.х на ура спс Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.