我现在想实现的是:在首页导航栏上增加一个专区,这一项只有特定的用户才能看到,其它用户看不到。
我的users表中增加了一个字段 usertype tinyint(4) 默认是0,现在我规定只有usertype为2时才能看到增加的导航栏。
于是我在index.php里这样写的代码
$user_id = $_SESSION['user_id']; $sqlshowsal = "SELECT usertype FROM " . $GLOBALS['ecs']->table('users') . " WHERE user_id = '$user_id'"; $row = $GLOBALS['db']->getRow($sqlshowsal); $usertype = $row['usertype']; $smarty->assign('showqudaoflag', $usertype);//设置标记
在index.dwt页面是这样写的:
<!-- {if ($showqudaoflag eq 2 ) }--> <li ><a href="group_buy.php">渠道专区</a></li> <!-- {/if} -->
可是结果是: 如果会员不登陆,那导航栏就不显示我增加的内容,会员如果登陆,导航栏就显示我增加的内容了,不管他的usertype是不是等于2。这显然不是我想达到的目的。
我调试了半天 ,当我在 设置标记前一行加上这样一行代码时
die("<script language='javascript'> alert('$usertype');</script>");
弹出的框显示的$usertype 显示完全正确。说明我从数据库中获取到的值是正确的,但是为什么,$userype 明明弹出时为0,但是 在index.dwt页面,仍然还显示导航栏呢?
谁能帮我解决一下这个问题。 谢谢了!
又调试了下,发现是缓存问题。而且清楚浏览器缓存也不起作用,必须在ecshop后台点击清楚缓存按钮才能起效果。
但是这样显然是不行的,你不可能时刻都手动清空缓存。于是搜索了一下,如何清楚ecshop缓存。
打开includes/cls_template.php,找到下面一段
if (file_put_contents($this->cache_dir . ‘/’ . $cachename . ‘.php’, ‘<?php exit;?>’ . $data . $out) === false)
{
trigger_error(‘can/’t write:’ . $this->cache_dir . ‘/’ . $cachename . ‘.php’);
}
将这一段注释掉问题得以解决。
记住缓存,这个问题真是困扰了我好久,当然也花费了不少时间。