资讯自定义信息是经过序列化函数写进数据库中的。
自定义字段的信息 是在表supe_customfields中的,它里面记录了自定义字段的名称、类型、数据长度等信息。
用户投稿在自定义字段所填的信息是在表 supe_spacenews 的字段 customfieldtext 中的。
把自定义字段的名称与内容同时查出来要 supe_spacenews 与 supe_customfields 联查,但在查资讯时建议查三张表,因为supe_spaceitems表是资讯的主表。- 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这个变量里面了,在显示资讯内容的模板里面会看到这样的代码:- <!--{if !empty($news[custom][name])}-->
- <div id="article_summary">
- <!--{loop $news[custom][key] $ckey $cvalue}-->
- <h6>$news[custom][name]</h6>
- <p>$cvalue[name]news[custom][value][$ckey]</p>
- <!--{/loop}-->
- </div>
- <!--{/if}-->
复制代码 这一段代码就是将$news里面关于资讯自定义字段的内容取出来,并显示在页面上。
注:此种方法不用进行数据的反序列化,因为数据已经被处理过了。
第二种方式是用SQL语句的来查询数据,即模块的高级模式。
SQL原型如下:- 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三表联查来取得数据,然后在模块功能里面用高级模式产生调用代码,如下:- <!--{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-->
复制代码 展示代码如下:
- <!--{loop $_SBLOCK['test'] $value}-->
- <!--{eval $c_name=unserialize($value[c_customfieldtext]);}-->
- <!--{eval $custext=unserialize($value[customfieldtext]);}-->
- <!--{if !empty($custext[0])}-->
- <br>
- <!--{eval $i=0;}-->
- <!--{loop $custext $cvalue}-->
- <!--{echo $c_name[$i][name]}-->:<!--{echo $cvalue}-->
- <!--{eval $i=$i+1;}-->
- <!--{/loop}-->
- <!--{/if}-->
- <!--{/loop}-->
复制代码 此展示代码对应的是本机的变量,如果用,要做修改,并添加CSS。
注:customfieldtext字段中是存储发布的资讯自定义字段内容,c_customfieldtext 是自定义字段的可选信息,如名称等。
第三种方法是经使用模块的向导模式,注意,在参数中一定要有showdetail/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 |