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

本篇介绍Discuz系统提取和储存数据的套路,并探讨一下HQ布置给我的一个任务:如何让用户选择是否允许读者对日志表态。上篇我们说到当网站收到对博文列表的请求home.php?mod=space&do=blog时,网站程序内部分派工作的次序是1 home.php2 分派给 source\module\home\home_space.php3 分派给 source\include\space\space_blog.php4 数据取自source\class\table\table_home_blog.php5 格式定义在 template\default\home\space_blog_list.htm类似的,当网站收到对某篇博文的阅读请求,例如home.php?mod=space&uid=40&do=blog&id=5189时,网站程序内部分派工作的次序是1 home.php2 分派给 source\module\home\home_space.php3 分派给 source\include\space\space_blog.php4 数据取自source\class\table\table_home_blog.php5 格式定义在 template\default\home\space_blog_view.htm而当用户点击了那里的编辑按钮时,网站就收到对那篇博文的编辑请求,例如home.php?mod=spacecp&ac=blog&blogid=5189&op=edit时,网站程序内部分派工作的次序是1 home.php2 分派给 source\module\home\home_spacecp.php3 分派给 source\include\spacecp\spacecp_blog.php4 数据取自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.php3a 利用了函数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;

远离城市的喧嚣,寻找一份宁静,

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

相关文章:

你感兴趣的文章:

标签云: