立即注册 登录
彼岸网 返回首页

天香公主的个人空间 https://www.bian-wang.com/discuz/?10005 [收藏] [复制] [分享] [RSS] https://github.com/txgz999/discuz/wiki

日志

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

热度 5已有 6996 次阅读2014-1-3 08:43 PM |个人分类: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;

路过
1

鸡蛋
2

鲜花

握手

雷人

刚表态过的朋友 (3 人)

发表评论 评论 (7 个评论)

回复 夙興夜寐罔徒勞 2016-6-11 12:35 PM
天香公主: 我不了解道具的机制,不过可以帮你查查问题所在。把你那个道具寄给我吧,还请告诉我要如何安装和使用它。
嗯嗯,邮件已经发送过去了哈

测试网站用的是 http://www.freewebhostingarea.com/ 上面的服务器,木有问题,正式网站用的是 阿里云的服务器
回复 天香公主 2016-6-11 08:58 AM
夙興夜寐罔徒勞: 前阵子写了个补签卡的道具【文件直接上传到ftp】,在试验网站上木有遇到问题,结果今天放到正式的网站时,上传后发现道具列表消失了。。。网上有相似的问题,但 ...
我不了解道具的机制,不过可以帮你查查问题所在。把你那个道具寄给我吧,还请告诉我要如何安装和使用它。
回复 夙興夜寐罔徒勞 2016-6-11 12:25 AM
补充下,测试论坛是utf-8编码,正式论坛是gbk的,所以有想会不会是语言包的问题,后来把相关文件都改成gbk编码格式,依旧无法加载成功。。。有查验过,系统自带的几个道具都是可以顺利加载的
回复 夙興夜寐罔徒勞 2016-6-11 12:18 AM
前阵子写了个补签卡的道具【文件直接上传到ftp】,在试验网站上木有遇到问题,结果今天放到正式的网站时,上传后发现道具列表消失了。。。网上有相似的问题,但没答案,于是默默地去找原因,发现是admincp_magic里头getmagics时,无法顺利加载刚上传的道具文件php,不知道能否解决这问题
回复 小时候很迷茫 2015-6-11 03:57 AM
这个没看明白,自己动手操作一下去
回复 彼岸网 2014-2-7 01:13 AM
今天这一折腾又搞清楚了一个问题,哪怕装了qing,要改的也是default\home\space_blog_view.htm,不是qing\home\space_blog_view.htm
在这里记个笔记。
回复 彼岸网 2014-1-4 12:50 PM
这篇文似乎应该允许读者表态。
当心蜗牛。

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

小黑屋|Archiver|彼岸网  

Powered by Discuz! X3.1 © 2001-2014 Comsenz Inc.
GMT-4, 2026-10-6 02:22 AM , Processed in 0.030595 second(s), 22 queries.

返回顶部