Zum Inhalt

Modul: Werbeeinblendung

Stand

Code-Analyse vom 2026-04-22 gegen sachpool.de, WebEdition 9.2.3, PHP 8.3.

Zweck

Dynamische Werbebanner-Einblendung auf fast allen Seiten im Login-Bereich — oben oder seitlich positioniert. Redakteure konfigurieren Banner als Objekte der Klasse werbung (classid 17, 51 Objekte Stand April 2026). Das Frontend rendert sie als Bootstrap-Carousel mit Auto-Rotation.

Template-Struktur

sachpool-portal/werbeeinblendung/
├── werbung-oben.tmpl              (196)  Carousel oberhalb des Contents
├── werbung-seitlich.tmpl          (197)  Carousel seitlich (Desktop fixed)
├── werbung-iteration.tmpl         (171)  Einzel-Werbungsobjekt rendern (listview)
├── werbung-iteration-multiobject.tmpl (292)  Gleiche Struktur für Block-Iteration
└── werbung-editor.tmpl            (195)  Backend-Input für Redakteure

Einbindung auf Seiten

Fast alle Login-Bereich-Templates binden ein:

<we:include type="template" id="196" once="true" />  <!-- oben -->
... Content ...
<we:include type="template" id="197" once="true" />  <!-- seitlich -->

Datenmodell: Werbung-Klasse (classid 17)

Pro Werbe-Objekt bis zu 10 Banner (hartkodiert, keine Schleife):

Feld Typ Rolle
werbebanner1werbebanner10 img Das Bild pro Slot
link1link10 link Standard-Link (WebEdition-intern)
speziallink1speziallink10 text Externer Link (überschreibt linkN), öffnet target=_blank

Ein Werbe-Objekt ist entweder ein Einzel-Banner oder eine Banner-Serie (bis 10). Mehrere Werbe-Objekte per Werbe-Slot möglich (über multiobject_WerbebannerObenMO).

Redakteur-Konfiguration

In jedem Content-Dokument / Objekt (werbung-editor.tmpl, 195)

Der Redakteur hat auf jedem Dokument zwei Sets an Schaltern:

Werbung oben: - werbung-oben (Checkbox) — Schalter - werbung-oben-size (Select): - 1 = 100 % Breite (responsive bis 1110 px) — Default - 2 = 541 × 137 px (Der Sachpool Format) - 3 = 970 × 90 px (Super Leaderboard) - 4 = 728 × 90 px (Leaderboard) - 5 = 468 × 60 px (Banner) - werbung-oben-links (Checkbox) — linksbündig statt zentriert - Auswahl der Werbe-Objekte (WerbebannerOben-Block → multiobject_WerbebannerObenMO)

Werbung seitlich: - werbung-seitlich, werbung-seitlich-size (1–4), werbung-seitlich-links - 1 = 100 % Breite (responsive bis 200 px) - 2 = 200 × 550 px (Der Sachpool Format) - 3 = 160 × 600 px (Wide Skyscraper) - 4 = 300 × 600 px (Ad Unit) - Banner-Auswahl via <we:collectionSelect name="Werbebanner-Seitlich">

Render-Pipeline

werbung-oben.tmpl (196)

  1. Lokale werbung-oben-Variable → globale Variable (damit Includes sie sehen)
  2. Block-Sammler: alle WerbebannerOben-Objekte aus dem Dokument in $GLOBALS['werbeIDs'] (kommasepariert)
  3. Fallback auf Multi-Object-Feld: falls WerbebannerObenMO gesetzt, überschreibt
  4. Carousel rendern:
    <we:listview classid="17" id="$werbeIDs" name="MultiObjectWerbeblockOben">
      <we:repeat>
        <we:include id="171" />   <!-- werbung-iteration.tmpl -->
      </we:repeat>
    </we:listview>
    
  5. Inline-CSS je nach werbung-oben-size (harte Pixel-Werte)
  6. Auto-Rotation: data-interval="6000" (6 Sekunden)

werbung-iteration.tmpl (171)

Rendert pro Objekt bis zu 10 Slideswerbebanner1..10 mit entsprechenden Links:

<we:ifNotFieldEmpty type="img" name="werbebanner1">
  <we:ifNotFieldEmpty name="speziallink1">
    <!-- speziallink hat Vorrang, target=_blank -->
    <we:field type="text" name="speziallink1" nameto="currentAdLink" to="global" />
    <we:setVar nameto="currentAdLinkTarget" to="global" value="_blank" />
  <we:else />
    <!-- sonst WebEdition-interner Link mit eigenem target -->
    <we:field type="link" name="link1" only="href" ... />
    <we:field type="link" name="link1" only="target" ... />
  </we:ifNotFieldEmpty>
  <div class="carousel-item <we:ifPosition ... first ...>active</we:ifPosition>">
    <a href="..." target="...">
      <we:field type="img" name="werbebanner1" class="d-block" />
    </a>
  </div>
</we:ifNotFieldEmpty>
<!-- ... 10x wiederholt für werbebanner2, 3, ..., 10 ... -->

werbung-iteration-multiobject.tmpl (292)

Identische Logik, aber mit <we:ifPosition type="block" name="werbeblock"> statt type="listview". Wird für alte Block-basierte Iteration genutzt (Legacy).

werbung-seitlich.tmpl (197)

Analog, aber: - Position fixed bei Desktop (> 1850 px), static darunter (responsive) - Responsive-Media-Query-Cut bei 1850 px - Left/Right je nach werbung-seitlich-links-Flag

Bekannte Altlasten

→ interne Datei HANDLUNGSEMPFEHLUNGEN.md im Repo-Root

  • 🟢 Maximal 10 Banner pro Objekt (Hardcode-Grenze)
  • 🟢 Mehrere auskommentierte Alt-Varianten (<we:block>-Pattern, <we:listview type="collectionitems">) in den Haupttemplates
  • 🟢 Inline-Styles mit Pixel-Werten — schwer responsive anzupassen
  • 🟢 Carousel-Controls mit opacity: 0.1 — fast unsichtbar (UX-Review)

Siehe auch