第894天:uch2.0让游客也能按日历查看活动,uch2.0增加显示“所有活动”

星期日 晴 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>


友吧今天

优化活动列表页。

RSS

上一篇:

下一篇:

发表评论

电子邮件地址不会被公开。 必填项已用*标注