AJAX_DISCUZ showmessage()函数配合AJAX弹窗

discuz定义的函数showmessage()可以将弹窗以AJAX的方式弹出,首先要将模板文件中的表单按照格式编写按照格式编写.

下面以"积分转帐"页面介绍(转载请注明出处:http://blog.csdn.net/dabao1989/article/details/8307661)



模板文件

<!--{elseif $_G['gp_op'] == 'transfer'}-->

			<!--{if $_G[setting][transferstatus] && $_G['group']['allowtransfer']}-->
			<form id="transferform" name="transferform" method="post" autocomplete="off" action="home.php?mod=spacecp&ac=credit&op=transfer" οnsubmit="ajaxpost(this.id, 'return_transfercredit');">
				<input type="hidden" name="formhash" value="{FORMHASH}" />
				<input type="hidden" name="transfersubmit" value="true" />
				<input type="hidden" name="handlekey" value="transfercredit" />
				<table cellspacing="0" cellpadding="0" class="tfm mtn">
					<tr>
						<th>{lang memcp_credits_transfer}</th>
						<td class="pns">
							<input type="text" name="transferamount" id="transferamount" class="px" size="5" style="width: auto;" value="0" />
							 {$_G[setting][extcredits][$_G[setting][creditstransextra][9]][title]} 
							{lang credits_give} 
							<input type="text" name="to" id="to" class="px" size="15" style="width: auto;" />
						</td>
						<td width="300" class="d">
							{lang memcp_credits_transfer_min_balance} $_G[setting][transfermincredits] {$_G[setting][extcredits][$_G[setting][creditstransextra][9]][unit]}<br />
							<!--{if intval($taxpercent) > 0}-->{lang credits_tax} $taxpercent<!--{/if}-->
						</td>
					</tr>
					<tr>
						<th><span class="rq">*</span>{lang transfer_login_password}</th>
						<td><input type="password" name="password" class="px" value="" /></td>
					</tr>
					<tr>
						<th>{lang credits_transfer_message}</th>
						<td><input type="text" name="transfermessage" class="px" size="40" /></td>
					</tr>
					<tr>
						<th> </th>
						<td colspan="2">
							<button type="submit" name="transfersubmit_btn" id="transfersubmit_btn" class="pn" value="true"><em>{lang memcp_credits_transfer}</em></button>
							<span style="display: none" id="return_transfercredit"></span>
						</td>
					</tr>
				</table>
			</form>
			<!--{/if}-->

看以上HTML的第4行,表单中form标签需要增加的属性及事件:(重要)

<form id="transferform" name="transferform" method="post" autocomplete="off" action="home.php?mod=spacecp&ac=credit&op=transfer" οnsubmit="ajaxpost(this.id, 'return_transfercredit');">
οnsubmit=ajaxpost(this.id,'return_transfercredit')是以ajaxpost方式提交,this.id是本表单id,return_transfercredit为返回信息标签ID,就是<span style="display:none" id="return_transfercredit"></span>


看以上HTML的第5,6,7行,表单中必须的3个表单项:(重要)

<input type="hidden" name="formhash" value="{FORMHASH}" /><!--discuz所有表单都有此项,机制类似于验证码,保证表单来路安全-->  
<input type="hidden" name="transfersubmit" value="true" /><!--为保证各个浏览器兼容性,单独添加此项,以便在后台以if(submitcheck(transfersubmit))作判断,直接给button添加name或直接给form增加name,各版本浏览器不一定发送-->  
<input type="hidden" name="handlekey" value="transfercredit" /><!--AJAX必须添加此项,好像是一个标识符--> 

看以上HTML的第34行,ajax返回的信息将会保存到这个标签里,然后弹窗将获取此标签信息并弹出:(重要)

<span style="display: none" id="return_transfercredit"></span>

现在看一下以上3处命名规律:

οnsubmit=ajaxpost(this.id,'return_transfercredit');

<input type='hidden' name='handlekey' value='transfercredit' />

<span style='display:none' id='return_transfercredit'></span>

这三个值必须保证固定格式return_xxx , xxx, return_xxx


程序文件如下:

elseif ($_G['gp_op'] == 'transfer') {

	if(!($_G['setting']['transferstatus'] && $_G['group']['allowtransfer'])) {
		showmessage('action_closed', NULL);
	}

	if(submitcheck('transfersubmit')) {
		if($_G['gp_to'] == $_G['username']) {
			showmessage('memcp_credits_transfer_msg_self_incorrect', '', array(), array('showdialog' => 1, 'showmsg' => true, 'closetime' => true));
		}
		$amount = intval($_G['gp_transferamount']);
		if($amount <= 0) {
			showmessage('credits_transaction_amount_invalid', '', array(), array('showdialog' => 1, 'showmsg' => true, 'closetime' => true));
		} elseif(getuserprofile('extcredits'.$_G['setting']['creditstransextra'][9]) - $amount < ($minbalance = $_G['setting']['transfermincredits'])) {
			showmessage('credits_transfer_balance_insufficient', '', array('title' => $_G['setting']['extcredits'][$_G['setting']['creditstransextra'][9]]['title'], 'minbalance' => $minbalance), array('showdialog' => 1, 'showmsg' => true, 'closetime' => true));
		} elseif(!($netamount = floor($amount * (1 - $_G['setting']['creditstax'])))) {
			showmessage('credits_net_amount_iszero', '', array(), array('showdialog' => 1, 'showmsg' => true, 'closetime' => true));
		}
		$to = DB::fetch_first("SELECT username,uid FROM ".DB::table('common_member')." WHERE username='$_G[gp_to]'");
		if(!$to) {
			showmessage('memcp_credits_transfer_msg_user_incorrect', '', array(), array('showdialog' => 1, 'showmsg' => true, 'closetime' => true));
		}

		loaducenter();
		$ucresult = uc_user_login($_G['username'], $_G['gp_password']);
		list($tmp['uid']) = daddslashes($ucresult);

		if($tmp['uid'] <= 0) {
			showmessage('credits_password_invalid');
		}

		updatemembercount($_G['uid'], array($_G['setting']['creditstransextra'][9] => -$amount), 1, 'TFR', $to['uid']);
		updatemembercount($to['uid'], array($_G['setting']['creditstransextra'][9] => $netamount), 1, 'RCV', $_G['uid']);

		if(!empty($_G['gp_transfermessage'])) {
			$transfermessage = dstripslashes($_G['gp_transfermessage']);
			notification_add($to['uid'], 'credit', 'transfer', array('credit' => $_G['setting']['extcredits'][$_G['setting']['creditstransextra'][9]]['title'].' '.$netamount.' '.$_G['setting']['extcredits'][$_G['setting']['creditstransextra'][9]]['unit'], 'transfermessage' => $transfermessage));
		}
		showmessage('credits_transfer_succeed', 'home.php?mod=spacecp&ac=credit&op=transfer', array(), array('showdialog' => 1, 'showmsg' => true, 'locationtime' => true));
	}

}


showmessage()会返回ajax弹窗需要用到的数据,客户端会将此数据保存到<span id="retrun_xxx" style="display:none"></span>以供弹窗使用

效果如下:





上面我们说的都是ajaxpost()方法,当我们点击某个链接删除时就要使用ajaxget()

如下图:


当点击"删除"时以ajaxget()方法操作,模板如下,注意href里必须添加handlekey=xxx:

<td><a οnclick="delJob(this);return false;" href="home.php?mod=spacecp&ac=job_company&op=employ&do=del&handlekey=deljob&jid={$val['id']}">删除</a></td>


<span id="return_deljob" style="display:none"></span>


<script type="text/javascript">
    function delJob(item){
        if(window.confirm("您真的要删除这条信息么?")){
            var url = item.getAttribute("href");
            ajaxget(url,"return_deljob");
        }  
    }
</script>

程序文件如下

if(empty($arr[person])){
           showmessage('人数不能为空', '', array(), array('showdialog' => 1, 'showmsg' => true, 'closetime' => true)); 
        }

if($res){
             showmessage('更新成功', 'home.php?mod=spacecp&ac=job_company&op='.$operation, array(), array('showdialog' => 1, 'showmsg' => true, 'locationtime' => true));
        }

这样就能完美运行AJAX弹窗.

请注意showmessage()以下面这种方式使用只会弹出窗口,此时跳转url为空,'closetime'=>true;并且自动关闭:

showmessage('The message!', '', array(), array('showdialog' => 1, 'showmsg' => true, 'closetime' => true)); 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值