Discuz系统结构分析(二): 提取和储存数据

本篇介绍Discuz系统提取和储存数据的套路,并探讨一下HQ布置给我的一个任务:如何让用户选择是否允许读者对日志表态。上篇我们说到当网站收到对博文列表的请求home.php?mod=space&do=blog时,网站程序内部分派工作的次序是
1   home.php
2         分派给 source\module\home\home_space.php
3               分派给 source\include\space\space_blog.php
4                     数据取自source\class\table\table_home_blog.php
5                     格式定义在 template\default\home\space_blog_list.htm

类似的,当网站收到对某篇博文的阅读请求,例如home.php?mod=space&uid=40&do=blog&id=5189时,网站程序内部分派工作的次序是
1   home.php
2         分派给 source\module\home\home_space.php
3               分派给 source\include\space\space_blog.php
4                     数据取自source\class\table\table_home_blog.php
5                     格式定义在 template\default\home\space_blog_view.htm
而当用户点击了那里的编辑按钮时,网站就收到对那篇博文的编辑请求,例如home.php?mod=spacecp&ac=blog&blogid=5189&op=edit时,网站程序内部分派工作的次序是
1   home.php
2         分派给 source\module\home\home_spacecp.php
3               分派给 source\include\spacecp\spacecp_blog.php
4                     数据取自source\class\table\table_home_blog.php (C::t('home_blog')->fetch)
5                     格式定义在 template\default\home\spacecp_blog.htm

这里比前面要复杂的是除了显示数据外,还要考虑如何处理用户提交的数据。我们看到
3    source\include\spacecp\spacecp_blog.php
3a      利用了函数source\function\function_blog.php (blog_post)
4        数据储存source\class\table\table_home_blog.php ( C::t('home_blog')->update 和 C::t('home_blog')->insert)


让我们具体来看看"不允许评论"这个选项的值是如何储存和提取,以及如何应用的。


1。在显示页template\home\spacecp_blog.htm里

<label><input type="checkbox" name="noreply" value="1" class="pc"{if $blog[noreply]} checked="checked"{/if}> {lang comments_not_allowed}</label>  
注意当前的"不允许评论"的值是$blog[noreply],这是因为这个值是存在home_blog表的noreply列里的。

2。处理用户提交值的文件source\function\function_blog.php里
    $blogarr = array(
        'subject' => $POST['subject'],
        'classid' => $classid,
        'friend' => $POST['friend'],
        'password' => $POST['password'],
        'noreply' => empty($POST['noreply'])?0:1,
        'catid' => intval($POST['catid']),
        'status' => $blog_status,
    );

3。使用这个值来决定是否显示表态框,在template\default\home\space_blog_view.htm里
<!--{if $blog[friend] != 3 && !$blog[noreply]}-->
  <div id="click_div">
    <!--{template home/space_click}-->
  </div>
<!--{/if}-->
目前"不允许评论"这个选项同时决定了读者是否能表态和是否能评论。HQ希望增加一个选项"不允许表态"来单独管理读者是否能表态。这需要做下列的改动:
1。数据库里在home_blog表里增加noclick列
ALTER TABLE home_blog ADD noclick tinyint(1) NOT NULL DEFAULT '0';
这里假定安装数据库时没有设置数据表名的前缀,不然在表名里得加上那个前缀。 
2。在显示页template\default\home\spacecp_blog.htm里增加(可加在"不允许评论"的前面)
<label><input type="checkbox" name="noclick" value="1" class="pc"{if $blog[noclick]} checked="checked"{/if}> 不允许表态</label>
3。在处理用户提交值的文件source\function\function_blog.php的$blogarr里增加
    'noclick' => empty($POST['noclick'])?0:1, 
4。使用这个值来决定是否显示表态框,在template\default\home\space_blog_view.htm里将!$blog[noreply]}改为!$blog[noclick]}
<!--{if $blog[friend] != 3 && !$blog[noclick]}-->
  <div id="click_div">
    <!--{template home/space_click}-->
  </div>
<!--{/if}-->
如果要将"不允许表态"的默认设置设为不允许表态的话,可以在source\include\spacecp\spacecp_blog.php里给新日志赋值:
if(empty($blog)) { 
    ...
    $blog['message'] = empty($_GET['message'])?'':getstr($_GET['message'], 5000);
后加
$blog['noclick'] = 1;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值