在对ecshop的开发中往往会在后台自己添加一个栏目, 对这个栏目进行权限的分配,最终的效果如下图:
栏目:
权限:
*** 作方法:
一、添加栏目
找到文件 /languages/zh_cn/admin/common.php 添加
然后找到文件 /admin/includes/inc_menu.php 添加
ok, 刷新下后台,看看栏目是否添加成功了呢。
二、添加权限
在数据库找到数据表 admin_action 添加
然后找到文件 /admin/includes/inc_priv.php 添加
ok, 点击一个管理员的权限,看下权限是不是也有了呢!!!!
1.admin/includes/inc_menu.php$modules['02_cat_and_goods']['my_project'] = 'my_project.php?act=list_all'//是显示在左侧导航栏里的
2.common.php 显示在管理员的左边导航
$_LANG['my_project']= '用户方案'
3.inc_priv.php 存在于
$purview['my_project']= 'my_project'
所有的权限 *** 作动作在ecs_admin_action表中,parent_id = 0的为顶级栏目,其他子栏目的 *** 作,都继承了parent_id 和顶级栏目关联起来.当你增加了后台栏目,需要给该栏目授权的时候,你可以admin\includes\inc_menu.php中增加$modules['02_cat_and_goods'][test'] = 'test.php?act=list'
在admin\includes\inc_priv.php中,你可以增加$purview['test'] = 'test',那么test.php?action=list这个栏目将用test来控制权限.
程序中,也就是在test.php中,用函数admin_priv('test')来检测权限而在后台 权限管理->管理员列表->授权会显示相应权限,你可以给予授权,权限管理在电子商务系统中特别重要,需要划分合理,安全划分.
4.存在于 languages/zh_cn/admin/priv_action.php中
$_LANG['my_project'] = '方案管理'展示在管理员选择项里
其中my_project权限就是存入到表admin_action 和admin_user
用admin_priv('my_project')函数(admin/includes/lib_main.php)判断管理员的my_project这项权限是否存在于,存在就执行,不存在就返回
修改ecshop网站后台,实现文章内容可以按会员等级分配阅读权限,需要向数据库表ecs_article中,增加user_rank字段,类型为varchar型即可。一、需要修改的文件:
1、后台目录下一般为:admin//article.PHP,这是数据处理程序文件
2、后台目录下:admin/templets/article_info.htm这是后台添加文档时的模板显示文件
3、文章访问时,前台显示页面:即网站根目录下article.php文件
4、文章访问前台的模板文件:根目录下/themes/default/article.dwt文件
以上总共4个文件,都需要做相应的修改。
二、每个文件中需要修改的内容:
1、article.php文件中:
在文件最后,添加获取用户等级函数:get_rank_list_wxch(),代码如下:
function get_rank_list_wxch()
{
$sql = "SELECT * FROM " . $GLOBALS['ecs']->table('user_rank') .
" ORDER BY min_points"
return $GLOBALS['db']->getAll($sql)
}
函数文件名称可以自行定义,也就是get_rank_list_wxch(),表示函数名称。在article.php这个文件中,分别有添加与编辑文档两处备注,
我们需要使用get_rank_list_wxch()这个函数,将系统中所有用户等级读取出来,并传值给模板文件,代码是
$smarty->assign('user_ranks', get_rank_list_wxch())
将以上代码,分别复制到编辑与添加相应位置中,目的是为了在添加文档及编辑文档时都将系统中的用户级别读取出来
在添加文章时,将用户等级保存到数据库即在
/*------------------------------------------------------ */
//-- 添加文章
/*------------------------------------------------------ */
if ($_REQUEST['act'] == 'insert')这个判断中,有一个sql语句:
$sql = "INSERT INTO ".$ecs->table('article')."(title, cat_id, article_type, is_open, author, ".
"author_email, keywords, content, add_time, file_url, open_type, link, description,user_rank,keyword1,keyword2,remarkdata) ".
"VALUES ('$_POST[title]', '$_POST[article_cat]', '$_POST[article_type]', '$_POST[is_open]', ".
"'$_POST[author]', '$_POST[author_email]', '$_POST[keywords]', '$_POST[FCKeditor1]', ".
"'$add_time', '$file_url', '$open_type', '$_POST[link_url]', '$_POST[description]','$ranks', '$_POST[keyword1]', '$_POST[keyword2]', '$_POST[remarkdata]')"
以上是已经修改好的语句了,中间增加了一个user_rank字段值的内容。
还需要在修改文章时,将文档权限读取出来,保存时将修改后的用户等级保存到数据库,所以需要在
/*------------------------------------------------------ */
//-- 编辑
/*------------------------------------------------------ */
if ($_REQUEST['act'] =='update'){
这段条件代码中修改成以下内容:
if ($exc->edit("title='$_POST[title]', cat_id='$_POST[article_cat]', article_type='$_POST[article_type]', is_open='$_POST[is_open]', author='$_POST[author]', author_email='$_POST[author_email]', keywords ='$_POST[keywords]', file_url ='$file_url', open_type='$open_type', content='$_POST[FCKeditor1]', link='$_POST[link_url]', description = '$_POST[description]',user_rank='$ranks',keyword1='$_POST[keyword1]',keyword2='$_POST[keyword2]',remarkdata='$_POST[remarkdata]'", $_POST['id']))
即增加保存到数据库的用户等级字段:即增加了user_rank='$ranks'这个内容。以上是修改好的内容,直接复制就行了。
程序文件就修改完了,接下来需要修改admin/templets/article_info.htm模板文件了。
2、admin/templets/article_info.htm模板文件:
在模板文件中,html是以表格进行布局的,你需要做的是在相应的表格行列位置,添加等级复选框,一般将他放在是否显示这一行下方即:
<tr >
<td class="narrow-label">{$lang.is_open}</td>
<td>
<input type="radio" name="is_open" value="1" {if $article.is_open eq 1}checked{/if}>{$lang.isopen}
<input type="radio" name="is_open" value="0" {if $article.is_open eq 0}checked{/if}>{$lang.isclose}{$lang.require_field}</td>
</tr>
{else}
<tr>
<td colspan="2"><input type="hidden" name="article_type" value="0" /><input type="hidden" name="is_open" value="1" /></td>
</tr>
{/if}
在以上代码下方,添加一行:
<tr>
<td class="narrow-label">阅读权限</td>
<td>
{foreach from=$user_ranks item=ranks}
{$ranks.rank_name}<input type="checkbox" name="rank[]" value="{$ranks.rank_id}" {if strpos($user_rank,$ranks.rank_id) !== false} checked="checked" {/if}/>
{/foreach}
<span style="color:#FF0000"><br>注:(勾选后,文章内容仅有指定的用户可以阅读。全部未选,表示所有用户可阅读。)</span>
</td>
</tr>
后台就修改完毕了,这时添加或编辑文章时,就多了用户等级的复选框了,效果如下图:
3、前台程序文件:网站根目录下article.php文件中,在以下代码中,最后中一行为添加的内容
/* 文章详情 */
$article = get_article_info($article_id)
if (empty($article))
{
ecs_header("Location: ./\n")
exit
}
if (!empty($article['link']) &&$article['link'] != 'http://' &&$article['link'] != 'https://')
{
ecs_header("location:$article[link]\n")
exit
}
$smarty->assign('article_categories', article_categories_tree($article_id))//文章分类树
$smarty->assign('categories', get_categories_tree()) // 分类树
$smarty->assign('helps',get_shop_help())// 网店帮助
$smarty->assign('top_goods',get_top10()) // 销售排行
$smarty->assign('best_goods', get_recommend_goods('best')) // 推荐商品
$smarty->assign('new_goods',get_recommend_goods('new')) // 最新商品
$smarty->assign('hot_goods',get_recommend_goods('hot')) // 热点文章
$smarty->assign('promotion_goods', get_promote_goods()) // 特价商品
$smarty->assign('related_goods',article_related_goods($_REQUEST['id'])) // 特价商品
$smarty->assign('id', $article_id)
$smarty->assign('username', $_SESSION['user_name'])
$smarty->assign('email',$_SESSION['email'])
$smarty->assign('type','1')
$smarty->assign('promotion_info', get_promotion_info())
$smarty->assign('user_rank',$_SESSION[user_rank])
这里的最后一行为添加的内容。用于将当前用户的等级信息,传值给前台模板文件。
4、根目录下/themes/default/article.dwt前台文章显示模板文件:
在显示文章内容的地方:<p>{$article.content} </p>,增加对用户等级的判断:
{if strpos($article.user_rank, $user_rank) !== false || empty($article.user_rank)} <p>{$article.content} </p>{else}<p>对不起,您没有阅读权限!</p>{/if}
意思是,如果用户等级被允许阅读,或文章没有限制用户等级,就可以阅读文章。否则,就会显示,没有阅读权限的内容。
这样,在ecshop后台,就完成了增加对用户按等级进行文章阅读权限控制的功能了,网上叫价100元的功能,通过自己动手就可以实现了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)