> ## Documentation Index
> Fetch the complete documentation index at: https://docs.topsort.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Banners.js

> Erfahren Sie, wie Sie Topsort mit Banners.js integrieren

export const IntegrationsCard1ADe = () => {
  return <>
      <style>{`
        .integrations-card-1a-de {
          display: flex;
          flex-direction: column;
          background-color: #f0f2f4;
          border: 1px solid rgba(0, 0, 0, 0.08);
          border-radius: 12px;
          padding: 1.25rem 1.5rem;
          gap: 0.25rem;
          color: #25253b;
          box-shadow: 0 1px 3px rgba(0, 0, 0, 0.02);
          transition: box-shadow 0.2s ease, border-color 0.2s ease, transform 0.2s ease;
          margin-top: 2rem;
        }

        .integrations-card-1a-de:hover {
          box-shadow: 0 4px 12px rgba(0, 0, 0, 0.06);
          border-color: rgba(0, 0, 0, 0.12);
        }

        .dark .integrations-card-1a-de {
          background-color: #25253b;
          color: #f6f8fa;
          border-color: rgba(255, 255, 255, 0.08);
          box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
        }

        .dark .integrations-card-1a-de:hover {
          box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
          border-color: rgba(255, 255, 255, 0.12);
        }

        .integrations-card-1a-de-avatar-row {
          display: flex;
          margin-left: 14px;
          flex-wrap: wrap;
        }

        .integrations-card-1a-de-avatar {
          width: 44px;
          height: 44px;
          border-radius: 50%;
          border: 2px solid #f0f2f4;
          margin-left: -14px;
          object-fit: cover;
          box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
          pointer-events: none;
          cursor: default;
        }

        .dark .integrations-card-1a-de-avatar {
          border-color: #25253b;
          box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
        }

        .integrations-card-1a-de h2 {
          margin: 0;
          line-height: 1.25;
          font-size: clamp(1.25rem, calc(0.875rem + 1.25vw), 1.75rem);
          font-weight: 700;
          letter-spacing: -0.025em;
          color: #111827;
        }

        .dark .integrations-card-1a-de h2 {
          color: #f9fafb;
        }

        .integrations-card-1a-de-subtitle {
          font-size: 0.9375rem;
          font-weight: 500;
          line-height: 1.5;
          color: #4b5563;
          margin: 0;
        }

        .dark .integrations-card-1a-de-subtitle {
          color: #d1d5db;
        }

        .integrations-card-1a-de p {
          margin: 0;
          line-height: 1.5;
          font-size: 0.875rem;
          color: #374151;
        }

        .dark .integrations-card-1a-de p {
          color: #d1d5db;
        }

        .integrations-card-1a-de a {
          color: #0500ff;
          text-decoration: none;
          font-weight: 500;
          transition: color 0.15s ease;
        }

        .integrations-card-1a-de a:hover {
          color: #0400cc;
        }

        .dark .integrations-card-1a-de a {
          color: #8280ff;
        }

        .dark .integrations-card-1a-de a:hover {
          color: #a19fff;
        }

        @media (max-width: 640px) {
          .integrations-card-1a-de-avatar {
            width: 38px;
            height: 38px;
            margin-left: -12px;
          }

          .integrations-card-1a-de-avatar-row {
            margin-left: 12px;
          }
        }

        @media (min-width: 1280px) {
          .integrations-card-1a-de p {
            font-size: 0.6875rem;
            line-height: 1.4;
            letter-spacing: -0.01em;
          }

          .integrations-card-1a-de h2 {
            font-size: clamp(1rem, calc(0.75rem + 1vw), 1.25rem);
          }

          .integrations-card-1a-de-subtitle {
            font-size: 0.75rem;
          }
        }
      `}</style>
      <div className="integrations-card-1a-de">
        <div className="integrations-card-1a-de-avatar-row">
          <img src="/images/integration-team/agustin.webp" alt="Agustin - Integrations Team Member" loading="lazy" className="integrations-card-1a-de-avatar" />
          <img src="/images/integration-team/amelia.webp" alt="Amelia - Integrations Team Member" loading="lazy" className="integrations-card-1a-de-avatar" />
          <img src="/images/integration-team/bernardita.webp" alt="Bernardita - Integrations Team Member" loading="lazy" className="integrations-card-1a-de-avatar" />
          <img src="/images/integration-team/borumy.webp" alt="Borumy - Integrations Team Member" loading="lazy" className="integrations-card-1a-de-avatar" />
          <img src="/images/integration-team/felipe.webp" alt="Felipe - Integrations Team Member" loading="lazy" className="integrations-card-1a-de-avatar" />
          <img src="/images/integration-team/gui.webp" alt="Gui - Integrations Team Member" loading="lazy" className="integrations-card-1a-de-avatar" />
          <img src="/images/integration-team/javiera.webp" alt="Javiera - Integrations Team Member" loading="lazy" className="integrations-card-1a-de-avatar" />
          <img src="/images/integration-team/linn.webp" alt="Linn - Integrations Team Member" loading="lazy" className="integrations-card-1a-de-avatar" />
          <img src="/images/integration-team/marcio.webp" alt="Marcio - Integrations Team Member" loading="lazy" className="integrations-card-1a-de-avatar" />
          <img src="/images/integration-team/mateus.webp" alt="Mateus - Integrations Team Member" loading="lazy" className="integrations-card-1a-de-avatar" />
          <img src="/images/integration-team/max.webp" alt="Max - Integrations Team Member" loading="lazy" className="integrations-card-1a-de-avatar" />
          <img src="/images/integration-team/rodrigo.webp" alt="Rodrigo - Integrations Team Member" loading="lazy" className="integrations-card-1a-de-avatar" />
        </div>

        <h2>Brauchen Sie Hilfe bei Ihrer Topsort-Integration?</h2>

        <p className="integrations-card-1a-de-subtitle">
          Sprechen Sie mit uns, dem Integrations-Engineering-Team.
        </p>

        <p>
          Erreichen Sie uns über <strong>Ihren dedizierten Nachrichtenkanal</strong> oder unter{" "}
          <a href="mailto:support@topsort.com">support@topsort.com</a>.
        </p>

        <p>
          Falls Sie noch kein Kunde sind,{" "}
          <a href="https://www.topsort.com/book-a-demo">buchen Sie eine Demo</a> mit unserem
          Vertriebsteam.
        </p>
      </div>
    </>;
};

Die [öffentliche banner.js-Bibliothek von Topsort](https://github.com/Topsort/banners.js/) ermöglicht es Marktplätzen, Werbebanner durch eine Low-Code-Integration anzuzeigen. Mit einem einfachen HTML-Tag kann sich der Marktplatz mit dem Werbeserver von Topsort verbinden und Banner aus aktiven Kampagnen ohne komplexe Integrationen anzeigen.

## Installation

Sie können die Bibliothek mit npm oder yarn installieren oder das SDK direkt in Ihre HTML-Datei laden, indem Sie ein `<script>`-Tag einfügen:

```html theme={null}
<script
  async
  type="module"
  src="https://unpkg.com/@topsort/banners@latest/dist/banners.mjs"
></script>
<script>
  // Globale Konfiguration für Topsort
  window.TS = {
    token: "TSE_XXXXXXXXXXXX", // Ersetzen Sie dies durch Ihren Topsort API-Schlüssel
  };
</script>
```

## Verwendung

Dieses Beispiel zeigt die minimal erforderliche Konfiguration. Die Integration funktioniert mit Standard-HTML und Javascript und ist daher mit den meisten Frontend-Stacks kompatibel.

Um es zu testen, müssen Sie einfach Ihren Marketplace-API-Schlüssel und die Banner-Slot-ID hinzufügen, die in der Kampagne konfiguriert ist.

```html theme={null}
<script
  async
  type="module"
  src="https://unpkg.com/@topsort/banners@latest/dist/banners.mjs"
></script>
<script
  async
  type="module"
  src="https://unpkg.com/@topsort/analytics.js/dist/ts.js"
></script>
<script>
  // API-Schlüssel für Auktionen und Ereignisse festlegen
  window.TS = {
    token: "TSE_XXXXXXXXXXXX",
  };
  // Benutzerdefiniertes Verhalten kann für jede Website konfiguriert werden.
  window.TS_BANNERS = {
    // Ziel-Link verwalten
    getLink(banner) {
      return `https://example.com/${banner.id}`;
    },
    // Ladezustand verwalten
    getLoadingElement() {
      const el = document.createElement("div");
      el.innerText = "Wird geladen...";
      return el;
    },
    // Fehler verwalten
    getErrorElement() {
      const el = document.createElement("div");
      el.innerText = "Fehler beim Laden des Banners";
      return el;
    },
  };
</script>
<body>
  <topsort-banner width="600" height="400" id="<Ihre Slot-ID>"></topsort-banner>
</body>
```

## Banner-Attribute

Hier sind die verfügbaren Attribute für die Komponente `<topsort-banner>`. Sie dienen als Eingabe für die Auktionsanfrage, um die richtigen Gewinner für diesen Kontext abzurufen.

| Name                    | Typ    | Beschreibung                                                |
| ----------------------- | ------ | ----------------------------------------------------------- |
| width                   | number | Breite des Banners                                          |
| height                  | number | Höhe des Banners                                            |
| id                      | string | Die Slot-ID für dieses Banner, in der Kampagne konfiguriert |
| Category-id (optional)  | string | Kontextkategorie für das Targeting                          |
| Search-query (optional) | string | Kontext-Schlüsselwort für das Targeting                     |

## Banner-Verhalten

Hier sind die verfügbaren Attribute für die Komponente `<topsort-banner>`. Sie dienen als Eingabe für die Auktionsanfrage, um die richtigen Gewinner für diesen Kontext abzurufen.

| Name              | Typ         | Beschreibung                                                                        |
| ----------------- | ----------- | ----------------------------------------------------------------------------------- |
| getLink(banner)   | string      | Ziel-URL des Banners, in der Kampagne konfiguriert.                                 |
| getLoadingElement | HTMLElement | Ein benutzerdefiniertes Element, das während des Ladens des Banners angezeigt wird. |
| getErrorElement   | HTMLElement | Ein benutzerdefiniertes Element, das angezeigt wird, wenn ein Fehler auftritt.      |

## Banner-Schnittstelle

Die Banner-Schnittstelle ist die Struktur eines Banner-Objekts. Jedes Banner enthält Metadaten über die Kampagne und die resolvedBidId, den Parameter, der zum Verfolgen von Benutzerinteraktionen (Klicks und Impressionen) erforderlich ist.

| Name          | Typ                                       | Beschreibung                                                                                                                                    |
| ------------- | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| type          | "product" \| "vendor" \| "brand" \| "url" | Der Typ der gewinnenden Entität, dargestellt durch das Banner, in der Kampagne konfiguriert.                                                    |
| id            | string                                    | Die ID der gewinnenden Entität. Wenn die Entität vom Typ URL ist, ist dies die URL.                                                             |
| resolvedBidId | string                                    | Die entsprechende Gebots-ID der gewinnenden Entität, erforderlich zum Verfolgen der Benutzerinteraktion (Klicks, Impressionen) mit der Anzeige. |
| asset         | \[\{ url: string }]                       | Ein Array von URLs, die auf die Banner-Ressourcen verweisen.                                                                                    |

<IntegrationsCard1ADe />
