discuz 门户文章列表多图显示

摘要: 之前写过一个首页调用帖子多图,大家反映说希望文章列表页也可以多图显示,刚测试了下也可以,方法也比较简单。思路,在文章列表页模板里内根据默认代码就可以获取到列表内每篇文章的aid,我们只需要根据这个aid来获 ...
之前写过一个首页调用帖子多图,大家反映说希望文章列表页也可以多图显示,刚测试了下也可以,方法也比较简单。

思路,在文章列表页模板里内根据默认代码就可以获取到列表内每篇文章的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张图。

上面只是简单的调用多图,下面加点东西。

在门户列表页模板里查找

<!--{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]

相关阅读