Mağaza Arayüzleri ve Tema Tasarımı
Tecof tema geliştirme akışı Next.js App Router, @tecof/theme-editor ve backend /api/store/* API katmanı üzerine kuruludur. Tema projesi backend'den sayfa JSON'unu alır, TecofRender ile render eder ve editör modunda TecofEditor ile aynı sayfayı düzenler.
Tema Runtime Akışı
sequenceDiagram
participant Theme as Next.js Theme
participant StoreAPI as /api/store
participant Backend as Tecof Backend
participant Editor as Tecof Editor
Theme->>StoreAPI: POST /render?themeId&locale
StoreAPI->>Backend: merchant + theme + slug çözümle
Backend-->>Theme: publishedData + CMS data
Theme->>Theme: TecofRender(data, config)
Editor->>StoreAPI: GET /editor/:pageId
Editor->>StoreAPI: PUT /editor/:pageIdTema tarafındaki temel dosyalar:
| Dosya | Görev |
|---|---|
lib/api/store.ts |
Sayfa, merchant info ve sayfa listesi fetch fonksiyonları |
lib/api/ecommerce.ts |
Ürün, sepet, checkout, müşteri hesabı ve push API helper'ları |
app/components.tsx |
Tema bileşen registry'si |
app/editor-config.tsx |
Editor config ve component map |
components/RenderClient.tsx |
TecofRender sarmalı |
components/global/TecofAnalyticsWrapper.tsx |
Analytics runtime script enjeksiyonu |
Zorunlu Ortam Değişkenleri
NEXT_PUBLIC_BASE_URL=https://api.tecof.com
NEXT_PUBLIC_MERCHANT_SECRET_KEY=merchant_secret_key
NEXT_PUBLIC_THEME_ID=merchant_theme_idNEXT_PUBLIC_MERCHANT_SECRET_KEY public bundle içinde yer alır. Bu nedenle canlı storefront için uygundur, fakat editör yazma işlemlerinde tek başına yeterli değildir; backend PUT /api/store/editor/:id için JWT/team doğrulaması da ister.
`@tecof/theme-editor` Kullanımı
Provider
import { TecofProvider } from "@tecof/theme-editor";
export function Providers({ children }: { children: React.ReactNode }) {
return (
<TecofProvider
apiUrl={process.env.NEXT_PUBLIC_BASE_URL!}
secretKey={process.env.NEXT_PUBLIC_MERCHANT_SECRET_KEY!}
>
{children}
</TecofProvider>
);
}Public Render
import { TecofRender } from "@tecof/theme-editor";
import { editorConfig } from "@/app/editor-config";
export function RenderClient({ data, cmsData }: any) {
return <TecofRender data={data} config={editorConfig as any} cmsData={cmsData} />;
}Editor
"use client";
import { TecofEditor } from "@tecof/theme-editor";
import { editorConfig } from "@/app/editor-config";
export default function EditorPage({ pageId, accessToken }: { pageId: string; accessToken: string }) {
return (
<TecofEditor
pageId={pageId}
config={editorConfig as any}
accessToken={accessToken}
warnOnUnsavedChanges
/>
);
}Component Registry Kuralları
Her tema bileşeni registry'de bir key ile yayınlanır. Kaydedilmiş sayfa verisindeki content[].type değeri bu key ile eşleşmelidir.
import { Header } from "@/components/sections/Header";
import { HeroSection } from "@/components/sections/HeroSection";
export const components = {
Header,
HeroSection,
};Bileşen config'i en az şu yapıyı taşımalıdır:
export const HeroSection = {
label: "Hero",
fields: {
title: { type: "text", label: "Başlık" },
},
defaultProps: {
title: "Yeni başlık",
},
render: (props: any) => <section>{props.title}</section>,
};@tecof/theme-editor alan tipleri arasında text, textarea, select, number, boolean, range, array, object, slot, language, editor, upload, link, color, repeater, CMS collection ve icon alanları bulunur.
Public API'ler
Tema oluştururken verilmesi gereken temel public API yüzeyi:
| Amaç | Endpoint |
|---|---|
| Yayındaki sayfayı render et | POST /api/store/render?themeId=:themeId&locale=:locale |
| Editör için sayfa oku | GET /api/store/editor/:pageId |
| Editör için sayfa kaydet | PUT /api/store/editor/:pageId |
| Merchant dil/logo/script bilgisi | GET /api/store/merchant-info |
| Link alanı için sayfa listesi | GET /api/store/pages |
| Upload | POST /api/store/upload |
| Medya listesi | GET /api/store/uploads |
| Otomatik çeviri | POST /api/store/translate |
| CMS canlı içerik | POST /api/store/cms/collections/:slug/items |
| E-ticaret ürün listesi | GET /api/store/ecommerce/products |
| Checkout session | POST /api/store/ecommerce/checkout-session |
Tam tablo için Public API Referansı sayfasına bakın.
Analytics Entegrasyonu
tecof-theme-core, TecofAnalyticsWrapper ile backend'in servis ettiği runtime script'i yükler:
<TecofAnalyticsWrapper merchantId={merchantId} />Script kaynağı:
/public/analytics/client.jsEvent endpoint'i:
POST /api/analytics/eventVarsayılan event tipleri pageview, web-vital, cart_add, cart_remove ve checkout_start olarak doğrulanmıştır. Tema bileşenleri sepet ve checkout etkileşimlerinde trackCartAdd, trackCartRemove, trackCheckoutStart helper'larını çağırabilir.
Tema Oluşturma Kontrol Listesi
NEXT_PUBLIC_BASE_URL,NEXT_PUBLIC_MERCHANT_SECRET_KEY,NEXT_PUBLIC_THEME_IDdeğerlerini tanımla.TecofProviderile app'i sar.app/components.tsxiçinde tüm render edilebilir component key'lerini kaydet.app/editor-config.tsxiçinde component config'i export et.- Dynamic route'larda
getPageData(slug, locale, showDraftData)ile/api/store/renderçağır. - Public sayfada
TecofRender, editör sayfasındaTecofEditorkullan. - E-ticaret componentleri için
lib/api/ecommerce.tshelper'larını kullan. - Analytics için
TecofAnalyticsWrapperve checkout event helper'larını ekle.