Skip to main content

⭐ Blog-Teaser

Der Blog-Teaser zeigt einen kurzen Vorspann mit Bildern aus der Resource oder der Bildergalerie und soll neugierig machen sowie zum vollständigen Beitrag führen.

Blog-Teaser.jpg

Besispiel:

Chunk modxBlog

[[!pdoPage:default=`Keine Startseite Nachricht vorhanden`?
    &context=`web`
    &element=`pdoResources`
    &parents=`0`
    &depth=`1`
    &limit=`20`
    &tpl=`modxBlogTpl`
    &tplWrapper=`modxBlogWrapper`
    &pageLimit=`20`
    &includeContent=`1`
    &includeTVs=`tvUserInfo,tvStartseite,tvStartseiteBild,tvGalleryPfad,tvStartdatum`
    &processTVs=`1`
    &tvPrefix=``
    &showUnpublished=`0`
    &showHidden=`0`
    &sortby=`publishedon`
    &sortdir=`desc`
    &tvFilters=`tvStartseite==ja`
]]

Chunk modxBlogTpl

  • zuerst Galeriebild, sonst Bild aus Content (inkl. eigener Spalte aus dem Bild-Snippet)
  • [col-md-3] → ergibt die Bildspalte aus dem Bild-Snippet (typisch col-md-3)
  • [col-md-9] → Text (Titel, Intro, Button, Datum, Autor)
[[- in CSS hinzufügen:
/* Blogkarten: wenn nur eine Spalte vorhanden ist (kein Bild),
   soll die Textspalte die volle Breite nutzen */
.modx-blog-card .row.g-0 > .col-md-9:only-child {
    flex: 0 0 100%;
    max-width: 100%;
}
]]

<div class="col">
    <article class="card h-100 mb-4 modx-blog-card">
        <div class="row g-0">

            <!-- linke Spalte: zuerst Galeriebild, sonst Bild aus Content -->
            [[+tvGalleryPfad:notempty=`
                [[!bs5GalleryTeaserImg?
                    &dir=`assets/modx/content/redaktion/[[+tvGalleryPfad]]`
                    &index=`[[+tvStartseiteBild]]`
                    &id=`[[+id]]`
                    &alt=`[[+pagetitle]]`
                    &options=`h=300`
                ]]
            `:empty=`
                [[!getStartseiteBild?
                    &index=`[[+tvStartseiteBild]]`
                    &id=`[[+id]]`
                    &alt=`[[+pagetitle]]`
                    &options=`h=300`
                ]]
            `]]

            <!-- rechte Spalte: Textinhalt -->
            <div class="col-md-9">
                <div class="card-body">

                    <!-- Titelzeile: Parent-Titel + Ressourcentitel -->
                    <h2 class="h5 card-title mb-2">
                        <a href="[[~[[+parent]]]]" class="text-decoration-none">
                            [[#[[+parent]].pagetitle]]
                        </a>: [[+pagetitle]]
                    </h2>

                    <!-- Intro-Text aus Content -->
                    <p class="card-text mb-3">
                        [[+content:notags:limitWholeWords=`240`]]...
                    </p>

                    <!-- Footer: "alles lesen" + Icons + Datum + Autor -->
                    <div class="d-flex justify-content-between align-items-center">
                        <a href="[[~[[+id]]]]" class="btn btn-sm btn-primary">
                            alles lesen
                        </a>

                         [[+tvUserInfo:is=`ja`:then=`
                        <div class="text-muted small d-flex align-items-center">
                            <button type="button" class="btn btn-link p-0 me-1">
                                <i class="bi bi-calendar"></i>
                            </button>
                            <button type="button" class="btn btn-link p-0 me-2">
                                <i class="bi bi-person"></i>
                            </button>
                            <span>
                                Autor
                                [[+publishedon:gt=`0`:then=`[[+publishedon:date=`%Y-%m-%d`]]`:else=`[[+createdon:date=`%Y-%m-%d`]]`]]
                                [[+createdby:userinfo=`username`]]
                            </span>
                        </div>
                        `:else=``]]

                    </div>

                    [[!modxCountdownRow?
                        &date=`[[+tvStartdatum]]`
                        &minYear=`2025`
                        &align=`right`
                    ]]

                </div>
            </div>

        </div>
    </article>
</div>

Chunk modxBlogWrapper

<div class="row row-cols-1 row-cols-md-2 g-4">
    [[+output]]
</div>