コンテンツにスキップ

Headless CMS

Winkのウェブコンポーネントはフレームワークに依存しないカスタムHTML要素です。Next.js、Nuxt、Astro、SvelteKit、その他のフレームワークを通じてHTMLをレンダリングするヘッドレスCMSであれば、特別な統合なしにWinkコンポーネントを埋め込むことができます。

すべてのWink統合は、プラットフォームに関わらず同じ3つのステップに従います。

ドキュメントの<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. アプリケーションローダーを追加”

ページごとに1回だけ、本文内の任意の場所(通常はグローバルレイアウトのフッター)に配置します:

<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>

コンテンツ内へのコンポーネント配置

Section titled “コンテンツ内へのコンポーネント配置”

CMSのリッチテキストやカスタムフィールドタイプで、HTML出力に直接コンポーネントタグを埋め込みます:

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

Contentful、Strapi、Sanityなどのヘッドレスプラットフォームでは、リッチテキストフィールドやカスタムブロックで生のHTMLをレンダリングできるものを使い、そこにコンポーネントタグを貼り付けてください。

TypeScriptプロジェクト向けに、@wink/elementsパッケージは以下を提供します:

  • CDNスクリプトをプログラム的に注入するload()関数
  • すべてのコンポーネント属性の完全な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をご覧ください。