我有一个显示页面,在页面底部我有一个'相关'文章部分显示用户可以单击的4个相关文章。
问题是,我想要排除正在显示的相关文章中的当前文章。页面底部的文章部分,因此它不会出现两次。
我是否可以在Twig中使用条件隐藏我在“相关”中显示的当前文章。部分因此它不会在页面底部出现两次(一次是节目,另一次是在页面底部作为相关文章)?
展示页面示例
显示页面 - 第1条
等等......
...等等
等等...
相关:(页面底部有4篇文章)
第1条,第2条,第3条,第4条(我想在本节中隐藏第1条,因为它已经显示)
我正在使用的相关部分:
<h2>Related</h2>
<aside id="" class="">
<div class='featuredfour cf'>
{% for article in articles %}
{% if not article.id == showedArticleId %}
<div class="featuredfourpost">
<a href="{{ path('acme_demo_article_show', { slug: article.slug }) }}">
<img width="150" height="150" src="{{ asset(['images/', article.image]|join) }}" class="" alt="" />
<h3 class="title">{{ article.title }}</h3>
</a>
</div>
{% endif %}
{% endfor %}
</div>
</aside>
显示页面
{% extends "AcmeDemoBundle::layout.html.twig" %}
{% set showedArticleId = article.id %}
{% block body %}
[...]
<div class="entry-content">
{% autoescape false %}
<p>{{ include(template_from_string(article.body|raw|nl2br)) }}</p>
{% endautoescape %}
</div>
[...]
{# Related Articles section #}
{{ include('AcmeDemoBundle:Partial:_featured.html.twig', { articles: articles }) }}
{% endblock %}
相关邮件的原则
public function getRelatedArticles($limit)
{
return $this
->createQueryBuilder('article')
->setMaxResults($limit)
->orderBy('article.createdAt', 'DESC')
->getQuery()
->execute();
}
答案 0 :(得分:2)
您可以尝试使用您的Doctrine查询:
public function getRelatedArticles($exceptArticle, $limit)
{
return $this
->createQueryBuilder('article')
->where('article != :exceptArticle')
->setMaxResults($limit)
->orderBy('article.createdAt', 'DESC')
->setParameter('exceptArticle', $exceptArticle);
->getQuery()
->execute();
}
您只需将文章提供给查询以外的其他文章。
答案 1 :(得分:1)
在你的树枝内,在你展示文章的部分,添加(某处,没有代码,很难确切地说明在哪里)
[...]
{% set showedArticleId = article.id %}
[...]
然后用它来检查并跳过已经显示的一个
[...]
{% for article in articles %}
{% if article.id != showedArticleId %}
[...]
{% endif %}
{% endfor %}
[...]
我当然会对您的文章实体文件进行猜测:我非常确定id
会在那里