2013-02-02 13 views
8

Ich möchte ein Snippet in eine Vorlage einfügen, aber nur wenn die Snippet-Datei existiert. Kann ich es irgendwie schaffen?Shopify liquid: Wie kann ich Snippets in Shopify liquid bedingt einbinden?

Jetzt verwende ich nur:

{% include 'snippetName' %} 

Aber dies führt den Fehler:

Liquid error: Could not find asset snippets/snippetName.liquid 

Der Grund, warum ich eine solche Funktionalität benötigen, ist, weil ich ein Hintergrundprozess, der später das Snippet wird auf.

Antwort

17

Hatte dieses Problem selbst. Das war meine Lösung:

{% capture the_snippet_content %}{% include the_snippet %}{% endcapture %} 
{% unless the_snippet_content contains "Liquid error" %} 
    {% include reviews_snippet %} 
{% endunless %} 

Grundsätzlich erfassen Sie den Inhalt des Snippets als eine Variable. Wenn kein Snippet erzeugt Shopify den Fehler:

Liquid error: Could not find asset snippets/caroline-flint-reviews.liquid

So überprüfen, um zu sehen, ob es generiert wird, dass ... wenn ja nicht das Snippet drucken Sie : D

Natürlich ist diese brechen würde, wenn man beabsichtigt, Ihr Snippet enthält "Liquid error" oder wenn Shopify die Fehlermeldung ändert.

+0

existiert, die eine große Antwort ist !!! – vovafeldman

+0

So nützlich. Verwunden Sie dies, um ein Snippet-Routing-System zu erstellen, das auf Handles basiert. – Leland

0

@vovafeldman Nicht sicher, warum Sie kein leeres Snippet haben können, aber es gibt keine Datei. Die einzige andere Möglichkeit, die ich mir vorstellen kann, ist, dass Sie einen BG-Prozess verwenden, um das Snippet zu generieren (und ich nehme an, es hochzuladen). Sie können immer die Template-API verwenden, um die Version der Vorlage hochzuladen, die das Snippet enthält gleichzeitig.

2

Erweiterung auf Jons Antwort;

eine Datei namens erstellen snippet.liquid

{% capture snippet_content %}{% include snippet %}{% endcapture %} 
{% unless snippet_content contains "Liquid error" %} 
    {{ snippet_content }} 
{% endunless %} 

Dann, wenn Sie nur eine Datei enthalten, wenn es

{% include 'snippet' with 'filename_of_include' %} 
+0

Sehr saubere Umsetzung. – Carlton