默认情况下,dz的投票主题的计票天数只能填写数字,也就是多少天,有时候站长可能需要精确到分,也就是直接选择日期模式,如下图:
想要实现这个功能,需要改2个文件,一个模板,一个系统文件
默认文件路径:template\default\forum\post_poll.htm,找到<input type="text" name="expiration" id="polldatas" class="px pxs" value="{if $_GET[action] == 'edit'}{if !$poll[expiration]}0{elseif $poll[expiration] < 0}{lang poll_close}{elseif $poll[expiration] < TIMESTAMP}{lang poll_finish}{else}{echo (round(($poll[expiration] - TIMESTAMP) / 86400))}{/if}{/if}" tabindex="1" /> {lang days}
改成:
<input style = "width: 200px;" type="text" name="expiration" id="polldatas" class="px" value="{if $_GET[action] == 'edit'}{if !$poll[expiration]}0{elseif $poll[expiration] < 0}{lang poll_close}{elseif $poll[expiration] < TIMESTAMP}{lang poll_finish}{else}{echo date('Y-m-d H:i', $poll['expiration'])}{/if}{/if}" tabindex="1" />
这个是把发帖时模板改成日历选择模式
接着改数据模式,默认是天数,改成截至时间戳,
打开文件:source\class\extend\extend_thread_poll.php,找到if(preg_match("/^\d*$/", trim($_GET['expiration']))) {,这行,默认是正则来判断是否是数字,所以从这个往下改成:
if(trim($_GET['expiration'])) {
if(empty($_GET['expiration'])) {
$this->pollarray['expiration'] = 0;
} else {
$this->pollarray['expiration'] = strtotime($_GET['expiration']); // 过期时间直接前台日期转成时间戳
}
} else {
showmessage('poll_maxchoices_expiration_invalid');
}
然后继续找$expiration = intval($_GET['expiration']);,140行左右,改成:
$expiration = strtotime($_GET['expiration']);
if($close) {
$pollarray['expiration'] = TIMESTAMP;
} elseif($expiration) {
if(empty($pollarray['expiration'])) {
$pollarray['expiration'] = 0;
} else {
$pollarray['expiration'] = $expiration;
}
}
完工。
有关PHP系统、Discuz或网站等各种问题,可以联系QQ1069971363寻求付费支持
|