星期日 晴 10~20℃
uch2.0 让游客也能按日历查看活动
扩展这功能真是费不少脑筋,比较绕,通常都会以为是修改 html 模板对应的 source/space_event.php 或者 source/cp_event.php。本来昨晚已经写进待扩展计划,有点晚了,准备第二天再看,或者留给 Ryan 去处理,不过在关机前尝试用“顺藤摸瓜”的方法总算解决了。有必要写一下思路。
游客访问活动列表页,日历功能区会显示:
您需要先登录才能继续本操作
整个 home 目录搜索这条信息字样,只有 language/lang_showmessage.php 有:
//source/cp_thread.php
‘to_login’ => ‘您需要先登录才能继续本操作’,
可是注释上注的是“//source/cp_thread.php”,和活动不搭边。然后尝试整个 home 目录搜索“to_login”,搜到几个文件,因为调用日历的 js 里出现了“cp.php”:
function showcalendar(month){
var month = month ? "&month="+month : "";
ajaxget(‘cp.php?ac=event&op=calendar’ + month + ‘&date=$_GET[date]&url=<!–{eval echo urlencode($theurl)}–>’, ‘eventcalendar’);
}
所以将目标锁定在 cp.php 上。在 cp.php 里找到 to_login:
//权限判断
if(empty($_SGLOBAL['supe_uid'])) {
if($_SERVER['REQUEST_METHOD'] == ‘GET’) {
ssetcookie(‘_refer’, rawurlencode($_SERVER['REQUEST_URI']));
} else {
ssetcookie(‘_refer’, rawurlencode(‘cp.php?ac=’.$ac));
}
showmessage(‘to_login’, ‘do.php?ac=’.$_SCONFIG['login_action']);
}
把条件改为:
if(empty($_SGLOBAL['supe_uid']) && $op != "calendar")
再访问活动列表页,提示:
您指定的用户空间不存在。
在 language/lang_showmessage.php 搜到:
‘space_does_not_exist’ => ‘您指定的用户空间不存在。’,
再次搜索 home 目录,在 cp.php 里找到:
//获取空间信息
$space = getspace($_SGLOBAL['supe_uid']);
if(empty($space)) {
showmessage(‘space_does_not_exist’);
}
增加条件:
$space = getspace($_SGLOBAL['supe_uid']);
if(empty($space) && $op != "calendar") {
showmessage(‘space_does_not_exist’);
}
刷新活动列表页,惊喜来了。
方法总结:
改 cp.php 文件。
第一处:
if(empty($_SGLOBAL['supe_uid']))
改为:
if(empty($_SGLOBAL['supe_uid']) && $op != "calendar")
第二处:
if(empty($space))
改为:
if(empty($space) && $op != "calendar")
另外,这个日历鼠标经过日期时会显示前 10 条活动。这个功能有点鸡肋,看起来是方便于用户,但感觉有点多余,因为显示活动时会把下面的日历遮住一部分,操作不流畅,会使用户产生受阻心理。如果不需要显示,可以把它隐藏起来,方法比较简单,只需要改 css 就行:
.dayevents ul { display:none }
附:活动列表页的模板是 space_event_list.htm,而这个日历的 html 代码在 cp_event.htm 中,有明显的星期特征:
<li class="calendarli calendarweek">日</li>
<li class="calendarli calendarweek">一</li>
<li class="calendarli calendarweek">二</li>
<li class="calendarli calendarweek">三</li>
<li class="calendarli calendarweek">四</li>
<li class="calendarli calendarweek">五</li>
<li class="calendarli calendarweek">六</li>
关于 uch2.0 热点话题的 feedhotmin 参数设置
source/space_thread.php
$minhot = $_SCONFIG['feedhotmin']<1?3:$_SCONFIG['feedhotmin'];
$wheresql = "main.hot>=’$minhot’";
一直没明白这里的 main.hot 为什么不写死一个固定值。发邮件向 Ryan 讨教,Ryan 说看看配置文件里的 feedhotmin 设置。
登录后台,在“站点设置”里有个“热点推荐的最小热度值”,默认是 3。修改数值测试一下才明白,原来当这里的值设为 0(即 <1 时),就相当于设置为 3。要改话题列表的“热点推荐的最小热度值”,可以在后台设置里修改,也可以在 source/space_thread.php 直接把 main.hot 写死,不过写死之后,就不可以在后台设置里修改了。
uch2.0 点击“尚未结束的活动”“已结束的活动”时分类、日期、省份、城市保持不变
以尚未结束的活动为例。
原:
href="space.php?do=event&view=all&type=going"
增加参数 classid、province、city、date:
href="space.php?do=event&view=$view&type=going&classid=$_GET[classid]&province=$_GET[province]&city=$_GET[city]&date=$_GET[date]"
uch2.0 增加显示“所有活动”
含“未结束”和“已结束”的所有活动。增加一个参数 type=total。
source/space_event.php
第一处:
if($view == "all" || $view == "city") {
$type = $_GET['type'] == "over" ? $_GET['type'] : "going";
改为:
if($view == "all" || $view == "city") {
$type = $_GET['type'] == "over" || $_GET['type'] == "going" ? $_GET['type'] : "total";
第二处:
if($type=="over") {
$wherearr[] = "e.endtime < ‘$_SGLOBAL[timestamp]‘";
$orderby = "e.eventid DESC";
$theurl .= "&type=over";
} else {
$wherearr[] = "e.endtime >= ‘$_SGLOBAL[timestamp]‘";
$orderby = " e.eventid DESC";
$theurl .= "&type=going";
}
改为:
if($type=="over") {
$wherearr[] = "e.endtime < ‘$_SGLOBAL[timestamp]‘";
$orderby = "e.eventid DESC";
$theurl .= "&type=over";
} elseif($type=="going") {
$wherearr[] = "e.endtime >= ‘$_SGLOBAL[timestamp]‘";
$orderby = " e.eventid DESC";
$theurl .= "&type=going";
} else {
$wherearr[] = "e.endtime >= ‘$_SGLOBAL[daystart]‘";
$orderby = " e.eventid DESC";
$theurl .= "&type=total";
}
space_event_list.htm 模板调用:
<a href="space.php?do=event&view=$view&type=total&classid=$_GET[classid]&province=$_GET[province]&city=$_GET[city]&date=$_GET[date]"><!–{if $_GET[date]}–>$_GET[date]的<!–{/if}–>所有活动</a>
友吧今天
优化活动列表页。
发表评论