1个回答
展开全部
修改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元的功能,通过自己动手就可以实现了。
一、需要修改的文件:
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元的功能,通过自己动手就可以实现了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询