Symfony2 - 不包括展会页面上的当前帖子

时间:2014-07-16 06:38:24

标签: symfony twig

我有一个显示页面,在页面底部我有一个'相关'文章部分显示用户可以单击的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();
}

2 个答案:

答案 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会在那里