【discuz】对活动版块的报名人数进行修改

discuz x2论坛的活动版块,虽然有一个报名人数统计功能,但是不能详细分出某个人报名的时候是一个人报名,还是代表多个人报名。针对于这个问题,于是在活动版块又添加了一个用户栏目(参加人数),也就是说在报名的时候需要填写是否是一个人还是多个人。

先展示修改完成之后的效果图:

 

修改第一步:在列表中添加参加人数

修改文件:.\template\default\forum\viewthread_activity.htm

<!--{if $applylist}-->
	<div class="ptm pbm xs1" id="applylist_$_G[tid]">
		<h2>{lang activity_new_join} ($applynumbers {lang activity_member_unit})</h2>
		<table class="dt">
			<tr>
				<th width="140">&nbsp;</th>
				<th>{lang leaveword}</th>
				<!--{if $activity['cost']}-->
				<th width="60">{lang activity_payment}</th>
				<!--{/if}-->
				<th width="60">参加人数</th>
				<th width="110">{lang activity_jointime}</th>
			</tr>
			<!--{loop $applylist $apply}-->
				<tr>
					<td>
						<a target="_blank" href="home.php?mod=space&uid=$apply[uid]" class="ratl vm"><!--{echo avatar($apply[uid], 'small')}--></a>
						<a target="_blank" href="home.php?mod=space&uid=$apply[uid]">$apply[username]</a>
					</td>
					<td><!--{if $apply[message]}--><p>$apply[message]</p><!--{/if}--></td>
					<!--{if $activity['cost']}-->
					<td><!--{if $apply[payment] >= 0}-->$apply[payment] {lang payment_unit}<!--{else}-->{lang activity_self}<!--{/if}--></td>
					<!--{/if}-->
					<td><!--{if $apply[ufielddata]}-->
								<!--{loop $apply[ufielddata] $applyIInfo}--> $applyIInfo[field1] <!--{/loop}-->
							<!--{else}-->
								{lang no_informations}
							<!--{/if}-->
					</td>
					<td>$apply[dateline]</td>
				</tr>
			<!--{/loop}-->
		</table>
		<!--{if $applynumbers > $_G['setting']['activitypp']}-->
		<br \>
		<div class="pgs mbm cl">
			<div class="pg">
				<a onclick="ajaxget('forum.php?mod=misc&amp;action=getactivityapplylist&amp;tid=$_G[tid]&amp;page=2', 'applylist_$_G[tid]')" class="nxt" href="javascript:;">{lang next_page}</a>
			</div>
		</div>
		<!--{/if}-->
	</div>
<!--{/if}-->

第二步: 对报名数目进行调整

对于活动版块,牵扯到discuz数据库中的两个表: pre_forum_activity 和 pre_forum_activityapply

根据报名按钮的响应函数得知:forum.php?mod=misc&amp;action=activityapplies&amp;fid=2&amp;tid=25&amp;pid=26

找到要修改的文件:.\source\module\forum\forum_misc.php

然后在此文件中找到报名处理函数以及取消报名处理函数

if(submitcheck(‘activitysubmit’)) {

********

}elseif(submitcheck(‘activitycancel’)) {

********

}

找到更新数据库中表的代码:

DB::update('forum_activity', array('applynumber' => $ApplyNum_Jhonse), "tid='$_G[tid]'");

如何更新报名人数数据:只要把每个人的报名人数相加即可。(也就是说不管报名还是取消报名,只要重新从pre_forum_activityapply这个表中得到每个人的报名人数就可以了。

所以以上两处都调用一个更新方法就可以了。看如下代码:

 

/********数目更新位置-jhonse*************/
		//数目减少
		$ApplyNum_Jhonse = 0;

		$query_Jhonse_01 = DB::query("(选择语句Sele...) * FROM ".DB::table('forum_activityapply')." WHERE tid='$_G[tid]' ");

		while($Jhonse_query_01 = DB::fetch($query_Jhonse_01)){

			$ufielddata = array();

			$ufielddata = unserialize($Jhonse_query_01['ufielddata']);

			$ApplyNum_Jhonse += intval($ufielddata['userfield']['field1']);

		}

		/////////////////////////////////////////

修改完毕!!!

【discuz】活动版块设置为不审核状态

最近在修改discuz x2的活动主题版块的布局,请看如下截图:

方法一:

布局修改文件:.\template\default\forum\viewthread_activity.htm

修改当中遇到了一个问题,就是每次有人报名的时候,都需要自己手动审核,本以为discuz x2后台有对应的设置,但是翻来覆去也找不到对应的设置,自己只好看源代码了。

在discuz x2数据库中查看了下pre_forum_activityapply表,发现一个字段(verified)的值有1和0的区别,于是就修改其对应的值,结果证明确实是根据verified这个字段来判断是否要审核。请看一下截图:

注: 0代表要审核,1代表已经审核

于是只要对其表所有的verified字段的值都设置为1就可以了。看如下代码:

DB::query(“UPDATE  “.DB::table(‘forum_activityapply’).” SET verified=1 “);

这代码放到哪个文件好呢?

然后又找代码查看:

看到:./source/include/thread/thread_activity.php文件

修改即可。

方法二: 直接修改响应数据库的函数,将其值改为1.

修改文件: ./source/module/forum/forum_misc.php

至于为什么是这个函数:

请看按钮响应的链接:

forum.php?mod=misc&amp;action=activityapplies&amp;fid=2&amp;tid=25&amp;pid=26

修改位置:

$verified = $thread[‘authorid’] == $_G[‘uid’] ? 1 : 0;

将其值修改为 $verified = 1;

即可。

【discuz x2】插件-数据库操作

操作之前先初始化数据:

require_once '../../class/class_core.php';
$discuz = & discuz_core::instance();
$discuz->init();

 

插入数据:

$arr = array('username'=>$HGID,'time'=>$Time,'score'=>$fs,'course'=>$xc,'coursebz'=>$xcbz,'pl'=>$pl);
$Info = DB::insert('hrg_score',$arr,1);

返回值是数据库条数。

数据库查询:

$query = DB::query("sql语句");
while($user = DB::fetch($query)) {
}

其它的参考:

DB::table() 增加了pre的数据库表名
DB::delete() 删除表中数据
DB::insert() 向表中插入数据
DB::update() 更新表中数据
DB::fetch() 配合DB::query来实现数据资源数据的获取
DB::query() 执行一条数据库语句
DB::fetch_first() 获取结果集的第一条记录

【discuz x2】插件的安装卸载设计

安装文件: install.php(在插件目录下)

以下代码是在安装的过程中创建一个数据库:

<?php

	if(!defined('IN_DISCUZ')){

		exit('Access Denied');

	}

$sql = <<<EOF

	DROP TABLE IF EXISTS pre_hrg_score;

	CREATE TABLE pre_hrg_score(
		`ID` int not null AUTO_INCREMENT,
		`username` varchar(50) not null,
		`time` varchar(100) not null,
		`score` int not null,
		`course` varchar(200) not null,
		`coursebz` varchar(400) not null,
		`pl` text,
		PRIMARY KEY (`ID`)
	)ENGINE=MyISAM;

EOF;

	runquery($sql);

	$finish = true;

?>

 

注: 一定要注意格式,特别是MYSQL代码

卸载文件:uninstall.php

删除数据库

<?php

	if(!defined('IN_DISCUZ')){

		exit('Access Denied');

	}

$sql = <<<EOF

DROP TABLE IF EXISTS pre_hrg_score;

EOF;

	runquery($sql);

	$finish = true;

?>

 

效果:

【discuz x2】制作单页面模版

单页面在discuz x2中是采用两个文件,一个是php文件,另外一个htm文件(被调用的模版)第一: 创建一个php文件 如:tableSend.php  存放于根目录下然后对该文件写入代码:

<?php
require_once “./source/class/class_core.php”;//引入系统核心文件

$discuz = & discuz_core::instance();//以下代码为创建及初始化对象

$discuz->cachelist = $cachelist;

$discuz->init();

include template(“forum/tableSend/tableSend”);//调用单页模版文件
?>

第二步: 设置模版文件 tableSend.htm 存放于template/forum/tableSend/tableSend/下
写入如下代码:

{subtemplate common/header}

自己的布局用的代码

{subtemplate common/footer}

第三步: 就直接可以调用tableSend.php文件来访问了。
实例介绍:(在线调查)模版文件tableSend.htm代码如下:

<style>

#tableSend{
margin: 0 auto;
}

#tableSend h3{
font-size: 16px;
text-align: center;
}

#tableSend ul{
margin-top: 30px;
}

#tableSend ul li{
width: 960px;
height: 50px;
text-align: center;
}

#tableSend table{
width: 700px;
height: 700px;
margin: 0 auto;
}

#submit{
border: 1px dotted #000000;
background: #ffffff;
width: 80px;
height: 40px;
}

</style>

<div id=”tableSend”>
<br />
<h3>在线填表报名</h3>
<hr />
<table>
<form action=”./template/default/forum/tableSend/sendmail/tb.php” method=”post”>
<tr><td>名字:</td><td><input type=”text” name=”name”/></td></tr>
<tr><td>Email:</td><td><input type=”text” name=”email”/></td></tr>
<tr><td>Tel:</td><td><input type=”text” name=”tel”/></td></tr>
<tr><td>华高ID:</td><td><input type=”text” name=”hg_name”/></td><td>说明:注册用户名</td></tr>
<tr><td>所在Town:</td><td><input type=”text” name=”Town”/></td></tr>
<tr><td>大概杆数:</td><td><input type=”text” name=”dggs”/></td><td>a.初学 b. 100左右 c.86 -95 d. 75 -85 d.其他</td></tr>
<tr><td>希望下场时间:</td><td><input type=”text” name=”xctime”/></td><td>a.周日下午 b.周三下午 c.其他</td></tr>
<tr><td>希望下场频率:</td><td><input type=”text” name=”xcpl”/></td><td>a 一次/周; b. 隔周打 c.4次/月 d.其他</td></tr>
<tr><td>球场要求:</td><td><input type=”text” name=”qcyq”/></td><td>a. 质优价高 b.经济型 c. 无严格要求</td></tr>
<tr><td></td><td><input type=”submit” name=”submit” id=”submit” value=”确认”/></td></tr>
</form>
</table>
<hr />
<div>
<h3>华高网球友会宗旨:</h3>
<ul>
<li>团购价格拿到好deal</li>
<li>组织华人球友一起玩</li>
<li>根据报名数据,有针对性的提前分好小组,提高打球效率</li>
</ul>
<hr />
</div>
</div>

效果:

【discuz x2】缓存机制

首先Discuz! X2版本中,对css的处理较之前的版本更加智能化了,每个页面都会加载以下两个类似的css:data/cache/style_1_common.css

data/cache/style_1_forum_index.css

首先,这两个css是程序生成的css缓存文件,所以如果要改css的话,不能直接改这两个文件,否则一更新缓存,之前的改动就无效了。

拿自带的default模板举例,default模板中,带有一个common的文件夹,这个文件夹存放的是全局模板文件,

里面有css文件:

style_1_common.css????是【common.css】生成的缓存

style_1_forum_index.css 是【module.css】生成的缓存

 

因此只有改动template/default/common/common.css这个样式表文件才能对页面样式进行真正的改动,