由于需求,公司需要把magento和phpbb登录注册联合起来。所以,写了一个需求。
首先在根目录下创建一个forum文件夹,用于存放Phpbb源程序。
然后在根目录下建立一下loginphpbb.php文件。
loginphpbb.php
<?php /* *论坛同步程序 */ define('IN_PHPBB', true); //同步登陆论坛 function forumLogin($username, $password, $admin = false) { global $db, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache, $user; $ss = array(); $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : dirname(__FILE__).'/forum/'; $phpEx = substr(strrchr(__FILE__, '.'), 1); require_once($phpbb_root_path.'common.php'); require_once($phpbb_root_path.'includes/functions_user.php'); require_once($phpbb_root_path.'includes/functions_module.php'); $_REQUEST['username'] = $_POST['username'] = $username; $_REQUEST['password'] = $_POST['password'] = $password; $password = request_var('password', '', true); $username = request_var('username', '', true); $user->session_begin(); $auth->acl($user->data); $user->setup(); $_REQUEST['sid'] = $_POST['sid']= $user->session_id; $autologin = false; $viewonline = 1; $admin = ($admin) ? 1 : 0; $viewonline = ($admin) ? $user->data['session_viewonline'] : $viewonline; $auth->login($username, $password, $autologin, $viewonline, $admin); if($admin){ $result = $db->sql_query("Select session_id From gr_bbs_sessions where session_user_id = '2' order by session_time desc"); $ss = $db->sql_fetchrow($result); } return $ss[session_id]; } //同步退出论坛 function forumLogout() { global $db, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache, $user; $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : dirname(__FILE__).'/forum/'; $phpEx = substr(strrchr(__FILE__, '.'), 1); require_once($phpbb_root_path.'common.php'); require_once($phpbb_root_path.'includes/functions_user.php'); require_once($phpbb_root_path.'includes/functions_module.php'); $user->session_kill(); $user->session_begin(); } //同步注册论坛会员 function forumRegister($user_name, $password, $email, $coppa = false) { global $db, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache, $user; $_REQUEST['username'] = $_POST['username']=$user_name; $_REQUEST['email'] = $_REQUEST['email_confirm'] = $_POST['email']= $_POST['email_confirm']= $email; $_REQUEST['new_password'] = $_REQUEST['password_confirm'] = $_POST['new_password']= $_POST['password_confirm']= $password; $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : dirname(__FILE__).'/forum/'; $phpEx = substr(strrchr(__FILE__, '.'), 1); require_once($phpbb_root_path.'common.php'); require_once($phpbb_root_path.'includes/functions_user.php'); require_once($phpbb_root_path.'includes/functions_module.php'); // Start session management $user->session_begin(); $auth->acl($user->data); $user->setup(); $timezone = date('Z') / 3600; $is_dst = date('I'); if ($config['board_timezone'] == $timezone || $config['board_timezone'] == ($timezone - 1)) { $timezone = ($is_dst) ? $timezone - 1 : $timezone; if (!isset($user->lang['tz_zones'][(string) $timezone])) { $timezone = $config['board_timezone']; } } else { $is_dst = $config['board_dst']; $timezone = $config['board_timezone']; } $data = array( 'username' => utf8_normalize_nfc(request_var('username', '', true)), 'new_password' => request_var('new_password', '', true), 'password_confirm' => request_var('password_confirm', '', true), 'email' => strtolower(request_var('email', '')), 'email_confirm' => strtolower(request_var('email_confirm', '')), 'lang' => basename(request_var('lang', $user->lang_name)), 'tz' => request_var('tz', (float) $timezone), ); $server_url = generate_board_url(); // Which group by default? $group_name = ($coppa) ? 'REGISTERED_COPPA' : 'REGISTERED'; $sql = 'SELECT group_id FROM ' . GROUPS_TABLE . " WHERE group_name = '" . $db->sql_escape($group_name) . "' AND group_type = " . GROUP_SPECIAL; $result = $db->sql_query($sql); $row = $db->sql_fetchrow($result); $db->sql_freeresult($result); $group_id = $row['group_id']; if (($coppa || $config['require_activation'] == USER_ACTIVATION_SELF || $config['require_activation'] == USER_ACTIVATION_ADMIN) && $config['email_enable']) { $user_actkey = gen_rand_string(10); $key_len = 54 - (strlen($server_url)); $key_len = ($key_len < 6) ? 6 : $key_len; $user_actkey = substr($user_actkey, 0, $key_len); $user_type = USER_INACTIVE; $user_inactive_reason = INACTIVE_REGISTER; $user_inactive_time = time(); } else { $user_type = USER_NORMAL; $user_actkey = ''; $user_inactive_reason = 0; $user_inactive_time = 0; } $user_row = array( 'username' => $data['username'], 'user_password' => phpbb_hash($data['new_password']), 'user_email' => $data['email'], 'group_id' => (int) $group_id, 'user_timezone' => (float) $data['tz'], 'user_dst' => $is_dst, 'user_lang' => $data['lang'], 'user_type' => $user_type, 'user_actkey' => $user_actkey, 'user_ip' => $user->ip, 'user_regdate' => time(), 'user_inactive_reason' => $user_inactive_reason, 'user_inactive_time' => $user_inactive_time, ); // Register user... $user_id = user_add($user_row); if($user_id){ forumLogin($data[username],$data[new_password],false); } }
然后再更改magneto程序:
app\code\core\Mage\Customer\controllers\AccountController.php
大约是在174行,
在$this->_loginPostRedirect();前面添加:
$phpbbname = explode('@',$login['username']); include('/web/loginphpbb.php'); forumLogin($phpbbname[0],$login['password']);
在355行,$this->_redirectSuccess($url);前面添加
$phpbbname = explode('@',$this->getRequest()->getPost('email')); include('/web/loginphpbb.php'); forumRegister($phpbbname[0],$this->getRequest()->getPost('password'),$this->getRequest()->getPost('email'));
然后测试一下,OK。
值得注意的是,在phpbb后台,要记得把cookie关掉。