Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

查看资讯自定义信息[7.0,7.5]

[复制链接]
lidq.jingwu 发表于 2009-11-11 21:42:46 | 显示全部楼层 |阅读模式
资讯自定义信息是经过序列化函数写进数据库中的。
自定义字段的信息 是在表supe_customfields中的,它里面记录了自定义字段的名称、类型、数据长度等信息。
用户投稿在自定义字段所填的信息是在表 supe_spacenews 的字段 customfieldtext 中的。
把自定义字段的名称与内容同时查出来要 supe_spacenews 与 supe_customfields 联查,但在查资讯时建议查三张表,因为supe_spaceitems表是资讯的主表。
  1. SELECT i.*,n.*,c.type as c_type,c.name as c_name,c.displayorder as c_displayorder,c.customfieldtext as c_customfieldtext,c.isdefault as c_isdefault,c.isshare as c_isshare FROM supe_spaceitems i, supe_spacenews n, supe_customfields c WHERE i.itemid = n.itemid AND n.customfieldid = c.customfieldid AND n.customfieldid !=0
复制代码
查询自定义字段信息是要对数据进行反序列化的,用函数:unserialize.
一般常的查询自定义字段有三种方法:
一种是在资讯自己的模板(new_view.html.php)里面显示,这个数据在加载模板前已经放在$news这个变量里面了,在显示资讯内容的模板里面会看到这样的代码:
  1. <!--{if !empty($news[custom][name])}-->
  2. <div id="article_summary">
  3. <!--{loop $news[custom][key] $ckey $cvalue}-->
  4. <h6>$news[custom][name]</h6>
  5. <p>$cvalue[name]news[custom][value][$ckey]</p>
  6. <!--{/loop}-->
  7. </div>
  8. <!--{/if}-->
复制代码
这一段代码就是将$news里面关于资讯自定义字段的内容取出来,并显示在页面上。
注:此种方法不用进行数据的反序列化,因为数据已经被处理过了。

第二种方式是用SQL语句的来查询数据,即模块的高级模式。
SQL原型如下:
  1. SELECT i.*,n.*,c.type as c_type,c.name as c_name,c.displayorder as c_displayorder,c.customfieldtext as c_customfieldtext,c.isdefault as c_isdefault,c.isshare as c_isshare FROM supe_spaceitems i, supe_spacenews n, supe_customfields c WHERE i.itemid = n.itemid AND n.customfieldid = c.customfieldid AND n.customfieldid !=0
复制代码
通过supe_spaceitems,supe_spacenews,supe_customfields三表联查来取得数据,然后在模块功能里面用高级模式产生调用代码,如下:
  1. <!--{block name="tag" parameter="sql/SELECT%20i.%2A%2Cn.%2A%2Cc.type%20as%20c_type%2Cc.name%20as%20c_name%2Cc.displayorder%20as%20c_displayorder%2Cc.customfieldtext%20as%20c_customfieldtext%2Cc.isdefault%20as%20c_isdefault%2Cc.isshare%20as%20c_isshare%20FROM%20supe_spaceitems%20i%2C%20supe_spacenews%20n%2C%20supe_customfields%20c%20WHERE%20i.itemid%20%3D%20n.itemid%20AND%20n.customfieldid%20%3D%20c.customfieldid%20AND%20n.customfieldid%20%21%3D0/limit/0,10/cachetime/900/cachename/test/tpl/data"}--><!--test-->
复制代码
展示代码如下:

  1. <!--{loop $_SBLOCK['test'] $value}-->
  2. <!--{eval $c_name=unserialize($value[c_customfieldtext]);}-->
  3. <!--{eval $custext=unserialize($value[customfieldtext]);}-->
  4. <!--{if !empty($custext[0])}-->
  5. <br>
  6. <!--{eval $i=0;}-->
  7. <!--{loop $custext $cvalue}-->
  8. <!--{echo $c_name[$i][name]}-->:<!--{echo $cvalue}-->
  9. <!--{eval $i=$i+1;}-->
  10. <!--{/loop}-->
  11. <!--{/if}-->
  12. <!--{/loop}-->
复制代码
此展示代码对应的是本机的变量,如果用,要做修改,并添加CSS。
注:customfieldtext字段中是存储发布的资讯自定义字段内容,c_customfieldtext 是自定义字段的可选信息,如名称等。


第三种方法是经使用模块的向导模式,注意,在参数中一定要有showdetail/1/参数,否则无没调用出数据。
  1. <!--{block name="spacenews" parameter="type/news/catid/1/limit/0,10/cachetime/900/showdetail/1/cachename/test/tpl/data"}--><!--news-->
复制代码
此种方法的展示代码与上面类似,但需要自己灵活运用。

在写展示代码前推荐看一下下面的帖子,以熟悉如何调试与写展示代码。
写数据调用的展示代码前应知道的一些知识:https://discuz.dismall.com/thread-1408121-1-1.html
如何写展示代码:https://discuz.dismall.com/thread-1409174-1-1.html
abcnic18 发表于 2009-11-19 14:30:44 | 显示全部楼层
学习!!!
回复

使用道具 举报

278437652 发表于 2010-5-23 14:27:00 | 显示全部楼层
顶了
回复

使用道具 举报

wuhx1999 发表于 2010-12-17 09:28:05 | 显示全部楼层
要学一下,收藏了
回复

使用道具 举报

fdrezujytf10 发表于 2010-12-28 11:06:27 | 显示全部楼层
支持一下楼主!
             顶顶顶顶顶顶顶顶顶顶顶。。。。。。。。。!!!!!!!!!!!!!!!!!!!!











-----------------------------------------------------------------------------------------
Early to bed, early to rise, make a man healthy, wealthy, and wise. ugg cardy  ugg Tall  ugg short  ugg Mini  UGG Bailey Button Triplet
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-15 01:23 , Processed in 0.024330 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表