İçeriğe geç

Framework entegrasyonları

Tek-sayfa uygulamalarında kapsayıcı öğeler sayfa yüklendikten sonra oluşur; bu yüzden yükleyiciyi bir kez yükleyip her bileşende mount/unmount çağırmak gerekir. Aşağıdaki örnekler aynı kalıbı izler: betiği (gerekirse) yükle → kapsayıcıyı mount et → bileşen kaldırılırken unmount et. Daha az kodla ilerlemek için son üç sekmedeki özel öğeleri veya SDK bileşenlerini kullanabilirsiniz.

import { useEffect, useRef } from 'react';
const LOADER = 'https://api.mirac-ozdemir.com/widget.js';
let loading: Promise<void> | null = null;
function loadWidget(): Promise<void> {
if (window.MiracOzdemirWidget) return Promise.resolve();
loading ??= new Promise((resolve, reject) => {
const script = document.createElement('script');
script.src = LOADER;
script.async = true;
script.onload = () => resolve();
script.onerror = () => reject(new Error('widget.js yüklenemedi'));
document.head.append(script);
});
return loading;
}
export function Calculator({ tool, locale = 'tr' }: { tool: string; locale?: 'tr' | 'en' }) {
const ref = useRef<HTMLDivElement>(null);
useEffect(() => {
const node = ref.current;
if (!node) return;
let active = true;
loadWidget().then(() => active && window.MiracOzdemirWidget?.mount(node)).catch(console.error);
return () => {
active = false;
window.MiracOzdemirWidget?.unmount(node);
};
}, [tool, locale]);
return <div ref={ref} data-mo-tool={tool} data-locale={locale} />;
}
Platform Nasıl
WordPress Blok düzenleyicide Özel HTML bloğu ekleyin ve kurulum kodunu yapıştırın. Betik filtreleniyorsa tema footer.php’ye <script … async> ekleyin, kapsayıcıyı yazıda bırakın.
Webflow / Wix / Squarespace Embed / HTML öğesine kapsayıcı ve betiği birlikte yapıştırın. Betik engelleniyorsa düz iframe kullanın.
Google Tag Manager Kapsayıcıyı sayfaya yerleştirin; Özel HTML etiketine yalnızca <script src="…/widget.js" async></script> ekleyin. Etiket, sayfa yüklendikten sonra çalışsa bile yükleyici kendisi tarama yapar.
Markdown / statik site HTML’e izin veriyorsa kapsayıcıyı ve betiği doğrudan yazın. Astro/Hugo/Jekyll’da şablonun sonuna betiği ekleyin.
E-posta Desteklenmez (betik ve iframe e-postada çalışmaz). Bunun yerine araç sayfasına bağlantı verin.
  • Bir bileşen tool veya locale değiştirdiğinde widget’ı unmount edip yeniden mount edin (yukarıdaki React örneği bunu bağımlılık dizisiyle yapar) ya da update(el, { tool, locale }) çağırın. Tema, vurgu rengi, köşe, yoğunluk, başlık ve view gibi seçenekler için yeniden kurmaya gerek yoktur: update iframe’i yeniden yüklemeden uygular. Sayfanızın temasını izlemek için data-theme="inherit" kullanın.
  • Ön değerleri bir form durumundan beslemek için setInputs(el, değerler); sonucu istek üzerine almak için await calculate(el) kullanın.
  • Sunucu tarafı oluşturmada (SSR) window yoktur; mount işlemi yalnızca istemcide yapılmalıdır.
  • Kapsayıcının içine SSR’da yedek bir bağlantı koyabilirsiniz; hidrasyondan sonra widget bunu iframe ile değiştirir. Bazı framework’lerde bu çocuk öğeyi framework’ün kendisi yönetiyorsa uyarı verebilir; bu durumda kapsayıcıyı boş bırakıp yedek bağlantıyı yanına koyun.