Перейти до вмісту

Headless CMS

Веб-компоненти Wink — це фреймворк-незалежні кастомні HTML-елементи. Якщо ваш headless CMS рендерить HTML — чи то через Next.js, Nuxt, Astro, SvelteKit або будь-який інший фреймворк — ви можете вбудовувати компоненти Wink без жодної спеціальної інтеграції.

Кожна інтеграція Wink, незалежно від платформи, проходить ті самі три кроки.

1. Додайте таблицю стилів

Section titled “1. Додайте таблицю стилів”

Додайте це у <head> вашого документа (або еквівалент глобального лейауту):

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

Додайте це перед закриваючим тегом </body> (або у секції скриптів вашого лейауту):

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

3. Додайте завантажувач додатку

Section titled “3. Додайте завантажувач додатку”

Розмістіть це один раз на сторінку, будь-де в тілі (зазвичай у футері глобального лейауту):

<wink-app-loader client-id="YOUR_CLIENT_ID"></wink-app-loader>

Приклади для фреймворків

Section titled “Приклади для фреймворків”
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>

Розміщення компонентів у контенті

Section titled “Розміщення компонентів у контенті”

У вашому CMS у полях з багатим текстом або кастомних типах полів вбудовуйте теги компонентів безпосередньо у HTML-вивід:

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

Для Contentful, Strapi, Sanity або подібних headless платформ використовуйте поле Rich Text або Custom Block, яке рендерить сирий HTML, і вставляйте там тег компонента.

Для TypeScript-проєктів пакет @wink/elements надає:

  • Функцію load(), яка програмно підключає CDN-скрипти
  • Повні декларації типів TypeScript для всіх атрибутів компонентів
Terminal window
npm install @wink/elements
import { load } from '@wink/elements';
// Виклик один раз при запуску додатку
load({ clientId: 'YOUR_CLIENT_ID' });
КомпонентHTML тегПризначення
Content loader<wink-content-loader>Відображення карток готелів, сіток, карт
Lookup<wink-lookup>Панель пошуку напрямків
Search button<wink-search-button>Відкрити вибір маршруту
Account button<wink-account-button>Вхід / меню користувача
Itinerary button<wink-itinerary-button>Показати поточний маршрут
Itinerary picker<wink-itinerary-picker>Повна форма маршруту
Shopping cart<wink-shopping-cart-button>Кнопка підсумку кошика

Дивіться Web Components для повного опису атрибутів.