App Blocks vs. Liquid Sections in Shopify
App block or Liquid section? A side-by-side of how each renders, what a theme update does to each, when to pick which, and the honest trade-off of both.
Was eine Shopify Theme App Extension ist, wie App-Blöcke in ein Theme rendern, warum sie Theme-Updates überstehen und welche Theme-Berechtigung Apps brauchen.
Eine Theme App Extension ist der Weg, auf dem eine Shopify-App Sektionen, Blöcke und Skripte zu einem Storefront hinzufügt — ohne in die eigenen Dateien des Themes zu schreiben. Die App liefert eine Extension aus; das Theme referenziert sie über einen stabilen Satz an Slots; der Händler platziert die Blöcke der App im Theme-Editor genauso wie native. Der Code wird nie Teil des Themes.
Diese eine architektonische Tatsache — App-Code lebt in der App, nicht im Theme
— ist der Grund, warum dieses Thema weit über „wie Apps integrieren" hinaus
zählt. Es ist der Grund, warum App-Blöcke Theme-Updates überstehen, die von Hand
eingefügte .liquid-Dateien überschreiben, und es ist das Modell, das
SectionGuard nutzt, um Sektionen zu rendern, die ein Theme-Update
oder -Wechsel nicht anfassen kann.
Das ist der Hub für das gesamte Thema. Er behandelt, was eine Extension
tatsächlich ist, wie ihre Blöcke rendern, wie sie sich von einer Liquid-Sektion
unterscheidet, die du in sections/ schreibst, die API, die App-Sektionen
funktionieren lässt, und die Theme-Berechtigung, die eine App anfragt. Jeder
Abschnitt verlinkt zu einem tieferen Guide für deine konkrete Frage.
Technisch ist eine Theme App Extension ein Ordner in der Codebasis einer App —
historisch extensions/<name>/ in einer Shopify-CLI-App —, der Blöcke und
Snippets in Liquid enthält, dazu statische assets und einen
locales-Ordner. Wenn die App deployt wird, hostet Shopify diese Extension.
Themes auf Basis von Online Store 2.0 stellen benannte Slots bereit, in denen
diese Blöcke erscheinen können, sodass der Block der App im Menü „Block
hinzufügen" oder „Sektion hinzufügen" des Theme-Editors neben den eigenen des
Themes auftaucht.
Es gibt zwei Formen von Block:
{ "type": "@app" } in ihrem
blocks-Array). Ein Bewertungs-Widget, ein Größentabellen-Block oder ein
Upsell, das ins Produkt-Template eingefügt wird, ist ein App-Block.<script>-Tags im <head>.Beide rendern über dieselbe Extension, und beide werden vom Händler im Theme-Editor konfiguriert, ohne Code anzufassen. Was sie nie tun, ist die Dateien des Themes zu verändern.
Der Mechanismus ist es wert, verstanden zu werden, weil er die Beständigkeit erklärt. Die JSON-Templates und Sektionen eines 2.0-Themes deklarieren, wo App-Blöcke erlaubt sind. Wenn der Storefront rendert, schlägt Shopify nach, welche App-Blöcke der Händler in diese Slots eingefügt hat, holt das entsprechende Liquid aus der Extension der installierten App und rendert es inline — als wäre es Teil der Seite —, während die Quelle bei der App gehostet bleibt.
Weil das Liquid, CSS und JavaScript des Blocks aus der Extension geliefert und vom Theme lediglich referenziert werden, enthält die Theme-Datei selbst nur einen Verweis, nicht dein Markup. Das ist der ganze Trick. Für die tiefere Erklärung der API, die Sektions-Markup auflöst und zurückgibt, siehe Die Section Rendering API.
Wenn du schon einmal eine Sektion von Hand geschrieben hast, kennst du das
andere Modell: eine .liquid-Datei im sections/-Ordner des Themes mit einem
{% schema %}-Block. Es ist die flexibelste Route und die, die die meisten
Tutorials lehren — Schritt für Schritt behandelt in
So erstellst du eine eigene Sektion.
Der Unterschied liegt nicht in der Fähigkeit; beide können dasselbe Ergebnis auf dem Bildschirm erzeugen. Der Unterschied liegt in Zugehörigkeit und Lebenszyklus:
Keines ist im Abstrakten „richtig" — ein einmaliger Kniff ist von Hand geschrieben in Ordnung; eine Sektion, auf die du langfristig angewiesen bist, ist sicherer app-gerendert. Der vollständige Kompromiss, samt der ehrlichen Kehrseite (ein App-Block verschwindet, wenn die App deinstalliert wird), steht in App-Blöcke vs. Liquid-Sektionen.
App-Sektionen und dynamische Sektions-Updates stützen sich auf die Section Rendering API — den Endpunkt, der das gerenderte HTML einer bestimmten Sektion für sich zurückgibt, sodass eine Seite eine einzelne Sektion aktualisieren kann (ein Warenkorb-Drawer, ein gefiltertes Produktraster, ein Varianten-Wechsel), ohne die ganze Seite neu zu laden. Das zu verstehen klärt sowohl, wie app-gerenderte Sektionen ausgeliefert werden, als auch, wie man schnelle, partielle UI-Updates in einem Theme baut.
Die Form der Anfrage, die Parameter sections und section_id sowie
ausgearbeitete JavaScript-Beispiele stehen in
Die Section Rendering API.
Eine App, die eine Theme App Extension ausliefert, braucht einen Weg, mit dem
Theme des Händlers zu interagieren. Genau hier kommt der
write_themes-Zugriffsscope ins Spiel. Es ist die Berechtigung, die eine App
anfragt, um über die API mit Theme-Assets zu arbeiten — und es ist ein
vernünftiges Anliegen, das verstehen zu wollen, bevor man es gewährt.
Die ehrliche Version: Extensions sind der nicht-destruktive Integrationsweg
(genau das ist ihr Sinn), und der Scope, den eine App deklariert, sollte zu dem
passen, was sie tatsächlich tut. Was read_themes und write_themes jeweils
erlauben, warum eine extension-basierte App sie anfragt und wie du die Scopes
einer App vor der Installation prüfst, steht in
Was ist der write_themes-Scope?.
Die Cluster-Guides unten führen jede Frage einen Schritt weiter. Beginne mit der, die zu dem passt, was du gerade tust:
Wenn deine eigentliche Frage lautet „Wie behalte ich meine Sektionen, wenn sich das Theme ändert?", lies diese Säule zusammen mit Theme aktualisieren, ohne Anpassungen zu verlieren und dem ehrlichen Vergleich von datei-basierten vs. app-basierten Sektionen — gemeinsam erklären sie, warum extension-gerenderte Sektionen Updates überstehen, die Theme-Dateien überschreiben, und wo SectionGuard hineinpasst.
Schritt-für-Schritt-Anleitungen und Erklärungen zu diesem Thema.
App block or Liquid section? A side-by-side of how each renders, what a theme update does to each, when to pick which, and the honest trade-off of both.
How the Shopify Section Rendering API returns a single section's HTML, the sections and section_id parameters, and worked fetch examples.
What the Shopify write_themes access scope grants, how it differs from read_themes, why extension apps request it, and how to check an app's scopes.
SectionGuard rendert deine eigenen Sektionen über eine Theme App Extension — dein Theme bleibt sauber und voll aktualisierbar.
Kostenlos für bis zu 3 Sektionen · Keine Kreditkarte · Läuft auf OS 2.0 & Horizon.