本篇文章已加密,请输入密码后查看。
问题背景:
phpcms前台退出登录的时候,提示了一个退出成功0
让我很困惑为啥有个0呢?
问题分析:
进入
./phpcms/modules/member/index.php
找到logout方法,代码如下:
public function logout() {
$setting = pc_base::load_config('system');
//snda退出
if($setting['snda_enable'] && param::get_cookie('_from')=='snda') {
param::set_cookie('_from', '');
$forward = isset($_GET['forward']) && trim($_GET['forward']) ? urlencode($_GET['forward']) : '';
$logouturl = 'https://cas.sdo.com/cas/logout?url='.urlencode(APP_PATH.'index.php?m=member&c=index&a=logout&forward='.$forward);
header('Location: '.$logouturl);
} else {
$synlogoutstr = ''; //同步退出js代码
if(pc_base::load_config('system', 'phpsso')) {
$this->_init_phpsso();
$synlogoutstr = $this->client->ps_member_synlogout();
}
param::set_cookie('auth', '');
param::set_cookie('_userid', '');
param::set_cookie('_username', '');
param::set_cookie('_groupid', '');
param::set_cookie('_nickname', '');
param::set_cookie('cookietime', '');
$forward = isset($_GET['forward']) && trim($_GET['forward']) ? $_GET['forward'] : 'index.php?m=member&c=index&a=login';
showmessage(L('logout_success').$synlogoutstr, $forward);//退出成功0
}
}
phpcms v9虽然广告模块设置禁止统计,但是还是会想数据库中写入很多V9_Poster_201810之类的数据表,导致数据库表太多,取消方法如下:
打开phpcms/modules/poster/index.php,找到
public function poster_click()
注销以下代码:
if($id) {
$siteid = isset($_GET['siteid']) ? intval($_GET['siteid']) : get_siteid();
打开评论页面模板show_list.html
评论框头像显示方法,注意红色代码
{if $userid}
{php $meminfo=get_memberinfo_buyusername($username);$userimg=$meminfo['userid']}
因为网站更换域名了,做了301重定向,在网站后台修改了JS路径,CSS路径 IMG路径,
但是上传附件或图片时就出现了“服务器安全认证错误”,
在后台也没有修改的地方!
因为app_path没有修改,导致app_path的值跟前面几个值不一致。所以上传图片的时候,会提示“服务器安全认证错误”。
解决方法是通过修改“caches/configs/system.php”的app_path的路径。
解决的办法,在phpcms\libs\functions\extention.func.php(自定义函数文件)中定义一个方法
/** * 获取选项的格式化输出 * @param str $field 字段名称 必须 * @param int $value 字段值 必须 * @param int $modelid 模型ID 必须 * 2014-09-28 by awen */ function get_box($field, $value,$modelid) { $fields = getcache('model_field_'.$modelid,'model'); extract(string2array($fields[$field]['setting'])); if($outputtype) { return $value; } else { $options = explode("\n",$fields[$field]['options']); foreach($options as $_k) { $v = explode("|",$_k); $k = trim($v[1]); $option[$k] = $v[0]; } $string = ''; switch($fields[$field]['boxtype']) { case 'radio': $string = $option[$value]; break; case 'checkbox': $value_arr = explode(',',$value); foreach($value_arr as $_v) { if($_v) $string .= $option[$_v].' '; } break; case 'select': $string = $option[$value]; break; case 'multiple': $value_arr = explode(',',$value); foreach($value_arr as $_v) { if($_v) $string .= $option[$_v].' '; } break; } return $string; } }
这个是照内容输出页面的原理弄出来的,是系统的实现方式,安全可靠,只是把原来的、号分隔改成了空格,也可以加一个标签之类的,可以自己改。
前台使用
第一个是你的字段名称,第二个是你字段的值,就是输出的1、2、3,第三个是你所使用的模型iD
如楼盘特色字段名为‘lpts’,字段值为$r[lpts]这是loop循环得到的变量也可以是一个指定的你定义的值,第三个15是楼盘模型的ID
{get_box('lpts',$r[lpts],15)}
效果如下
首先我们注意的一个问题是,作为循环,if判断的条件不能是“==”,因为是“==”的话当走到5之后就永远不会符合条件了,所以第五个后面的就不会被显示了,我们可以用求余作为条件式来作为循环条件,例如第二个:
比如,我想在文章内容页,只显示年月日,不显示时分秒,按列表页用date函数会显示1970,找了很多方法,
后面看到化碟版主的,解决了,所以这里记录一下,直接用 $rs[inputtime] 就是输出了时间戳,然后用date来处理.
{date('M-d, Y',$rs[inputtime])}
另,还发现,date里,写M是显示英文的日期,m是数字。呵呵
<< 向左走,向右走 >>