Blöcke als Grundstruktur von Templates: Header, Footer und Navigation in benannte Bereiche teilen und unabhängig erweitern oder überschreiben.
Blöcke bilden die grundlegende Struktur eines Templates und ermöglichen eine flexible Anpassung der Storefront. Sie unterteilen das Layout in klar benannte, isolierte Bereiche wie Header, Footer oder Navigation, die unabhängig voneinander angepasst werden können.Diese Seite behandelt alles, was es über Blöcke im Detail zu wissen gibt: was sie können, was sie nicht können und wie man sie sinnvoll einsetzt.
Blöcke bauen auf dem Zusammenspiel von Basis- und View-Templates auf. Das Basis-Template definiert das übergeordnete Seitenlayout mit allem, was auf jeder Seite gleich bleibt, beispielsweise Header, Footer, Navigation oder eingebundene Skripte. Das View-Template ist das Template einer konkreten Seite. Es bindet das Basis-Template per {{ extends }} ein und befüllt einzelne Bereiche mit seitenspezifischem Inhalt.Ein Block ist ein benannter Bereich innerhalb eines Templates, der durch {{ block name }} geöffnet und durch {{ /block }} geschlossen wird. Er ist sowohl ein Struktur- als auch ein Inhaltsbaustein. Im Basis-Template legt er fest, welche Bereiche eine Seite hat und wo sie sich befinden, inklusive eines Standardinhalts, der angezeigt wird, solange ein View-Template diesen Block nicht explizit überschreibt. Im View-Template füllt er genau diese Bereiche mit seitenspezifischem Inhalt.
Der Blockname steht ohne Anführungszeichen, also {{ block header }} und nicht {{ block "header" }}. Ein Name in Anführungszeichen führt beim Kompilieren zum Fehler „Symbol expected“. Anführungszeichen gehören nur zu Dateipfaden, beispielsweise bei {{ extends "layouts/default.htm" }}.
Beim Schließen kann der Blockname wiederholt werden, beispielsweise {{ /block header }}. Das erleichtert bei langen Blöcken die Zuordnung. Der Name muss dann mit dem Namen des geöffneten Blocks übereinstimmen, sonst meldet der Compiler einen Fehler.
Statt ohne Zusatz kann der Standardinhalt auch ausdrücklich mit replace ersetzt werden, beispielsweise {{ block header replace }}. Andere Zusätze nach dem Blocknamen führen zu einem Fehler.Der Basis-Block bleibt in allen Fällen unverändert. append und prepend sind praktisch, wenn der Standardinhalt eines Blocks grundsätzlich passt, aber auf einzelnen Seiten um zusätzliche Inhalte ergänzt werden soll.
Blöcke können nicht in jedem Template-Typ definiert oder überschrieben werden. Es kommt darauf an, welche Rolle ein Template im System übernimmt:
Basis-Templates (Layout-Templates) definieren die Blöcke. Sie legen fest, welche Bereiche einer Seite existieren und welche Standardinhalte diese haben.
View-Templates (Seiten-Templates) und E-Mail-Templates können Blöcke eines Basis-Templates überschreiben oder erweitern. Beide binden ein Basis-Template per {{ extends }} ein. Dabei gilt eine wichtige Einschränkung: Ein Template mit {{ extends }} darf ausschließlich aus Blockanweisungen bestehen. Kein HTML, kein Code, kein Include darf außerhalb eines Blocks stehen.
Typische Blöcke, die das Standard-Layout bereitstellt:
Im Template-System gibt es mehrere Möglichkeiten, Code zu strukturieren und wiederzuverwenden. Blöcke sind dabei nur eines von mehreren Werkzeugen.Blöcke reservieren benannte Platzhalter im Layout, die ein View-Template später mit seitenspezifischem Inhalt füllen kann. Sie funktionieren von oben nach unten. Das Basis-Template gibt den Rahmen vor, das View-Template füllt ihn. Blöcke sind das Bindeglied zwischen Layout und Seiteninhalt.Includes binden eine separate Template-Datei an einer bestimmten Stelle ein, ähnlich wie ein Baustein, der an mehreren Stellen eingesetzt werden kann. Ein Breadcrumb oder eine Fehlermeldung sind typische Beispiele. Der Code wird einmal geschrieben und überall dort eingebunden, wo er gebraucht wird. Anders als Blöcke können Includes Variablen entgegennehmen und sind damit flexibel in ihren Parametern.Module wie $wsBasket oder $wsProducts stellen Daten bereit. Sie sind keine Template-Bausteine, sondern serverseitige Datenquellen, auf die man im Template zugreift.In der Praxis greifen alle drei ineinander. Ein Block definiert den Bereich der Seite, innerhalb des Blocks werden Includes eingebunden. Diese greifen über Module auf die benötigten Daten zu.
Blöcke wie head oder scripts können ohne Einschränkungen <style>-Tags, <link>-Elemente und <script>-Blöcke enthalten, inklusive inline JavaScript. Auch Template-Logik innerhalb von <script>-Tags ist möglich, etwa um serverseitig ermittelte Werte in JavaScript zu übergeben:
Formulare sind innerhalb von Blöcken vollständig erlaubt. Das schließt alle üblichen Formularelemente ein (Eingabefelder, Buttons, versteckte Felder, Sicherheitsmechanismen).
Blöcke können beliebig tief ineinander verschachtelt werden. Das ist sinnvoll, wenn ein größerer Bereich des Layouts in mehrere unabhängig überschreibbare Teilbereiche aufgeteilt werden soll. Das Basis-Template definiert dabei die äußere Struktur und jeder innere Block kann im View-Template gezielt überschrieben werden:
Blöcke sind das richtige Werkzeug, wenn ein Bereich auf mehreren Seiten vorkommt, aber je nach Seite unterschiedlich aussehen soll. Ein Beispiel ist der Footer, der auf normalen Seiten vollständig mit Navigation, Links und Kontaktinformationen erscheint, auf der Login- oder Checkout-Seite aber auf eine kompakte Variante reduziert wird.
Wenn ein Bereich auf mehreren Seiten identisch aussehen soll und nie überschrieben wird, ist ein Include die bessere Wahl. Die Produktvorschau in einer Kategorieliste, eine Breadcrumb-Leiste oder ein Alert-Banner werden nicht überschrieben, sie werden eingebunden. Blöcke wären hier also nicht die richtige Wahl.
Ein Block sollte einem klar abgrenzbaren Seitenbereich entsprechen. Groß genug, um sinnvoll überschreibbar zu sein, aber klein genug, um nicht zu viel auf einmal zu ändern. Ein einzelner Block für die gesamte Seite ist zu groß, ein Block pro HTML-Element zu wenig. Als Orientierung: Wenn man einen Block klar benennen und erklären kann, wofür er zuständig ist, ist er gut eingesetzt.
Der Name eines Blocks muss eindeutig sein. Kein Basis-Template darf zwei Blöcke mit demselben Namen haben, sonst meldet der Compiler einen Fehler. Der Name wird ohne Anführungszeichen geschrieben und sollte den Zweck des Bereichs beschreiben (beispielsweise header, content_main, scripts). Generische Namen wie block1 oder area sagen nichts darüber aus, was darin steckt und erschweren die Wartung.
Ein Block gibt Inhalte aus, er trifft keine Entscheidungen. Preisberechnungen, Zugriffsrechte oder Datentransformationen gehören ins entsprechende Modul oder in ein spezialisiertes Include. Blöcke, die solche Logik enthalten, sind schwer zu lesen, kaum testbar und lassen sich nicht wiederverwenden.
Tiefe Verschachtelung von Blöcken sollte auf das Notwendigste beschränkt werden. Je tiefer die Verschachtelung, desto schwerer ist es nachzuvollziehen, welcher Block am Ende tatsächlich ausgegeben wird. Als Faustregel gilt: Wenn ein Block sehr lang wird, gehören Teile davon in Includes. Und wenn die Verschachtelung schwer zu überblicken wird, ist das ein Signal, die Struktur zu vereinfachen.
Ein leerer Block im Basis-Template. Er existiert nur als Erweiterungspunkt und hat keinen Standardinhalt. Ein View-Template kann ihn befüllen, muss es aber nicht.
Auf alle Daten, die das System bereitstellt, beispielsweise Produktname oder Beschreibung, kann direkt innerhalb eines Blocks zugegriffen werden. So lassen sich beispielsweise Seitentitel und Meta-Beschreibung dynamisch pro Produkt befüllen.
Ein View-Template, das {{ extends }} verwendet, darf ausschließlich aus Blockanweisungen bestehen. Code oder HTML außerhalb eines Blocks ist ungültig und führt zu Fehlern.
{{# Ungültig: Code außerhalb eines Blocks #}}{{ extends "layouts/default.htm" }}<p>Dieser Text steht außerhalb eines Blocks. Das funktioniert nicht.</p>{{ block content_main }} <p>Das hier ist korrekt.</p>{{ /block }}
War diese Seite hilfreich?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"WEBSALE Dokumentation","description":"Offizielle Dokumentation der E-Commerce-Plattform WEBSALE der WEBSALE AG. Sie umfasst Template-Engine, Shopkonfiguration, Admin-Interface, Schnittstellen, Strapi CMS und WEBSALE | search für die aktuelle Generation sowie für Version V8s.","colors":{"primary":"#0066CC"},"logo":{"light":"https://mintcdn.com/websaleag-44ee7ea6/yeKhhJTjoXWEQCsc/logo/Logo_WEBSALE_2024_Farbverlauf_RGB.png?fit=max\u0026auto=format\u0026n=yeKhhJTjoXWEQCsc\u0026q=85\u0026s=b96a564fcbb0d782bfeb7df19423835e","dark":"https://mintcdn.com/websaleag-44ee7ea6/yeKhhJTjoXWEQCsc/logo/Logo_WEBSALE_2024_Farbverlauf_RGB.png?fit=max\u0026auto=format\u0026n=yeKhhJTjoXWEQCsc\u0026q=85\u0026s=b96a564fcbb0d782bfeb7df19423835e","href":"/"},"favicon":"https://mintcdn.com/websaleag-44ee7ea6/yeKhhJTjoXWEQCsc/logo/favicon.ico?fit=max\u0026auto=format\u0026n=yeKhhJTjoXWEQCsc\u0026q=85\u0026s=5d387abffbbbc1811401ecb3afd2a807","footer":{"socials":{"linkedin":"https://www.linkedin.com/company/websale-ag"},"links":[{"items":[{"label":"Impressum","href":"https://websale.de/impressum"},{"label":"Datenschutz","href":"https://websale.de/datenschutz"}]}]},"search":{"prompt":"Durchsuchen"},"fonts":{"family":"Inter"},"styling":{"codeblocks":{"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}},"latex":true},"navigation":{"languages":[{"language":"de","href":""},{"language":"en","href":"en"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"websaleag-44ee7ea6","hasAudioNarration":false,"actualSubdomain":"websaleag-44ee7ea6","customDomains":["dokumentation.websale.de"],"gitSource":{"type":"gitlab","owner":"websale-ag-group","repo":"dokumentation","deployBranch":"main","contentDirectory":"","isPrivate":false,"projectId":83013579,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aeb9d52b68579879703242b","collectionId":"880d3256-45c3-441d-ae9d-914252efd9ff","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aeb9d52b68579879703242b"},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aedc3985097775cf1354d2d","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"de","tag":"Version V8s","count":563},{"language":"de","tag":"Wegweiser","count":546},{"language":"de","tag":"Referenz","count":326},{"language":"en","tag":"Reference","count":326},{"language":"en","tag":"Version V8s","count":325},{"language":"en","tag":"Guide","count":248},{"language":"de","tag":"Neue Generation","count":245},{"language":"en","tag":"New generation","count":245},{"language":"de","tag":"Schnittstellen","count":174},{"language":"de","tag":"Tags","count":132},{"language":"en","tag":"Tags","count":132},{"language":"de","tag":"Frontend","count":93},{"language":"en","tag":"Frontend","count":93},{"language":"de","tag":"Konfiguration","count":76},{"language":"en","tag":"Configuration","count":76},{"language":"de","tag":"Bestellprozess","count":61},{"language":"en","tag":"Interfaces","count":60},{"language":"de","tag":"Materialien","count":58},{"language":"en","tag":"Reference – Modules","count":39},{"language":"en","tag":"Admin Interface API","count":36}],"searchSettings":{"isFiltersEnabled":true,"showContentSnippets":true}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"support@websale.de","showHelpButton":false}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"*:has(>[data-component-part=\"products-selector-trigger\"]){flex-shrink:0!important;min-width:fit-content!important}[data-component-part=\"products-selector-trigger\"]{flex-shrink:0!important;overflow:visible!important;max-width:none!important}[data-component-part=\"products-selector-trigger\"]>span{max-width:none!important;overflow:visible!important}"}],"page":{"pagePath":"frontend/referenz/blocke","slug":"/frontend/referenz/blocke","pageMetadata":{"title":"Blöcke","description":"Blöcke als Grundstruktur von Templates: Header, Footer und Navigation in benannte Bereiche teilen und unabhängig erweitern oder überschreiben.","href":"/frontend/referenz/blocke"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Blöcke als Grundstruktur von Templates: Header, Footer und Navigation in benannte Bereiche teilen und unabhängig erweitern oder überschreiben.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Blöcke bilden die grundlegende Struktur eines `,_jsx(_components.a,{href:`/frontend/die-basics/template-theme`,children:`Templates`}),` und ermöglichen eine flexible Anpassung der Storefront. Sie unterteilen das Layout in klar benannte, isolierte Bereiche wie Header, Footer oder Navigation, die unabhängig voneinander angepasst werden können.`]}),`\n`,_jsx(_components.p,{children:`Diese Seite behandelt alles, was es über Blöcke im Detail zu wissen gibt: was sie können, was sie nicht können und wie man sie sinnvoll einsetzt.`}),`\n`,_jsx(Heading,{level:`2`,id:`grundprinzip`,children:`Grundprinzip`}),`\n`,_jsxs(_components.p,{children:[`Blöcke bauen auf dem Zusammenspiel von Basis- und View-Templates auf. Das `,_jsx(_components.a,{href:`/frontend/die-basics/template-theme#basis-template-layout-template`,children:`Basis-Template`}),` definiert das übergeordnete Seitenlayout mit allem, was auf jeder Seite gleich bleibt, beispielsweise Header, Footer, Navigation oder eingebundene Skripte. Das `,_jsx(_components.a,{href:`/frontend/die-basics/template-theme#view-templates-seiten-templates`,children:`View-Template`}),` ist das Template einer konkreten Seite. Es bindet das Basis-Template per `,_jsx(_components.code,{children:`{{ extends }}`}),` ein und befüllt einzelne Bereiche mit seitenspezifischem Inhalt.`]}),`\n`,_jsxs(_components.p,{children:[`Ein Block ist ein benannter Bereich innerhalb eines Templates, der durch `,_jsx(_components.code,{children:`{{ block name }}`}),` geöffnet und durch `,_jsx(_components.code,{children:`{{ /block }}`}),` geschlossen wird. Er ist sowohl ein Struktur- als auch ein Inhaltsbaustein. Im Basis-Template legt er fest, welche Bereiche eine Seite hat und wo sie sich befinden, inklusive eines Standardinhalts, der angezeigt wird, solange ein View-Template diesen Block nicht explizit überschreibt. Im View-Template füllt er genau diese Bereiche mit seitenspezifischem Inhalt.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ block header }}`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`header`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`h1`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>Standard-Header\u003c/`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`h1`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c/`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`header`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ /block }}`})}),`\n`]})})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Der Blockname steht ohne Anführungszeichen, also `,_jsx(_components.code,{children:`{{ block header }}`}),` und nicht `,_jsx(_components.code,{children:`{{ block \"header\" }}`}),`. Ein Name in Anführungszeichen führt beim Kompilieren zum Fehler „Symbol expected“. Anführungszeichen gehören nur zu Dateipfaden, beispielsweise bei `,_jsx(_components.code,{children:`{{ extends \"layouts/default.htm\" }}`}),`.`]})}),`\n`,_jsxs(_components.p,{children:[`Beim Schließen kann der Blockname wiederholt werden, beispielsweise `,_jsx(_components.code,{children:`{{ /block header }}`}),`. Das erleichtert bei langen Blöcken die Zuordnung. Der Name muss dann mit dem Namen des geöffneten Blocks übereinstimmen, sonst meldet der Compiler einen Fehler.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`blöcke-überschreiben`,children:`Blöcke überschreiben`}),`\n`,_jsx(_components.p,{children:`Ein View-Template greift einen Block auf, indem es ihn mit demselben Namen erneut definiert. Dabei gibt es folgende Möglichkeiten:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:`Der Standardinhalt wird vollständig ersetzt:`}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ extends \"layouts/default.htm\" }}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ block header }}`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`header`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`h1`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>Willkommen im Shop!\u003c/`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`h1`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c/`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`header`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ /block }}`})}),`\n`]})})}),`\n`,_jsxs(_components.ol,{start:`2`,children:[`\n`,_jsxs(_components.li,{children:[`Mit `,_jsx(_components.code,{children:`append`}),` wird der neue Inhalt hinter dem Standardinhalt eingefügt:`]}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ block header append }}`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`p`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>Versandkostenfreiheit ab 50 €\u003c/`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`p`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ /block }}`})}),`\n`]})})}),`\n`,_jsxs(_components.ol,{start:`3`,children:[`\n`,_jsxs(_components.li,{children:[`Mit `,_jsx(_components.code,{children:`prepend`}),` wird der neue Inhalt vor dem Standardinhalt eingefügt:`]}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ block header prepend }}`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`p`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>Kostenloser Versand heute!\u003c/`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`p`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ /block }}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Statt ohne Zusatz kann der Standardinhalt auch ausdrücklich mit `,_jsx(_components.code,{children:`replace`}),` ersetzt werden, beispielsweise `,_jsx(_components.code,{children:`{{ block header replace }}`}),`. Andere Zusätze nach dem Blocknamen führen zu einem Fehler.`]}),`\n`,_jsxs(_components.p,{children:[`Der Basis-Block bleibt in allen Fällen unverändert. `,_jsx(_components.code,{children:`append`}),` und `,_jsx(_components.code,{children:`prepend`}),` sind praktisch, wenn der Standardinhalt eines Blocks grundsätzlich passt, aber auf einzelnen Seiten um zusätzliche Inhalte ergänzt werden soll.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`verwendung-von-blöcken-in-templates`,children:`Verwendung von Blöcken in Templates`}),`\n`,_jsx(_components.p,{children:`Blöcke können nicht in jedem Template-Typ definiert oder überschrieben werden. Es kommt darauf an, welche Rolle ein Template im System übernimmt:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Basis-Templates`}),` (Layout-Templates) definieren die Blöcke. Sie legen fest, welche Bereiche einer Seite existieren und welche Standardinhalte diese haben.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`View-Templates`}),` (Seiten-Templates) und `,_jsx(_components.strong,{children:`E-Mail-Templates`}),` können Blöcke eines Basis-Templates überschreiben oder erweitern. Beide binden ein Basis-Template per `,_jsx(_components.code,{children:`{{ extends }}`}),` ein. Dabei gilt eine wichtige Einschränkung: Ein Template mit `,_jsx(_components.code,{children:`{{ extends }}`}),` darf ausschließlich aus Blockanweisungen bestehen. Kein HTML, kein Code, kein Include darf außerhalb eines Blocks stehen.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Typische Blöcke, die das Standard-Layout bereitstellt:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:_jsx(_components.strong,{children:`Block`})}),_jsx(_components.th,{children:_jsx(_components.strong,{children:`Typischer Inhalt`})})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`header`})}),_jsx(_components.td,{children:`Kopfbereich der Seite`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`content_main`})}),_jsx(_components.td,{children:`Hauptinhalt der Seite`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`footer`})}),_jsx(_components.td,{children:`Fußbereich der Seite`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`scripts`})}),_jsx(_components.td,{children:`JavaScript am Seitenende`})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`blöcke-und-andere-konstrukte`,children:`Blöcke und andere Konstrukte`}),`\n`,_jsx(_components.p,{children:`Im Template-System gibt es mehrere Möglichkeiten, Code zu strukturieren und wiederzuverwenden. Blöcke sind dabei nur eines von mehreren Werkzeugen.`}),`\n`,_jsx(_components.p,{children:`Blöcke reservieren benannte Platzhalter im Layout, die ein View-Template später mit seitenspezifischem Inhalt füllen kann. Sie funktionieren von oben nach unten. Das Basis-Template gibt den Rahmen vor, das View-Template füllt ihn. Blöcke sind das Bindeglied zwischen Layout und Seiteninhalt.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/frontend/die-basics/template-theme#components-includes`,children:`Includes`}),` binden eine separate Template-Datei an einer bestimmten Stelle ein, ähnlich wie ein Baustein, der an mehreren Stellen eingesetzt werden kann. Ein Breadcrumb oder eine Fehlermeldung sind typische Beispiele. Der Code wird einmal geschrieben und überall dort eingebunden, wo er gebraucht wird. Anders als Blöcke können Includes Variablen entgegennehmen und sind damit flexibel in ihren Parametern.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/frontend/referenz/module`,children:`Module`}),` wie `,_jsx(_components.code,{children:`$wsBasket`}),` oder `,_jsx(_components.code,{children:`$wsProducts`}),` stellen Daten bereit. Sie sind keine Template-Bausteine, sondern serverseitige Datenquellen, auf die man im Template zugreift.`]}),`\n`,_jsx(_components.p,{children:`In der Praxis greifen alle drei ineinander. Ein Block definiert den Bereich der Seite, innerhalb des Blocks werden Includes eingebunden. Diese greifen über Module auf die benötigten Daten zu.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`erlaubter-inhalt`,children:`Erlaubter Inhalt`}),`\n`,_jsx(Heading,{level:`3`,id:`html-und-template-syntax`,children:`HTML und Template-Syntax`}),`\n`,_jsx(_components.p,{children:`Innerhalb eines Blocks sind erlaubt:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Beliebiges HTML`}),`\n`,_jsxs(_components.li,{children:[`Variablendeklarationen (`,_jsx(_components.code,{children:`{{ var ... }}`}),`) und Ausgaben (`,_jsx(_components.code,{children:`{{= ... }}`}),`)`]}),`\n`,_jsxs(_components.li,{children:[`Kontrollstrukturen wie `,_jsx(_components.code,{children:`{{ if }}`}),`, `,_jsx(_components.code,{children:`{{ foreach }}`}),`, `,_jsx(_components.code,{children:`{{ switch }}`})]}),`\n`,_jsxs(_components.li,{children:[`Includes (`,_jsx(_components.code,{children:`{{ include ... }}`}),`)`]}),`\n`,_jsxs(_components.li,{children:[`Modulzugriffe (`,_jsx(_components.code,{children:`$wsBasket.items`}),`, `,_jsx(_components.code,{children:`$wsCheckout.sum.total`}),` etc.)`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`javascript-und-css`,children:`JavaScript und CSS`}),`\n`,_jsxs(_components.p,{children:[`Blöcke wie `,_jsx(_components.code,{children:`head`}),` oder `,_jsx(_components.code,{children:`scripts`}),` können ohne Einschränkungen `,_jsx(_components.code,{children:`\u003cstyle>`}),`-Tags, `,_jsx(_components.code,{children:`\u003clink>`}),`-Elemente und `,_jsx(_components.code,{children:`\u003cscript>`}),`-Blöcke enthalten, inklusive inline JavaScript. Auch Template-Logik innerhalb von `,_jsx(_components.code,{children:`\u003cscript>`}),`-Tags ist möglich, etwa um serverseitig ermittelte Werte in JavaScript zu übergeben:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ block scripts }}`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`script`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:` src`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"{{= static('scripts/splide.js') }}\"`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:` defer`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>\u003c/`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`script`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ /block }}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`formulare`,children:`Formulare`}),`\n`,_jsx(_components.p,{children:`Formulare sind innerhalb von Blöcken vollständig erlaubt. Das schließt alle üblichen Formularelemente ein (Eingabefelder, Buttons, versteckte Felder, Sicherheitsmechanismen).`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`10`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`10`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ block content_main }}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` {{ var $cAction = $wsActions.create(\"BasketItemAdd\") }}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`form`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:` method`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"post\"`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:` action`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"{{= $wsViews.current.url() }}\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`input`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:` type`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"hidden\"`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:` name`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"wscsrf\"`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:` value`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"{{= $cAction.csrf }}\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`input`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:` type`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"hidden\"`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:` name`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"wsact\"`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:` value`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"{{= $cAction.id }}\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`input`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:` type`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"hidden\"`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:` name`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"productId\"`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:` value`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"{{= $cProduct.id }}\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`button`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:` type`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"submit\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>In den Warenkorb\u003c/`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`button`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c/`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`form`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ /block }}`})}),`\n`]})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`verschachtelung`,children:`Verschachtelung`}),`\n`,_jsx(_components.p,{children:`Blöcke können beliebig tief ineinander verschachtelt werden. Das ist sinnvoll, wenn ein größerer Bereich des Layouts in mehrere unabhängig überschreibbare Teilbereiche aufgeteilt werden soll. Das Basis-Template definiert dabei die äußere Struktur und jeder innere Block kann im View-Template gezielt überschrieben werden:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ block content }}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` {{ block sidebar }}`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`aside`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>Standard-Sidebar\u003c/`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`aside`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` {{ /block }}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` {{ block main }}`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`div`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>Standard-Inhalt\u003c/`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`div`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` {{ /block }}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ /block }}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Ein View-Template kann dann gezielt nur `,_jsx(_components.code,{children:`sidebar`}),` oder nur `,_jsx(_components.code,{children:`main`}),` überschreiben, ohne den äußeren `,_jsx(_components.code,{children:`content`}),`-Block anfassen zu müssen.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`best-practices`,children:`Best Practices`}),`\n`,_jsx(Heading,{level:`3`,id:`wann-blöcke-sinnvoll-sind`,children:`Wann Blöcke sinnvoll sind`}),`\n`,_jsx(_components.p,{children:`Blöcke sind das richtige Werkzeug, wenn ein Bereich auf mehreren Seiten vorkommt, aber je nach Seite unterschiedlich aussehen soll. Ein Beispiel ist der Footer, der auf normalen Seiten vollständig mit Navigation, Links und Kontaktinformationen erscheint, auf der Login- oder Checkout-Seite aber auf eine kompakte Variante reduziert wird.`}),`\n`,_jsx(Heading,{level:`3`,id:`wann-ein-anderes-konstrukt-sinnvoll-ist`,children:`Wann ein anderes Konstrukt sinnvoll ist`}),`\n`,_jsx(_components.p,{children:`Wenn ein Bereich auf mehreren Seiten identisch aussehen soll und nie überschrieben wird, ist ein Include die bessere Wahl. Die Produktvorschau in einer Kategorieliste, eine Breadcrumb-Leiste oder ein Alert-Banner werden nicht überschrieben, sie werden eingebunden. Blöcke wären hier also nicht die richtige Wahl.`}),`\n`,_jsx(Heading,{level:`3`,id:`der-richtige-umfang-für-einen-block`,children:`Der richtige Umfang für einen Block`}),`\n`,_jsx(_components.p,{children:`Ein Block sollte einem klar abgrenzbaren Seitenbereich entsprechen. Groß genug, um sinnvoll überschreibbar zu sein, aber klein genug, um nicht zu viel auf einmal zu ändern. Ein einzelner Block für die gesamte Seite ist zu groß, ein Block pro HTML-Element zu wenig. Als Orientierung: Wenn man einen Block klar benennen und erklären kann, wofür er zuständig ist, ist er gut eingesetzt.`}),`\n`,_jsx(Heading,{level:`3`,id:`benennung-der-blöcke`,children:`Benennung der Blöcke`}),`\n`,_jsxs(_components.p,{children:[`Der Name eines Blocks muss eindeutig sein. Kein Basis-Template darf zwei Blöcke mit demselben Namen haben, sonst meldet der Compiler einen Fehler. Der Name wird ohne Anführungszeichen geschrieben und sollte den Zweck des Bereichs beschreiben (beispielsweise `,_jsx(_components.code,{children:`header`}),`, `,_jsx(_components.code,{children:`content_main`}),`, `,_jsx(_components.code,{children:`scripts`}),`). Generische Namen wie `,_jsx(_components.code,{children:`block1`}),` oder `,_jsx(_components.code,{children:`area`}),` sagen nichts darüber aus, was darin steckt und erschweren die Wartung.`]}),`\n`,_jsx(Heading,{level:`3`,id:`geschäftslogik-in-blöcken`,children:`Geschäftslogik in Blöcken`}),`\n`,_jsx(_components.p,{children:`Ein Block gibt Inhalte aus, er trifft keine Entscheidungen. Preisberechnungen, Zugriffsrechte oder Datentransformationen gehören ins entsprechende Modul oder in ein spezialisiertes Include. Blöcke, die solche Logik enthalten, sind schwer zu lesen, kaum testbar und lassen sich nicht wiederverwenden.`}),`\n`,_jsx(Heading,{level:`3`,id:`schwer-wartbare-strukturen-vermeiden`,children:`Schwer wartbare Strukturen vermeiden`}),`\n`,_jsx(_components.p,{children:`Tiefe Verschachtelung von Blöcken sollte auf das Notwendigste beschränkt werden. Je tiefer die Verschachtelung, desto schwerer ist es nachzuvollziehen, welcher Block am Ende tatsächlich ausgegeben wird. Als Faustregel gilt: Wenn ein Block sehr lang wird, gehören Teile davon in Includes. Und wenn die Verschachtelung schwer zu überblicken wird, ist das ein Signal, die Struktur zu vereinfachen.`}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`beispiele`,children:`Beispiele`}),`\n`,_jsx(Heading,{level:`3`,id:`einfacher-block`,children:`Einfacher Block`}),`\n`,_jsx(_components.p,{children:`Ein leerer Block im Basis-Template. Er existiert nur als Erweiterungspunkt und hat keinen Standardinhalt. Ein View-Template kann ihn befüllen, muss es aber nicht.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ block head }}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ /block }}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`block-mit-statischem-inhalt`,children:`Block mit statischem Inhalt`}),`\n`,_jsx(_components.p,{children:`Ein Block mit festem Inhalt, der auf allen Seiten gleich angezeigt wird, solange kein View-Template ihn überschreibt.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ block footer }}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` {{ include \"components/layout/footerCompact.htm\" }}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ /block }}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`block-mit-variablenzugriff`,children:`Block mit Variablenzugriff`}),`\n`,_jsx(_components.p,{children:`Auf alle Daten, die das System bereitstellt, beispielsweise Produktname oder Beschreibung, kann direkt innerhalb eines Blocks zugegriffen werden. So lassen sich beispielsweise Seitentitel und Meta-Beschreibung dynamisch pro Produkt befüllen.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ block headMeta }}`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`title`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>{{= $wsViews.current.info.product.name }}\u003c/`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`title`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`meta`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:` name`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"description\"`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#B392F0`},children:` content`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`=`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#9ECBFF`},children:`\"{{= $wsViews.current.info.product.descr }}\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ /block }}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`block-mit-bedingter-ausgabe`,children:`Block mit bedingter Ausgabe`}),`\n`,_jsx(_components.p,{children:`Blöcke können Template-Logik enthalten, beispielsweise um Inhalte nur unter bestimmten Bedingungen anzuzeigen.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`7`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ block head }}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` {{ if $cStep == \"2\" }}`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`style`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A737D`,\"--shiki-dark\":`#6A737D`},children:` /* Nur für Checkout-Schritt 2 benötigte Styles */`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c/`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`style`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` {{ /if }}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ /block }}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`block-der-einen-anderen-block-enthält`,children:`Block, der einen anderen Block enthält`}),`\n`,_jsxs(_components.p,{children:[`Im Basis-Template können Blöcke ineinander verschachtelt werden. Jeder innere Block (hier `,_jsx(_components.code,{children:`sidebar`}),` und `,_jsx(_components.code,{children:`main`}),`) ist dabei unabhängig überschreibbar.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{# Basis-Template #}}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ block content }}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` {{ block sidebar }}`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`aside`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>Standard-Sidebar\u003c/`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`aside`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` {{ /block }}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` {{ block main }}`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`div`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>Standard-Inhalt\u003c/`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`div`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` {{ /block }}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ /block }}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`negativbeispiel`,children:`Negativbeispiel`}),`\n`,_jsxs(_components.p,{children:[`Ein View-Template, das `,_jsx(_components.code,{children:`{{ extends }}`}),` verwendet, darf ausschließlich aus Blockanweisungen bestehen. Code oder HTML außerhalb eines Blocks ist ungültig und führt zu Fehlern.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`html`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#24292e`,color:`#24292e`,\"--shiki-dark\":`#e1e4e8`},language:`html`,children:_jsxs(_components.code,{language:`html`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{# Ungültig: Code außerhalb eines Blocks #}}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ extends \"layouts/default.htm\" }}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`\u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`p`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>Dieser Text steht außerhalb eines Blocks. Das funktioniert nicht.\u003c/`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`p`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ block content_main }}`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:` \u003c`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`p`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>Das hier ist korrekt.\u003c/`}),_jsx(_components.span,{style:{color:`#22863A`,\"--shiki-dark\":`#85E89D`},children:`p`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`>`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#E1E4E8`},children:`{{ /block }}`})}),`\n`]})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}},"config":{},"pageMetadata":{"title":"Blöcke","description":"Blöcke als Grundstruktur von Templates: Header, Footer und Navigation in benannte Bereiche teilen und unabhängig erweitern oder überschreiben.","href":"/frontend/referenz/blocke"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Grundprinzip","slug":"grundprinzip","depth":2,"children":[]},{"title":"Blöcke überschreiben","slug":"blöcke-überschreiben","depth":2,"children":[]},{"title":"Verwendung von Blöcken in Templates","slug":"verwendung-von-blöcken-in-templates","depth":2,"children":[]},{"title":"Blöcke und andere Konstrukte","slug":"blöcke-und-andere-konstrukte","depth":2,"children":[]},{"title":"Erlaubter Inhalt","slug":"erlaubter-inhalt","depth":2,"children":[{"title":"HTML und Template-Syntax","slug":"html-und-template-syntax","depth":3,"children":[]},{"title":"JavaScript und CSS","slug":"javascript-und-css","depth":3,"children":[]},{"title":"Formulare","slug":"formulare","depth":3,"children":[]}]},{"title":"Verschachtelung","slug":"verschachtelung","depth":2,"children":[]},{"title":"Best Practices","slug":"best-practices","depth":2,"children":[{"title":"Wann Blöcke sinnvoll sind","slug":"wann-blöcke-sinnvoll-sind","depth":3,"children":[]},{"title":"Wann ein anderes Konstrukt sinnvoll ist","slug":"wann-ein-anderes-konstrukt-sinnvoll-ist","depth":3,"children":[]},{"title":"Der richtige Umfang für einen Block","slug":"der-richtige-umfang-für-einen-block","depth":3,"children":[]},{"title":"Benennung der Blöcke","slug":"benennung-der-blöcke","depth":3,"children":[]},{"title":"Geschäftslogik in Blöcken","slug":"geschäftslogik-in-blöcken","depth":3,"children":[]},{"title":"Schwer wartbare Strukturen vermeiden","slug":"schwer-wartbare-strukturen-vermeiden","depth":3,"children":[]}]},{"title":"Beispiele","slug":"beispiele","depth":2,"children":[{"title":"Einfacher Block","slug":"einfacher-block","depth":3,"children":[]},{"title":"Block mit statischem Inhalt","slug":"block-mit-statischem-inhalt","depth":3,"children":[]},{"title":"Block mit Variablenzugriff","slug":"block-mit-variablenzugriff","depth":3,"children":[]},{"title":"Block mit bedingter Ausgabe","slug":"block-mit-bedingter-ausgabe","depth":3,"children":[]},{"title":"Block, der einen anderen Block enthält","slug":"block-der-einen-anderen-block-enthält","depth":3,"children":[]},{"title":"Negativbeispiel","slug":"negativbeispiel","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":[],"subdomain":"websaleag-44ee7ea6","siteName":"WEBSALE Dokumentation","title":"Blöcke - WEBSALE Dokumentation","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"de":{"href":"/frontend/referenz/blocke","matchLevel":0},"en":{"href":"/en/frontend/referenz/blocke","matchLevel":1}}},"lastModified":"2026-10-26T10:19:30.690Z","originalFileLocation":"frontend/referenz/blocke.mdx","locale":"de"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Blöcke als Grundstruktur von Templates: Header, Footer und Navigation in benannte Bereiche teilen und unabhängig erweitern oder überschreiben.\">\u003cmeta data-mint-head name=\"application-name\" content=\"WEBSALE Dokumentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/websaleag-44ee7ea6/b-DMHJEWRrC_pLQS/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/websaleag-44ee7ea6/b-DMHJEWRrC_pLQS/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/websaleag-44ee7ea6/b-DMHJEWRrC_pLQS/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/websaleag-44ee7ea6/b-DMHJEWRrC_pLQS/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/websaleag-44ee7ea6/b-DMHJEWRrC_pLQS/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/websaleag-44ee7ea6/b-DMHJEWRrC_pLQS/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/websaleag-44ee7ea6/b-DMHJEWRrC_pLQS/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/websaleag-44ee7ea6/b-DMHJEWRrC_pLQS/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/websaleag-44ee7ea6/b-DMHJEWRrC_pLQS/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Blöcke - WEBSALE Dokumentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Blöcke als Grundstruktur von Templates: Header, Footer und Navigation in benannte Bereiche teilen und unabhängig erweitern oder überschreiben.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"WEBSALE Dokumentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://dokumentation.websale.de/frontend/referenz/blocke\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://websaleag-44ee7ea6.mintlify.site/_mintlify/api/og/v2?division=Referenz+%E2%80%93+Sprache\u0026amp;title=Bl%C3%B6cke\u0026amp;description=Bl%C3%B6cke+als+Grundstruktur+von+Templates%3A+Header%2C+Footer+und+Navigation+in+benannte+Bereiche+teilen+und+unabh%C3%A4ngig+erweitern+oder+%C3%BCberschreiben.\u0026amp;theme=2f1e88ce90c5c698bc58bf46\u0026amp;signature=ea9db263db132b3e5003f796c8eac206ac57fa98f4fe73eb849b99466cd5ba56\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Blöcke - WEBSALE Dokumentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Blöcke als Grundstruktur von Templates: Header, Footer und Navigation in benannte Bereiche teilen und unabhängig erweitern oder überschreiben.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://websaleag-44ee7ea6.mintlify.site/_mintlify/api/og/v2?division=Referenz+%E2%80%93+Sprache\u0026amp;title=Bl%C3%B6cke\u0026amp;description=Bl%C3%B6cke+als+Grundstruktur+von+Templates%3A+Header%2C+Footer+und+Navigation+in+benannte+Bereiche+teilen+und+unabh%C3%A4ngig+erweitern+oder+%C3%BCberschreiben.\u0026amp;theme=2f1e88ce90c5c698bc58bf46\u0026amp;signature=ea9db263db132b3e5003f796c8eac206ac57fa98f4fe73eb849b99466cd5ba56\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/websaleag-44ee7ea6/b-DMHJEWRrC_pLQS/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"WEBSALE Dokumentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0066CC\">\u003clink data-mint-head rel=\"canonical\" href=\"https://dokumentation.websale.de/frontend/referenz/blocke\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/frontend/referenz/blocke.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"de\" href=\"https://dokumentation.websale.de/frontend/referenz/blocke\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://dokumentation.websale.de/en/frontend/referenz/blocke\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://dokumentation.websale.de/frontend/referenz/blocke\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://dokumentation.websale.de/#organization\",\"name\":\"WEBSALE Dokumentation\",\"url\":\"https://dokumentation.websale.de\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/websaleag-44ee7ea6/yeKhhJTjoXWEQCsc/logo/Logo_WEBSALE_2024_Farbverlauf_RGB.png?fit=max\u0026auto=format\u0026n=yeKhhJTjoXWEQCsc\u0026q=85\u0026s=b96a564fcbb0d782bfeb7df19423835e\"}},{\"@type\":\"WebSite\",\"@id\":\"https://dokumentation.websale.de#website\",\"name\":\"WEBSALE Dokumentation\",\"url\":\"https://dokumentation.websale.de\",\"publisher\":{\"@id\":\"https://dokumentation.websale.de/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://dokumentation.websale.de/frontend/referenz/blocke#webpage\",\"url\":\"https://dokumentation.websale.de/frontend/referenz/blocke\",\"name\":\"Blöcke\",\"description\":\"Blöcke als Grundstruktur von Templates: Header, Footer und Navigation in benannte Bereiche teilen und unabhängig erweitern oder überschreiben.\",\"dateModified\":\"2026-10-26T10:19:30.690Z\",\"isPartOf\":{\"@id\":\"https://dokumentation.websale.de#website\"},\"breadcrumb\":{\"@id\":\"https://dokumentation.websale.de/frontend/referenz/blocke#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://dokumentation.websale.de/frontend/referenz/blocke#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Referenz – Sprache\",\"item\":\"https://dokumentation.websale.de/frontend/referenz\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blöcke\",\"item\":\"https://dokumentation.websale.de/frontend/referenz/blocke\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://dokumentation.websale.de/frontend/referenz/blocke#article\",\"headline\":\"Blöcke\",\"name\":\"Blöcke\",\"description\":\"Blöcke als Grundstruktur von Templates: Header, Footer und Navigation in benannte Bereiche teilen und unabhängig erweitern oder überschreiben.\",\"url\":\"https://dokumentation.websale.de/frontend/referenz/blocke\",\"mainEntityOfPage\":{\"@id\":\"https://dokumentation.websale.de/frontend/referenz/blocke#webpage\"},\"dateModified\":\"2026-10-26T10:19:30.690Z\",\"publisher\":{\"@id\":\"https://dokumentation.websale.de/#organization\"},\"isPartOf\":{\"@id\":\"https://dokumentation.websale.de#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"WEBSALE Dokumentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"WEBSALE Dokumentation","nav":{"global":null,"languages":[{"language":"de","products":[{"product":"Neue Generation","icon":"rocket","description":"Aktuelle Produktgeneration","tabs":[{"tab":"Frontend","groups":[{"group":"WEBSALE","pages":[{"title":"WEBSALE Dokumentation","href":""}]},{"group":"Frontend","pages":[{"title":"Frontend - Übersicht","href":"/frontend"}]},{"group":"Die Basics","pages":[{"title":"Übersicht - Die Basics","href":"/frontend/die-basics"},{"title":"Alles für den Start","href":"/frontend/die-basics/alles-fur-den-start"},{"title":"BestPractice Shop","href":"/frontend/die-basics/bestpractice-shop"},{"title":"Template Theme","href":"/frontend/die-basics/template-theme"},{"title":"Template Engine","href":"/frontend/die-basics/template-engine"},{"title":"Konfiguration per Code","href":"/frontend/die-basics/konfiguration-per-code"}]},{"group":"Getting Started","pages":[{"title":"Getting Started","href":"/frontend/getting-started"},{"title":"Arbeiten mit GitLab","href":"/frontend/getting-started/arbeiten-mit-gitlab"}]},{"group":"Referenz – Aktionen","pages":[{"title":"Aktionen - Übersicht","href":"/frontend/referenz/aktionen"},{"title":"Account","href":"/frontend/referenz/aktionen/account"},{"title":"Basket","href":"/frontend/referenz/aktionen/basket"},{"title":"Checkout","href":"/frontend/referenz/aktionen/checkout"},{"title":"Consent","href":"/frontend/referenz/aktionen/consent"},{"title":"DirectOrder","href":"/frontend/referenz/aktionen/directorder"},{"title":"Inquiry","href":"/frontend/referenz/aktionen/inquiry"},{"title":"Inventory","href":"/frontend/referenz/aktionen/inventory"},{"title":"Newsletter","href":"/frontend/referenz/aktionen/newsletter"},{"title":"ProductRating","href":"/frontend/referenz/aktionen/productrating"},{"title":"Session","href":"/frontend/referenz/aktionen/session"},{"title":"Stores","href":"/frontend/referenz/aktionen/stores"},{"title":"TestMode","href":"/frontend/referenz/aktionen/testmode"},{"title":"Voucher","href":"/frontend/referenz/aktionen/voucher"},{"title":"WatchList","href":"/frontend/referenz/aktionen/watchlist"}]},{"group":"Referenz – Sprache","pages":[{"title":"Referenz - Übersicht","href":"/frontend/referenz"},{"title":"Anweisungen und Ausgabe","description":"Anweisungen und Ausgabe in Templates: Syntax für Verarbeitung, Ausgabe und automatisches Escaping verstehen und kontextsicher einsetzen.","href":"/frontend/referenz/anweisungen"},{"title":"Blöcke","href":"/frontend/referenz/blocke"},{"title":"Components","description":"Components der WEBSALE Template-Sprache: wiederverwendbare Bausteine für strukturierte, modulare Frontend-Komponenten im Shop-Template.","href":"/frontend/referenz/components"},{"title":"Conditions","href":"/frontend/referenz/conditions"},{"title":"Datentypen","href":"/frontend/referenz/datentypen"},{"title":"Funktionen","href":"/frontend/referenz/funktionen"},{"title":"Kontrollstrukturen","href":"/frontend/referenz/kontrollstrukturen"},{"title":"Loops","href":"/frontend/referenz/loops"},{"title":"Modifiers","href":"/frontend/referenz/modifiers"},{"title":"Operatoren","href":"/frontend/referenz/operatoren"},{"title":"Optionen","href":"/frontend/referenz/optionen"},{"title":"Variablen","href":"/frontend/referenz/variablen"}]},{"group":"Referenz – Module","pages":[{"title":"Module - Übersicht","href":"/frontend/referenz/module"},{"title":"$wsAccount - Account \u0026 Adressdaten","href":"/frontend/referenz/module/wsAccount"},{"title":"$wsActions - Aktionen","href":"/frontend/referenz/module/wsactions"},{"title":"$wsAsse - Asynchrone HTTP-Events (ASSE)","href":"/frontend/referenz/module/wsasse"},{"title":"$wsBasket - Warenkorb","href":"/frontend/referenz/module/wsbasket"},{"title":"$wsCategories - Kategorien","href":"/frontend/referenz/module/wscategories"},{"title":"$wsCheckout - Checkout","href":"/frontend/referenz/module/wscheckout"},{"title":"$wsCmsPage - CMS-Seite ausgeben","href":"/frontend/referenz/module/wscmspage"},{"title":"$wsComputopHosted - Computop (gehostete Bezahlseite)","href":"/frontend/referenz/module/wscomputophosted"},{"title":"$wsConfig - Konfiguration","href":"/frontend/referenz/module/wsconfig"},{"title":"$wsCookie - Browser-Cookies","href":"/frontend/referenz/module/ws-cookie-browser-cookie"},{"title":"$wsConsent - Cookies \u0026 Services","href":"/frontend/referenz/module/wsconsent"},{"title":"$wsDirectOrder - Direktbestellung","href":"/frontend/referenz/module/wsdirectorder"},{"title":"$wsEmails - E-Mails","href":"/frontend/referenz/module/wsemails"},{"title":"$wsExternalData - Externe Daten","href":"/frontend/referenz/module/wsexternaldata"},{"title":"$wsForm - Formulare","href":"/frontend/referenz/module/wsform"},{"title":"$wsInventory - Lagerbestand","href":"/frontend/referenz/module/wsinventory"},{"title":"$wsInserts - Werbemittelkennzeichen","href":"/frontend/referenz/module/wsinserts"},{"title":"$wsLastSeenProducts - Zuletzt angesehene Produkte","href":"/frontend/referenz/module/wslastseenproducts"},{"title":"$wsMaintenance - Wartungsmodus","href":"/frontend/referenz/module/wsmaintenance"},{"title":"$wsNavigation - Breadcrumb","href":"/frontend/referenz/module/wsnavigation"},{"title":"$wsNewsletter - Newsletter","href":"/frontend/referenz/module/wsnewsletter"},{"title":"$wsOptIn - Opt-In-Prozesse","href":"/frontend/referenz/module/wsoptin"},{"title":"$wsOptions - Template-Optionen","href":"/frontend/referenz/module/ws-options-template-optionen"},{"title":"$wsOrderHistory - Bestellhistorie","href":"/frontend/referenz/module/wsorderhistory"},{"title":"$wsPayPalCheckout - PayPal","href":"/frontend/referenz/module/wspaypalcheckout"},{"title":"$wsProductRating - Produktbewertungen","href":"/frontend/referenz/module/wsproductrating"},{"title":"$wsProducts - Produktdaten","href":"/frontend/referenz/module/wsproducts"},{"title":"$wsSecurity - Verschlüsselung","href":"/frontend/referenz/module/wssecurity"},{"title":"$wsSession - Session-Daten","href":"/frontend/referenz/module/wssession"},{"title":"$wsShipTrack - Sendungsverfolgung","href":"/frontend/referenz/module/wsshiptrack"},{"title":"$wsStore - Datenspeicherung","href":"/frontend/referenz/module/wsstore"},{"title":"$wsStores - Märkte \u0026 Filialen","href":"/frontend/referenz/module/wsstores"},{"title":"$wsStripe - Stripe","href":"/frontend/referenz/module/wsstripe"},{"title":"$wsSubshop - Subshop","href":"/frontend/referenz/module/wssubshop"},{"title":"$wsTestMode - Testmodus","href":"/frontend/referenz/module/wstestmode"},{"title":"$wsViews - Aktuelle Informationen abrufen","href":"/frontend/referenz/module/wsviews"},{"title":"$wsVoucher - Gutscheine","href":"/frontend/referenz/module/wsvoucher"},{"title":"$wsWatchList - Merklisten","href":"/frontend/referenz/module/wswatchlist"}]},{"group":"Integrationsanleitung","pages":[{"title":"Bestellablauf","href":"/frontend/funktionsubersicht/bestellablauf"},{"title":"Blättern - Navigation zwischen Produkten","href":"/frontend/funktionsubersicht/blaettern-von-produkt-zu-produkt"},{"title":"PDF-Ansichten","href":"/frontend/funktionsubersicht/pdf-ansichten"},{"title":"Produktvergleich","href":"/frontend/funktionsubersicht/produktvergleich"},{"title":"Scan \u0026 Order","href":"/frontend/funktionsubersicht/scan-and-order"},{"title":"Shop-Modi","href":"/frontend/funktionsubersicht/inaktiv-seite"},{"title":"Storefinder","href":"/frontend/funktionsubersicht/storefinder"},{"title":"Werbemittelkennzeichen","href":"/frontend/funktionsubersicht/werbemittelkennzeichnung"},{"group":"Zahlungsarten","pages":[{"title":"Übersicht - Zahlungsarten","href":"/frontend/funktionsubersicht/zahlungsarten"},{"title":"stripe","href":"/frontend/funktionsubersicht/zahlungsarten/stripe"}]},{"title":"Zeitabhängige Aktionspreise","href":"/frontend/funktionsubersicht/aktionspreise"}]},{"group":"Praxisbeispiele","pages":[{"title":"Praxisbeispiele - Gutscheine","href":"/frontend/praxisbeispiele/gutscheine"},{"title":"Praxisbeispiele - Verknüpfung mit dem Zahlungsanbieter","href":"/frontend/praxisbeispiele/verknuepfung-zahlungsanbieter"},{"title":"Praxisbeispiele - Testmodus","href":"/frontend/praxisbeispiele/praxisbeispiele-testmodus"},{"title":"Praxisbeispiele - Online-Bestellschein","href":"/frontend/praxisbeispiele/online-bestellschein"}]}]},{"tab":"Konfiguration","pages":[{"title":"Konfiguration","href":"/konfiguration"}]},{"tab":"Strapi CMS","pages":[{"title":"Strapi CMS","href":"/strapi-cms"}]},{"tab":"Schnittstellen","pages":[{"title":"Schnittstellen","href":"/schnittstellen"}]},{"tab":"Admin Interface","pages":[{"title":"Admin Interface","href":"/admin-interface"}]},{"tab":"WEBSALE | search","pages":[{"title":"WEBSALE | search","href":"/ws-search/websale-search"}]},{"tab":"Migration","pages":[{"title":"Migration","href":"/migration"}]},{"tab":"Ressourcen","pages":[{"title":"Ressourcen","href":"/changelog"}]}]},{"product":"Version V8s","icon":"clock-rotate-left","description":"Dokumentation der WEBSALE V8s-Generation","pages":[{"title":"Version V8s","href":"/v8s"}]}]},{"language":"en","pages":[{"title":"en","href":"/en/frontend/referenz/blocke"}]}]},"basePath":"","title":"Blöcke - WEBSALE Dokumentation","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":[],"chunks":[]}