joomla组件开发——会员积分管理组件的登陆跳转

来源:互联网 发布:智阅pdf阅读器 源码 编辑:程序博客网 时间:2024/05/17 08:05

今天记录3c之家 兰州短租公寓建设过程中遇到的一点小问题。由于网站需要,找了个会员积分系统来用用,AlphaUserPoints,总体感觉很是不错,先来看看后台

还可以吧?功能很是强大。

于是,我新建了一个菜单->会员中心,指向了AlphaUserPoints的个人页面,然而在前台点击后问题出现了,错误提示:您没有权限观看此页面;是啊,没有登录。可是想想这样的话会员肯定会不高兴的,最起码让网页直接能跳转到登录页面呢。好,开始分析源代码,下面是此组件的文件列表

我们来看看控制器,

class alphauserpointsController extends JController{    function display() {                                parent::display();    }}


里面没有东西,进controllers文件夹看看:

有这几个文件,分析url:http://3c-home.com/index.php?option=com_alphauserpoints&view=account&Itemid=103

可知此应该使用的是account视图,对于的也就是account控制器,打开文件查看display函数部分

function display () {$app = JFactory::getApplication();require_once (JPATH_ROOT.DS.'components'.DS.'com_alphauserpoints'.DS.'helper.php');$com_params = JComponentHelper::getParams( 'com_alphauserpoints' );$model      = &$this->getModel ( 'alphauserpoints' );$view       = $this->getView  ( 'account','html' );// current user$user =  JFactory::getUser();// profil request $userid      = JRequest::getVar( 'userid', '', 'default', 'string' );if ( !$user->id && !$com_params->get( 'allowGuestUserViewProfil', 1 ) ) {$msg = JText::_('ALERTNOTAUTH' );                            $app->redirect('index.php', $msg);}这段代码就是检测是否有用户登录,如果没有用户登录就跳转到首页,并显示错误消息$msg.// check referre IDif ( ! $userid ) {$referrerid = $model->_checkUser();} else  {$referrerid = $userid;}// Rule Profile Viewif ( $referrerid != @$_SESSION['referrerid'] ) {$keyreference  = AlphaUserPointsHelper::buildKeyreference( 'sysplgaup_profile_view', $user->id );$username = ( $user->username ) ? $user->username : JText::_('AUP_GUEST');$datareference = JText::_('AUP_PROFILE_VIEW_REFERENCE') . ' ' . $username;AlphaUserPointsHelper::userpoints ( 'sysplgaup_profile_view' , $referrerid, 0, $keyreference, $datareference );}// End rule Profile View// Get the parameters of the active menu item$params = $model->_getParamsAUP();$num_item_activities = $params->get( 'num_item_activities', 10 );$_get_last_points   = $model->_get_last_points ( $referrerid, $num_item_activities );$_listing_last_points= $_get_last_points[0];$_listing_total= $_get_last_points[1];$_listing_limit= $_get_last_points[2];$_listing_limitstart= $_get_last_points[3];$rowsreferrees= $model->_get_referrees ( $referrerid );$pointsearned = $model->_pointsearned(); // users points earned TOP 10$totalpoints= $model->_totalpoints(); // entire community$mypointsearned = $model->_mypointsearned($referrerid);$mypointsspent = $model->_mypointsspent($referrerid);$mypointsearnedthismonth= $model->_mypointsearnedthismonth($referrerid);$mypointsspentthismonth= $model->_mypointsspentthismonth($referrerid);$mypointsearnedthisday= $model->_mypointsearnedthisday($referrerid);$mypointsspentthisday= $model->_mypointsspentthisday($referrerid);$_average_age= _get_average_age_community();$_user_info = AlphaUserPointsHelper::getUserInfo ( $referrerid );$currenttotalpoints    = $_user_info->points;$lastupdate = $_user_info->last_update;$referraluser = $_user_info->referraluser;$myname = $_user_info->name;$myusername = $_user_info->username;$mybirthday= $_user_info->birthdate;$referralname = "";if ( $referraluser ) {$referralinfo = AlphaUserPointsHelper::getUserInfo ( $referraluser );$referralname = $referralinfo->username;}// get level/rank if exist$userrankinfo = AlphaUserPointsHelper::getUserRank ( $referrerid );// get medals if exist$medalslistuser = AlphaUserPointsHelper::getUserMedals ( $referrerid );// load avatar$useAvatarFrom = $com_params->get('useAvatarFrom');$height = 100;if ( $useAvatarFrom=='alphauserpoints' ) JPlugin::loadLanguage( 'com_media', JPATH_ADMINISTRATOR );$avatar = getAvatar( $useAvatarFrom, $_user_info, $height );// Get coupons code$resultCoupons = $model->_getMyCouponCode( $referrerid );$view->assign('params', $params );$view->assign('cparams', $com_params );$view->assign('referreid', $referrerid );$view->assign('currenttotalpoints', $currenttotalpoints );$view->assign('rowslastpoints', $_listing_last_points );$view->assign('total', $_listing_total );$view->assign('limit', $_listing_limit );$view->assign('limitstart', $_listing_limitstart );$view->assign('lastupdate', $lastupdate );$view->assign('referraluser', $referraluser );$view->assign('referralname', $referralname );$view->assign('rowsreferrees', $rowsreferrees );$view->assign('userid', $user->id);$view->assign('userrankinfo', $userrankinfo);$view->assign('medalslistuser', $medalslistuser);$view->assign('pointsearned', $pointsearned);$view->assign('totalpoints', $totalpoints);$view->assign('mypointsearned', $mypointsearned);$view->assign('mypointsspent', $mypointsspent);$view->assign('mypointsearnedthismonth', $mypointsearnedthismonth);$view->assign('mypointsspentthismonth', $mypointsspentthismonth);$view->assign('mypointsearnedthisday', $mypointsearnedthisday);$view->assign('mypointsspentthisday', $mypointsspentthisday);$view->assign('myname', $myname);$view->assign('myusername', $myusername);$view->assign('avatar', $avatar);$view->assign('birthday', $mybirthday);$view->assign('user_info', $_user_info);$view->assign('useAvatarFrom', $useAvatarFrom);$view->assign('mycouponscode', $resultCoupons);$view->assign('userinfo', $_user_info);$view->assign('average_age', $_average_age);// Display$view->_display();}

现在找到了地方,我们来做修改,把下面代码的跳转改改:

if ( !$user->id && !$com_params->get( 'allowGuestUserViewProfil', 1 ) )
 {$msg = JText::_('ALERTNOTAUTH' ); 
//login first
$app->redirect('index.php?option=com_users&view=login', $msg);}

现在把跳转改到了登录表单,然后把ALERTNOTAUTH对于的汉语提示改改,改成友善一点,就是提示顾客登录。继续测试,成功,窃喜呢。

点登录。。。。。

不对啊,登录以后是系统自带的用户界面啊,我得定向到新的会员界面啊,怎么办呢,我想还是把系统自带的user组件改改吧

找到com_user文件夹,好多文件啊,慢慢看吧,先入手控制器,

com_user下的controller.php文件里面没有点击login按钮触发的事件,最终在controllers文件夹下的user.php文件中找到相关代码。就是login函数

public function login(){JSession::checkToken('post') or jexit(JText::_('JInvalid_Token'));$app = JFactory::getApplication();// Populate the data array:$data = array();$data['return'] = base64_decode(JRequest::getVar('return', '', 'POST', 'BASE64'));$data['username'] = JRequest::getVar('username', '', 'method', 'username');$data['password'] = JRequest::getString('password', '', 'post', JREQUEST_ALLOWRAW);// Set the return URL if empty.if (empty($data['return'])) {$data['return'] = 'index.php?option=com_users&view=profile';                                              }// Set the return URL in the user state to allow modification by plugins$app->setUserState('users.login.form.return', $data['return']);// Get the log in options.$options = array();$options['remember'] = JRequest::getBool('remember', false);$options['return'] = $data['return'];// Get the log in credentials.$credentials = array();$credentials['username'] = $data['username'];$credentials['password'] = $data['password'];// Perform the log in.if (true === $app->login($credentials, $options)) {// Success$app->setUserState('users.login.form.data', array());$app->redirect(JRoute::_($app->getUserState('users.login.form.return'), false));                         } else {// Login failed !$data['remember'] = (int)$options['remember'];$app->setUserState('users.login.form.data', $data);$app->redirect(JRoute::_('index.php?option=com_users&view=login', false));}}

红色的那几行就是成功登陆后的跳转的相关代码,我直接跳转到我们需要的页面看看:

if (empty($data['return'])) {// $data['return'] = 'index.php?option=com_users&view=profile';                        $data['return'] ='index.php?option=com_alphauserpoints&view=account&Itemid=103';                            }

成功了。

总结:本次修改代码是在对组件开发不是特别熟悉的前提下进行的,在修改代码时考虑的不是很完备,如果能在AlphaUserPoints组件中实现登陆及相关的跳转就再好不过了,但时间紧迫,目前先将就使用。也希望通过这次的修改,为下次自己写组件奠定一些基础。


 

原创粉丝点击