Headless CMS
Wink уеб компонентите са framework-агностични персонализирани HTML елементи. Ако вашият headless CMS рендерира HTML — независимо дали чрез Next.js, Nuxt, Astro, SvelteKit или друг framework — можете да вградите Wink компоненти без специална интеграция.
Трите стъпки за вграждане
Section titled “Трите стъпки за вграждане”Всяка интеграция на Wink, независимо от платформата, следва същите три стъпки.
1. Включете стиловия файл
Section titled “1. Включете стиловия файл”Добавете това в <head> на документа (или еквивалентния глобален layout):
<link rel="stylesheet" href="https://elements.wink.travel/styles.css">2. Включете JavaScript
Section titled “2. Включете JavaScript”Добавете това преди затварящия </body> таг (или в скрипт секцията на вашия layout):
<script src="https://elements.wink.travel/elements.js" type="module" defer></script>3. Добавете application loader
Section titled “3. Добавете application loader”Поставете това веднъж на страница, навсякъде в body (обикновено в глобалния footer на layout-а):
<wink-app-loader client-id="YOUR_CLIENT_ID"></wink-app-loader>Примери за framework-и
Section titled “Примери за framework-и”Next.js (App Router)
Section titled “Next.js (App Router)”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> );}Nuxt 3
Section titled “Nuxt 3”<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><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>SvelteKit
Section titled “SvelteKit”<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 “Поставяне на компоненти в съдържание”В rich text или персонализирани полета на вашия CMS, вградете тагове на компоненти директно в HTML изхода:
<wink-content-loader layout="HOTEL" id="YOUR_LAYOUT_ID"></wink-content-loader>За Contentful, Strapi, Sanity или подобни headless платформи, използвайте поле Rich Text или Custom Block, което рендерира raw HTML, и поставете там таговете на компонентите.
npm пакет
Section titled “npm пакет”За TypeScript проекти, пакетът @wink/elements предоставя:
- Функция
load(), която инжектира CDN скриптовете програмно - Пълни декларации за типове на всички атрибути на компонентите
npm install @wink/elementsimport { load } from '@wink/elements';
// Извиква се веднъж при стартиране на приложениетоload({ clientId: 'YOUR_CLIENT_ID' });Налични компоненти
Section titled “Налични компоненти”| Компонент | 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 за пълния справочник на атрибутите.