Smarty 显示最后 4 篇文章
Smarty show last 4 articles
我使用 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 篇文章)。
你的文章是倒序排列的,所以第一篇实际上是最后一篇。
{if !$smarty.foreach.a.first}
表示 "do not show this if it is the first one"
只需删除它和 {/if}
您正在从数据库中提取 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}
我使用 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 篇文章)。
你的文章是倒序排列的,所以第一篇实际上是最后一篇。
{if !$smarty.foreach.a.first}
表示 "do not show this if it is the first one"
只需删除它和 {/if}
您正在从数据库中提取 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}