Smarty显示最后4篇文章

时间:2018-08-01 08:27:19

标签: php smarty

我使用SMARTY,当我想显示最后4篇文章时,它显示的是4篇文章,而不是最后一篇(倒数第二篇)。当我再添加一篇文章时,它会向我显示最后一篇(但现在不是最后一篇:D)

这是我从数据库中获取数据的SQL代码的结尾:

FROM cms_article AS a 
JOIN cms_detail_of_page AS d ON d.idOfDetailOfPage = a.idOfDetailOfPage 
JOIN cms_page AS p ON p.idOfPage = d.idOfPage
WHERE a.idOfLanguage = '" . $this->language . "' AND isArticleVisible = 1
ORDER BY publicationDateOfArticle DESC, timestampOfArticle DESC 
LIMIT 5"

这是我的PHP Smarty代码:

<div class="items">
{foreach $recentArticles as $article name=a}
    {if !$smarty.foreach.a.first}
    <div class="col50">
        <div class="item">
            <a href="/{$language}/{$article.url}/"> <img src="uploads/photogallery/preserve.php?filename={$article.image}" alt="{$article.headline}" style="width:560px; height:300px;">
                <span class="date">{$article.timestamp|date_format:"%d/%m/%Y"}</span>
                <span class="box">
                    <span class="category">{$article.parent}</span>
                    <h3>{$article.headline}</h3>
                    <p>{$article.preview|truncate:100}</p>
                </span>
            </a>
        </div>
    </div>
    {/if}
{/foreach}
    <div class="clear"></div>
</div>

我认为这是一个问题:

 {if !$smarty.foreach.a.first}

但是当我删除!时,它仅显示我的最后一篇文章(而不是最后4篇文章)。

2 个答案:

答案 0 :(得分:3)

您正在从数据库中获取5篇文章,并且IF语句会跳过第一个结果。将查询更改为LIMIT 4或更改foreach

{foreach $recentArticles as $article name=a}
    {if $smarty.foreach.a.iteration < 5}
        <div class="col50">
            <div class="item">
                <a href="/{$language}/{$article.url}/"> <img src="uploads/photogallery/preserve.php?filename={$article.image}" alt="{$article.headline}" style="width:560px; height:300px;">
                    <span class="date">{$article.timestamp|date_format:"%d/%m/%Y"}</span>
                    <span class="box">
                        <span class="category">{$article.parent}</span>
                        <h3>{$article.headline}</h3>
                        <p>{$article.preview|truncate:100}</p>
                    </span>
                </a>
            </div>
        </div>
    {/if}
{/foreach}

答案 1 :(得分:0)

您的文章以相反的顺序排列,因此第一个实际上是最后一个。 {if !$smarty.foreach.a.first}的意思是“如果是第一个,则不要显示” 只需将其删除,然后{/if}