Ga naar inhoud

Headless CMS

Wink webcomponenten zijn framework-onafhankelijke aangepaste HTML-elementen. Als je headless CMS HTML rendert — of dat nu via Next.js, Nuxt, Astro, SvelteKit of een ander framework is — kun je Wink-componenten insluiten zonder speciale integratie.

Elke Wink-integratie, ongeacht het platform, volgt dezelfde drie stappen.

Voeg dit toe aan de <head> van je document (of het equivalente globale layout):

<link rel="stylesheet" href="https://elements.wink.travel/styles.css">

Voeg dit toe vlak voor je sluitende </body>-tag (of in het scriptgedeelte van je layout):

<script src="https://elements.wink.travel/elements.js" type="module" defer></script>

Plaats dit één keer per pagina, ergens in de body (meestal in de footer van je globale layout):

<wink-app-loader client-id="YOUR_CLIENT_ID"></wink-app-loader>
app/layout.tsx
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<head>
<link rel="stylesheet" href="https://elements.wink.travel/styles.css" />
</head>
<body>
{children}
<script src="https://elements.wink.travel/elements.js" type="module" defer />
<wink-app-loader client-id="YOUR_CLIENT_ID" />
</body>
</html>
);
}
layouts/default.vue
<template>
<div>
<slot />
<wink-app-loader client-id="YOUR_CLIENT_ID" />
</div>
</template>
<script setup>
useHead({
link: [{ rel: 'stylesheet', href: 'https://elements.wink.travel/styles.css' }],
script: [{ src: 'https://elements.wink.travel/elements.js', type: 'module', defer: true }],
})
</script>
src/layouts/Layout.astro
<html lang="en">
<head>
<link rel="stylesheet" href="https://elements.wink.travel/styles.css" />
</head>
<body>
<slot />
<script src="https://elements.wink.travel/elements.js" type="module" is:inline></script>
<wink-app-loader client-id="YOUR_CLIENT_ID"></wink-app-loader>
</body>
</html>
src/routes/+layout.svelte
<svelte:head>
<link rel="stylesheet" href="https://elements.wink.travel/styles.css" />
</svelte:head>
<slot />
<wink-app-loader client-id="YOUR_CLIENT_ID" />
<script>
import { onMount } from 'svelte';
onMount(async () => {
await import('https://elements.wink.travel/elements.js');
});
</script>

In de rich text of aangepaste veldtypen van je CMS, embed je component-tags direct in de HTML-output:

<wink-content-loader
layout="HOTEL"
id="YOUR_LAYOUT_ID"
></wink-content-loader>

Voor Contentful, Strapi, Sanity of vergelijkbare headless platforms, gebruik een Rich Text-veld of een Custom Block dat ruwe HTML rendert, en plak daar de component-tag.

Voor TypeScript-projecten biedt het @wink/elements pakket:

  • Een load() functie die de CDN-scripts programmatisch injecteert
  • Volledige TypeScript type-declaraties voor alle componentattributen
Terminal window
npm install @wink/elements
import { load } from '@wink/elements';
// Eén keer aanroepen bij het opstarten van de app
load({ clientId: 'YOUR_CLIENT_ID' });
ComponentHTML-tagDoel
Content loader<wink-content-loader>Toon hotelkaarten, grids, kaarten
Lookup<wink-lookup>Zoekbalk voor bestemmingen
Search button<wink-search-button>Open de reisplanner
Account button<wink-account-button>Inloggen / gebruikersmenu
Itinerary button<wink-itinerary-button>Toon huidige reisplan
Itinerary picker<wink-itinerary-picker>Volledig reisplanningsformulier
Shopping cart<wink-shopping-cart-button>Winkelwagen overzichtknop

Zie Web Components voor de volledige attributenreferentie.