Astro+Directus(Visual-Editing)+Snipcart Test-Stack

This commit is contained in:
2026-06-21 06:27:52 +00:00
commit 1459e99cb0
10119 changed files with 1499318 additions and 0 deletions
+43
View File
@@ -0,0 +1,43 @@
import { e as createComponent, g as addAttribute, r as renderTemplate, k as renderHead, l as renderScript, h as createAstro } from '../chunks/astro/server_CtsYB3PN.mjs';
import 'piccolore';
import 'clsx';
/* empty css */
export { renderers } from '../renderers.mjs';
const $$Astro = createAstro();
const $$Index = createComponent(async ($$result, $$props, $$slots) => {
const Astro2 = $$result.createAstro($$Astro, $$props, $$slots);
Astro2.self = $$Index;
const DIRECTUS = process.env.DIRECTUS_URL || "http://i5yq3bxu3de6kkk7jd2e0nk7.46.224.49.66.sslip.io";
const TOKEN = process.env.DIRECTUS_TOKEN || "hd-astro-ro-7c1f9a2e";
const SNIPCART = process.env.PUBLIC_SNIPCART_KEY || "";
async function dapi(path) {
const r = await fetch(`${DIRECTUS}${path}`, { headers: { Authorization: `Bearer ${TOKEN}` } });
if (!r.ok) return null;
return (await r.json()).data;
}
const pageArr = await dapi("/items/pages?filter[slug][_eq]=home&limit=1");
const page = pageArr && pageArr[0] || { id: 1, kicker: "", headline: "Inhalt nicht geladen", lead: "", intro_heading: "", intro_body: "" };
const products = await dapi("/items/products?limit=20&sort=sort&fields=id,slug,name,priceCents,category,badge") || [];
const eur = (c) => (c / 100).toLocaleString("de-DE", { minimumFractionDigits: 2 }) + " €";
const de = (fields) => `collection:pages;item:${page.id};fields:${fields};mode:popover`;
return renderTemplate`<html lang="de"${addAttribute(DIRECTUS, "data-directus-url")}> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>${page.headline} · Astro + Directus + Snipcart</title>${SNIPCART && renderTemplate`<link rel="preconnect" href="https://app.snipcart.com">`}${SNIPCART && renderTemplate`<link rel="stylesheet" href="https://cdn.snipcart.com/themes/v3.7.1/default/snipcart.css">`}${renderHead()}</head> <body> <header class="wrap"><div class="topbar"> <span class="brandmark">${page.kicker || "Demo-Shop"}</span> ${SNIPCART && renderTemplate`<span class="snipcart-checkout cart-sum">Warenkorb (<span class="snipcart-items-count">0</span>)</span>`} </div></header> <section class="sec wrap"> <div class="kicker"${addAttribute(de("kicker"), "data-directus")}>${page.kicker}</div> <h1${addAttribute(de("headline"), "data-directus")}>${page.headline}</h1> <p class="lead"${addAttribute(de("lead"), "data-directus")}>${page.lead}</p> </section> <section class="sec wrap"> <div class="intro"> <h2${addAttribute(de("intro_heading"), "data-directus")}>${page.intro_heading}</h2> <p class="lead"${addAttribute(de("intro_body"), "data-directus")}>${page.intro_body}</p> </div> </section> <section class="sec wrap"> <h2>Produkte (${products.length})</h2> <div class="grid"> ${products.map((p) => renderTemplate`<div class="card"> <div class="ph"></div> <div class="bd"> <h3>${p.name}</h3> <span class="price">${eur(p.priceCents)}</span> <button class="buy snipcart-add-item"${addAttribute(String(p.id), "data-item-id")}${addAttribute(p.name, "data-item-name")}${addAttribute((p.priceCents / 100).toFixed(2), "data-item-price")} data-item-url="/"${addAttribute(p.category || "", "data-item-description")}>
In den Warenkorb
</button> </div> </div>`)} </div> <div class="note"> <strong>Demo-Stack:</strong> Diese Seite ist ein <em>Astro-SSR-Frontend</em>. Texte oben kommen aus
<em>Directus</em> (self-host) — im Directus-Studio unter „Visual Editor" erscheinen Edit-Buttons direkt auf
den Texten. Der Warenkorb ist <em>Snipcart</em> für ≤~30 Artikel. ${SNIPCART ? "" : "Snipcart-Key fehlt noch → Buttons sind sichtbar, Checkout aktiv erst mit Key."} </div> </section> ${SNIPCART && renderTemplate`<div hidden id="snipcart"${addAttribute(SNIPCART, "data-api-key")} data-config-modal-style="side"></div>
${renderScript($$result, "/tmp/astro-directus/src/pages/index.astro?astro&type=script&index=0&lang.ts")}`} ${renderScript($$result, "/tmp/astro-directus/src/pages/index.astro?astro&type=script&index=1&lang.ts")} </body> </html>`;
}, "/tmp/astro-directus/src/pages/index.astro", void 0);
const $$file = "/tmp/astro-directus/src/pages/index.astro";
const $$url = "";
const _page = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({
__proto__: null,
default: $$Index,
file: $$file,
url: $$url
}, Symbol.toStringTag, { value: 'Module' }));
const page = () => _page;
export { page };