之前写过一个首页调用帖子多图,大家反映说希望文章列表页也可以多图显示,刚测试了下也可以,方法也比较简单。
思路,在文章列表页模板里内根据默认代码就可以获取到列表内每篇文章的aid,我们只需要根据这个aid来获取下每篇文章内图片的路径就行了。
开始操作:
1.添加数据查询语句,以默认文章列表模板template/default/portal/list.htm为例,找到
- <!--{loop $list['list'] $value}-->
复制代码 在其下加入
- <!--{eval $list_pics = DB::fetch_all("SELECT attachment FROM ".DB::table('portal_attachment')." WHERE `aid`= '$value[aid]' AND `isimage`=1");}-->
复制代码
2.loop图片,在往下找到原来调用图片代码
- <!--{if $value[pic]}--><div class="atc"><a href="$article_url" target="_blank"><img src="$value[pic]" alt="$value[title]" class="tn" /></a></div><!--{/if}-->
复制代码
替换成
- <!--{if $value[pic]}-->
- <!--{loop $list_pics $list_pic}-->
- <div class="atc"><a href="$article_url" target="_blank"><img src="data/attachment/portal/$list_pic[attachment]" alt="$value[title]" class="tn"/></a></div>
- <!--{/loop}-->
- <!--{/if}-->
复制代码
这样就可以了。
效果:
附加:
如果想要限制图片数量,查询语句里加个limit即可:
- <!--{eval $list_pics = DB::fetch_all("SELECT attachment FROM ".DB::table('portal_attachment')." WHERE `aid`= '$value[aid]' AND `isimage`=1 LIMIT 0,2");}-->
复制代码
LIMIT 0,2即调用2张图。
如果更复杂一点,比如不同数量不同样式,可参考之前的首页调用帖子多图里的方式做判断。
OK。
------------------------------------------------
上面只是简单的调用多图,下面加点东西。
发现有人拿我这垃圾代码去别的网站求助,多图不同样式怎么做。。。我想说的是,这个调用代码是我写的,直接问我不就好了?
开始:
这次图省事儿,直接拿我自己的站点改造的,样式可能不适合你,CSS就不贴了,我会做代码说明,认真看完自己想做什么样式随意。
在门户列表页模板里查找
- <!--{loop $list['list'] $value}-->
复制代码
在下面添加
- <!--{eval $picnums = DB::result(DB::query("SELECT count(attachid) FROM ".DB::table('portal_attachment')." WHERE `aid`= '$value[aid]' AND `isimage` = 1"));}-->
- <!--{if $picnums < 3}-->
- <!--{eval $apicnum = 1}-->
- <!--{elseif $picnums > 2 && $picnums < 6}-->
- <!--{eval $apicnum = 3}-->
- <!--{elseif $picnums > 6}-->
- <!--{eval $apicnum = 6}-->
- <!--{/if}-->
- <!--{eval $list_pics = DB::fetch_all("SELECT attachment FROM ".DB::table('portal_attachment')." WHERE `aid`= '$value[aid]' AND `isimage`=1 ORDER BY `dateline` ASC LIMIT $apicnum");}-->
复制代码
这个是查询附件数量并判断,
$picnums是文章所有图片数量。$apicnum是判断后的图片数量。
根据$picnums做数量判断,取部分图片,结果就是$apicnum。
----如果图片小于3张则取1张,如果大于2张小于6张则取3张,如果大于6张则取6张。
下面开始根据图片数量显示不同样式,我只做了两种样式,1张和多张。
- <!--{if $picnums && $apicnum == 1}-->
- <div class="post_left">
- <!--{loop $list_pics $list_pic}-->
- <a href="$article_url" target="_blank"><img src="http://file.cmsbj.cn/cmsbj_file/portal/$list_pic[attachment]" alt="$value[title]" class="tn"/></a>
- <!--{/loop}-->
- </div>
- <div class="post_right" <!--{if !$value[pic]}-->style="width:100%;"<!--{/if}-->>
- <h1 class="post_title"><a href="$article_url" target="_blank" title="$value[title]" $highlight>$value[title]<!--{if $value[pic]}--><span class="pipe"></span>({$picnums}图)<!--{/if}--></a><!--{if $value[status] == 1}-->({lang moderate_need})<!--{/if}--></h1>
- <div class="post_property">
- <div class="post_author"><a href="space-uid-1.html" target="_blank" title="admin">admin</a></div>
- <div class="post_spliter">.</div>
- <div class="post_date">$value[dateline]</div>
- <div class="clear"></div>
- </div>
- <p class="post_brief">$value[summary]</p>
- <div class="post_meta">
- <div class="post_tag">
- <!--{if $_G['group']['allowmanagearticle'] || ($_G['group']['allowpostarticle'] && $value['uid'] == $_G['uid'] && (empty($_G['group']['allowpostarticlemod']) || $_G['group']['allowpostarticlemod'] && $value['status'] == 1)) || $categoryperm[$value['catid']]['allowmanage']}-->
- <p><span class="xg1">
- <label><a href="portal.php?mod=portalcp&ac=article&op=edit&aid=$value[aid]">{lang edit}</a></label>
- <span class="pipe">|</span>
- <label><a href="portal.php?mod=portalcp&ac=article&op=delete&aid=$value[aid]" id="article_delete_$value[aid]" onclick="showWindow(this.id, this.href, 'get', 0);">{lang delete}</a></label>
- </span>
- </p>
- <!--{/if}-->
- </div>
- </div>
- </div>
- <!--{else}-->
- <div class="post_right" <!--{if !$value[pic] || $apicnum > 1}-->style="width:100%;"<!--{/if}-->>
- <h1 class="post_title"><a href="$article_url" target="_blank" title="$value[title]" $highlight>$value[title]<!--{if $value[pic]}--><span class="pipe"></span>({$picnums}图)<!--{/if}--></a><!--{if $value[status] == 1}-->({lang moderate_need})<!--{/if}--></h1>
- <div class="post_property">
- <div class="post_author"><a href="space-uid-1.html" target="_blank" title="admin">admin</a></div>
- <div class="post_spliter">.</div>
- <div class="post_date">$value[dateline]</div>
- <div class="clear"></div>
- </div>
- <p class="post_brief">$value[summary]</p>
- <div class="post_left" style="width:auto;height:auto;float:none;margin:0;"><!--{loop $list_pics $list_pic}--><a href="$article_url" target="_blank" style="float:left;"><img src="http://file.cmsbj.cn/cmsbj_file/portal/$list_pic[attachment]" alt="$value[title]" class="tn" width="250px;"/></a><!--{/loop}--></div>
- <div class="post_meta">
- <div class="post_tag">
- <!--{if $_G['group']['allowmanagearticle'] || ($_G['group']['allowpostarticle'] && $value['uid'] == $_G['uid'] && (empty($_G['group']['allowpostarticlemod']) || $_G['group']['allowpostarticlemod'] && $value['status'] == 1)) || $categoryperm[$value['catid']]['allowmanage']}-->
- <p><span class="xg1">
- <label><a href="portal.php?mod=portalcp&ac=article&op=edit&aid=$value[aid]">{lang edit}</a></label>
- <span class="pipe">|</span>
- <label><a href="portal.php?mod=portalcp&ac=article&op=delete&aid=$value[aid]" id="article_delete_$value[aid]" onclick="showWindow(this.id, this.href, 'get', 0);">{lang delete}</a></label>
- </span>
- </p>
- <!--{/if}-->
- </div>
- </div>
- </div>
- <!--{/if}-->
复制代码
根据判断后图片数量$apicnum来显示不同的样式布局,如:
{if $apicnum == 数量}loop图片、文章标题、摘要……{/if}
我的就1和多的区别,分div先后来区分图片的位置:
{if $apicnum == 1}
loop图片、文章标题、摘要
{else}
文章标题、摘要、loop图片
{/if}
注意下,我的图片附件地址是远程附件file.cmsbj.cn/cmsbj_file/portal/$list_pic[attachment],本地附件的换成data/attachment/portal/$list_pic[attachment]
相关阅读:
discuz 门户首页调用帖子列表带分页+多图显示(之一)
discuz 门户首页调用帖子列表带分页+多图显示(之二) |