帖子列表页面中获取帖子对应的标签(tags)的方法。 思路分析: 一般情况直接循环帖子数组即可根据posttableid直接从forum_post中查询tags字段的值即可,不过这样是在循环中进行查询,也就是说列表中有多少帖子就要进行多少次查询。 另外,tag数据存储在common_tag和common_tagitem两个表中,可以可根据帖子id直接查询,这样我们先得到当前列表中所有的帖子id数组,再一次查询即可。 后来才想明白,其实获取到帖子ID数组后,就可以直接从forum_post表中直接查询tags字段的内容即可,因为该字段内容已经存储了tagid和tagname的值,只需要再稍作处理即可。 组件名称:版块 帖子标签(tags) 组件变量:forumdisplay_code_all_output@yz_tags 手机嵌入:否 组件类型:代码(code) 模板内容: // 首先提取当前列表中所有的帖子id(tid)到数组$arrtids foreach($_G['forum_threadlist'] as $tnum => $thread) { $arrtids[] = $thread['tid']; $arrtnum[$thread['tid']] = $tnum; //获取帖子在$_G['forum_threadlist']中所对应的键名,用于后面赋值 } // 根据$arrtids查询所需tag信息 以下方法是从tagitem和tag表联合查询的方法,下面还有更简洁的,所以这里暂留作为记录 //$arrtags = DB::fetch_all("SELECT t.tagname,i.* FROM %t i INNER JOIN %t t ON t.tagid=i.tagid WHERE i.idtype=%s and i.itemid IN (%n)", array('common_tagitem', 'common_tag', 'tid', $arrtids)); //foreach($arrtags as $tag) { // if ($tag['itemid'] && $tag['tagname']){ // // 赋值给对应的帖子数据 // $_G['forum_threadlist'][$arrtnum[$tag['itemid']]]['tags'][] = $tag; // } //} // 直接从forum_post表中获取tags并进行处理后赋值到帖子列表数组 $arrtags = DB::fetch_all("SELECT tid,tags FROM %t WHERE tid IN (%n) and tags != ''", array('forum_post', $arrtids)); foreach($arrtags as $tag) { $tagarray_all = explode("\t", $tag['tags']); foreach($tagarray_all as $var) { $tag = explode(',', $var); $posttag_array[] = $tag; $_G['forum_threadlist'][$arrtnum[$tag['tid']]]['tags'][$tag[0]] = $tag[1]; } } // print_r($_G['forum_threadlist']); 这里的值将是已赋予了tags信息的新数组,至于如何调用,就看你的了。 |
插件介绍:雨哲超强嵌入点 插件是一款平台插件,通过后台添加在前台显示(基于模板的hook位置)指定内容的功能。
GMT+8, 2024-5-20 18:52 , Processed in 0.095132 second(s), 10 queries , Xcache On.
Powered by Discuz! X3.2
© 2001-2013 Comsenz Inc.