In de eerste twee delen van deze serie heb ik je voorgesteld aan het e-commerce-platform van Shopify, de belangrijkste concepten uitgelegd, besproken hoe thema's zijn geconstrueerd en vervolgens naar een diepgaande blik op Liquid - the Shopify-sjabloontaal geleid.
In dit laatste deel zullen we bekijken hoe een beetje diepere kennis van Liquid je in staat zal stellen om je thema's nog flexibeler te maken, zodat je rijke en fantasierijke winkelontwerpen kunt leveren.
Laten we beginnen met kijken naar hoe we "alternatieve lay-outs" met groot effect kunnen gebruiken.
Een van de krachtigste functies van Liquid is het lay-outbestand dat we in deel één hebben bekeken. Ik beschrijf een lay-outbestand vaak als een "hoofdsjabloon". Meestal bevat dit bestand onze HTML-verklaringen, branding, navigatie en footer - in feite alle gemeenschappelijke elementen van onze site die we op elke pagina willen weergeven.
Alle weergegeven pagina's in een Shopify-thema, tenzij anders vermeld, zijn gebaseerd op deze hoofdsjabloon. Standaard is dit de theme.liquid
bestand dat zich in de lay-outs
map. Onze microsjablonen, te vinden in de templates
map wordt weergegeven op het punt waar Shopify de content_for_layout
Vloeibare tijdelijke aanduiding in ons lay-outbestand.
Om je geheugen op te frissen, is hier een heel eenvoudig voorbeeld van een lay-outbestand:
content_for_headershop.name - page_title "screen.css" | asset_url | stylesheet_tag content_for_layout
Zoals vermeld in deel één, moet een lay-outbestand in een Shopify-thema twee Liquid-uitvoerlabels bevatten, content_for_header
en content_for_layout
. De eerste wordt door Shopify gebruikt om code toe te voegen voor analyses en om snelle toegang tot het admingebied van uw winkel te bieden. De seconde, content_for_layout
, wordt vervangen door de relevante sjabloon uit onze sjablonenmap, bijvoorbeeld de product.liquid
sjabloon wordt geïnjecteerd wanneer we een productdetailpagina bekijken.
Lay-outs zijn een geweldige functie en helpen ons om thema's mooi en DROOG te houden. Er zijn echter momenten dat de elementen van uw standaard lay-outbestand moeten worden gewijzigd. Misschien wilt u een splash-pagina maken die geen "normale" branding en navigatie vereist. Het is mogelijk dat u mogelijk de gewenste resultaten behaalt met CSS, maar waarschijnlijk wilt u andere opmaak produceren. Hier komen alternatieve lay-outs om de hoek kijken.
Het creëren van een alternatieve lay-out is zeer eenvoudig. Het eerste wat u moet doen is een nieuw bestand maken en het een relevante naam geven en de .vloeistof
uitbreiding. De bestandsnaam is aan jou. Wat belangrijk is, is dat je het opslaat in de lay-outs
map in uw themamap. In dit bestand kunt u elke gewenste HTML (zoals HTML-verklaringen, CSS, JS-koppelingen, enz.) Plaatsen samen met de twee hierboven besproken placeholders.
Om dit lay-outbestand te gebruiken en de standaardwaarde effectief te negeren theme.liquid
lay-outbestand gebruiken we de volgende Liquid-syntaxis in een van de microsjablonen:
% layout "alternatief"%
Notitie: u hoeft niet het .vloeistof
uitbreiding. Wanneer het relevante microsjabloon wordt verwerkt door Shopify, wordt het weergegeven met alternative.liquid
als het lay-outbestand.
Op dezelfde manier waarop we specifieke lay-outs kunnen dicteren die op onze microsjablonen kunnen worden toegepast, kunnen we vloeibare logica gebruiken om verschillende productsjablonen weer te geven. Er zijn een aantal manieren om dit in Liquid te bereiken - mijn voorkeursmethode is om producthandvatten te gebruiken. Als je ooit WordPress hebt gebruikt, kun je denken aan een product handvat op dezelfde manier als een naaktslak. Dit is een standaard product-URL van de A Book Apart-website om aan te tonen:
http://www.abookapart.com/products/responsive-web-design
In dit voorbeeld is de handvat van het product responsieve-web-design
- het laatste element van de URL. Producthandvatten worden automatisch voor u gemaakt wanneer u een product toevoegt in de Shopify-beheerder en is gebaseerd op de naam die u invoert; hoofdletters worden vervangen door kleine letters en spaties met streepjes. U kunt ze uiteraard overschrijven als dat nodig is.
Telkens wanneer Shopify een productdetailpagina rendert, gebruikt deze standaard de product.liquid
microsjabloon. Laten we zeggen dat we een andere productpagina willen aanbieden, alleen voor Ethan's boek om het echt te benadrukken. Om dit te doen, moeten we een paar wijzigingen aanbrengen in de product.liquid
sjabloon.
Als de product.liquid
sjabloon heeft toegang tot alle gegevens met betrekking tot het momenteel bekeken product. We kunnen de volgende vraag stellen met behulp van een Liquid als
uitspraak:
% if product.handle == "responsive-web-design"% % include "responsive-web-design"% % else% [Normale HTML-code voor product.liquid] % endif%
Door het toevoegen van de als
verklaring, die we in deel twee van deze serie hebben bekeken, kunnen we bepalen welke markup wordt weergegeven. Simpel gezegd, als het product.handle
is gelijk aan "responsive-web-design" we nemen het bestand genaamd responsieve-web-design.liquid.
Als dat niet zo is, geven we gewoon de code die we al hebben in onze product.liquid
sjabloon.
Dit voorbeeld introduceert ons bij Liquid snippets. Fragmenten leven in de toepasselijke naam snippets
map en waarnaar wordt verwezen zonder de .vloeistof
extensie bij gebruik van de Liquid-tag % include%
.
Zoals de naam al doet vermoeden, gebruiken % include%
zal letterlijk een stukje code opnemen in uw microsjabloon of lay-outbestand. In het bovenstaande voorbeeld bevat het bestand de alternatieve markup die vereist is om Ethan's boek met alle benodigde Liquid-code weer te geven om de gegevens over het product in de sjabloon te plaatsen.
Natuurlijk kunt u aangeven dat deze specifieke sjabloon naast Ethan ook voor een ander boek wordt gebruikt. Hier is een manier om dat te bereiken:
% if product.handle == "responsive-web-design" OF product.handle == "ontwerp-is-een-werk"% % include "responsive-web-design"% % else% [ Normale HTML-code voor product.liquid] % endif%
In dit geval wilt u misschien uw fragment hernoemen naar iets gepaster, d.w.z.. product-showcase.liquid
.
Het is vermeldenswaard dat u geen mappen kunt nesten in uw fragmentenmap. Daarom heb ik de neiging mijn bestanden vooraf te voorzien van hun functie:
product-responsieve-web-design.liquid
product-showcase.liquid
collecties-books.liquid
Het gebruik van deze naamconventie maakt het vinden van fragmenten veel gemakkelijker, vooral omdat uw gebruik ervan toeneemt.
Een voorbeeld van hoe ik fragmenten op de site 8 Faces heb gebruikt om logische problemen op te lossenIk gebruik vaak fragmenten op twee verschillende manieren. Ten eerste om code te scheiden in hanteerbare brokken en ten tweede voor elementen van een pagina die ik opnieuw moet gebruiken, zoals een pagineringblok.
Als algemene vuistregel hier is hoe ik beslis waar ik code moet toevoegen:
Een andere truc die ik met veel effect heb toegepast, is om een microsjabloon te behandelen als een view controller - een idee dat ik heb overgenomen uit veel van de MVC-frameworks die ik heb gebruikt. Dit kan een nieuw concept voor u zijn, dus laten we het in meer detail bekijken.
In de bovenstaande voorbeelden gebruiken we vloeibare logica om te controleren op een bepaalde producthandle in de product.liquid
microsjabloon. Als het antwoord op onze als
verklaring klopt, we nemen een fragment op, anders geeft Shopify het HTML-blok tussen de % else%
en % stop als %
labels.
Voor sommigen lijkt dit misschien een beetje rommelig en kan het na verloop van tijd moeilijk worden om te lezen, vooral als je standaard bent product.liquid
markup groeit. Om het eenvoudiger te beheren, kunnen we eenvoudig onze standaardmarkering uit de template product.liquid halen en er een fragment voor maken - ik noem dit meestal product-default.liquid
.
Naar aanleiding van deze benadering kan ons bestand product.liquid worden aangepast aan het volgende:
% if product.handle == "responsive-web-design"% % include "product-responsive-web-design"% % else% % include "product-default"% % endif%
Natuurlijk, naarmate uw behoeften toenemen, kan dit bestand groeien om andere controles en relevante bestanden op te nemen, afhankelijk van de resultaten. De opties zijn onbeperkt.
Het is de moeite waard om te onthouden dat het niet alleen producten zijn die handvatten hebben in Shopify, collecties en pagina's ook. Met dezelfde aanpak voor collecties kunnen we het volgende doen in onze collections.liquid
sjabloon:
% if collection.handle == "css"% % include "collection-css"% % else% % include "collection-default"% % endif%
geval
In plaats van als elsif anders
Deze methode werkt erg goed als we alleen willen controleren op een bepaald handvat, of het nu een product of verzameling is, maar wat als we dat willen uitbreiden naar meerdere producten of collecties?
We hebben twee mogelijke benaderingen, de eerste is door onze als
verklaring met behulp van elsif
. Hier is een voorbeeld:
% if product.handle == "responsive-web-design"% % include "product-responsive-web-design"% % elsif product.handle == "ontwerp-is-een-werk"% % include "productontwerp-is-een-werk"% % else% % include "product-default"% % endif%
Dit voorbeeld controleert beurtelings om twee producthandvatten en alleen als geen van beide waar is, wordt het weergegeven product-default.liquid
snipper.
Het is mogelijk om meerdere te gebruiken elsif
statements in Liquid, maar het kan een beetje uitgebreid worden. Een alternatief, en ik denk dat een nettere benadering is om te gebruiken geval
. Hier is het bovenstaande voorbeeld gerefactored:
% case product.handle% % when "responsive-web-design"% % include "product-responsive-web-design"% % wanneer "ontwerp-is-een-werk"% % include "product-ontwerp-is-een-werk"% % else% % include "product-standaard"% % endcase%
We kunnen ook een meer vage vergelijking maken met behulp van de operator Vloeistof bevat
. Laten we zeggen dat we elk product dat het woord responsief heeft in zijn handle een ander fragment gebruiken. Dit is hoe we het zouden kunnen benaderen met behulp van een eenvoudige vloeistof als
uitspraak:
% if product.handle bevat "responsive"% % include "product-responsive"% % else% % include "product-default"% % endif%
Het gebruik van deze methode zou betekenen dat we onze sjabloon niet hoeven aan te passen om een nieuwe toe te voegen elsif
of geval
voor meer boeken die "responsief" in hun titel bevatten.
Deze benaderingen kunnen ook worden gebruikt binnen de microsjablonen in uw thema. U zou het bijvoorbeeld kunnen gebruiken om elementen programmatisch te tonen en te verbergen. Voorbeelden hiervan zijn verkoopbadges, speciale aanbiedingen en gerelateerde producten.
Handgrepen kunnen ook erg handig zijn bij het werken met CSS en JavaScript. Velen van ons gebruiken de body class voor CSS en JavaScript-hooks en net als bij WordPress is het vrij eenvoudig om een aantal nuttige klassen aan ons lichaamselement toe te voegen in Shopify.
Hier zijn een paar ideeën:
Voeg de momenteel weergegeven sjabloonnaam toe aan de hoofdklasse:
Merk op dat we het handvatfilter gebruiken om onze uitvoer te zuiveren. Enkele voorbeelden hiervan zijn:
Voortbouwend op dit kunnen we de huidige productgreep ook toevoegen aan onze lichaamsklasse. Om dingen netjes en opgeruimd te houden, kunnen we een als
verklaring om voorwaardelijk de productgreep toe te voegen alleen wanneer we een product bekijken:
Merk op hoe ik de spatie vóór de product.handle
uitvoer tag.
Sommige thema's voegen ook de huidige paginatitel toe aan het hoofdelement in de vorm van een ID kaart
, Voortbouwend op het bovenstaande ziet onze code er nu als volgt uit:
Voor een goede maatregel kunnen we zelfs een controle toevoegen voor collecties en dat ook toevoegen:
Het is vrij eenvoudig om deze logica aan te passen voor uw eigen doeleinden.
Tot nu toe hebben we gekeken hoe we Liquid kunnen gebruiken om verder te gaan dan het uitvoeren van gegevens en het regelen van de stroom van onze sjablonen. Laten we nu eens kijken naar een andere geweldige functie van Shopify - thema-instellingen.
Met thema-instellingen kunnen thema-ontwikkelaars een eenvoudige manier bieden voor elke gebruiker om het uiterlijk van hun winkel aan te passen zonder HTML of CSS te hoeven wijzigen. Dit maakt thema's zeer flexibel - een voordeel als u ooit overweegt een thema te verkopen via het Shopify-themawinkel of Themeforest.
Om thema-instellingen in onze winkelbeheerder te tonen, moeten we een bestand maken met de naam settings.html
en sla het op in de configuratie map. Let op de extensie, dit is het enige bestand met een .html
uitbreiding in uw Shopify-thema.
Er zijn oneindig veel toepassingen voor thema-instellingen, maar een algemene is om de achtergrondkleur van de hele site te veranderen. Hier is een codevoorbeeld dat we kunnen bespreken:
Het belangrijkste element hier is de invoer
. Merk op dat we het een id- en naamkenmerk hebben gegeven van bg_color
en een klasse van kleur
. Deze klasse is belangrijk; wanneer we onze thema-instellingen in de admin bekijken, zal Shopify een handige kleurenkiezer weergeven in plaats van onze invoer.
Je zult ook merken dat ik een waarde heb ingesteld op onze input van #fff
. Als we ervoor kiezen onze thema-instellingen in ons CSS-bestand te gebruiken, is dit de waarde die de standaard wordt. Zonder deze standaard wordt een lege waarde gebruikt. Dit is een ding ik zie veel!
Thema-instellingen zijn globaal beschikbaar voor ons, wat betekent dat we hun waarde kunnen uitvoeren in al onze sjablonen en lay-outbestanden. Dit omvat onze CSS- en JavaScript-bestanden. Als u naar een instelling wilt verwijzen, in dit geval onze achtergrondkleur, gebruiken we de volgende syntaxis:
settings.bg_color
Merk op dat we de gebruiken ID kaart
van de invoer om de waarde ervan te verwijderen. Om deze reden moet de id van elke invoer uniek zijn.
Om thema-instellingen in ons CSS-bestand te gebruiken, moeten we toevoegen .vloeistof
naar ons CSS-bestand. Als ons bestand wordt gebeld screen.css
we veranderen het gewoon in screen.css.liquid
.
Zodra we dat hebben gedaan, kunnen we het volgende doen in ons CSS-bestand:
body achtergrond: settings.bg_color;
Wanneer Shopify ons CSS-bestand serveert, zal het onze Liquid-uitvoerlabels vervangen door de waarde die is opgegeven in de thema-instellingen in de Shopify-beheerder. Hopelijk benadrukt dit voorbeeld de noodzaak om de waarde in gebreke te laten!
Naast het invoeren van tekst en numerieke waarden in thema-instellingen kunt u bestanden uploaden, booleaanse waarden opnemen met selectievakjes en keuzelijsten aanbieden om een waarde uit een lijst te kiezen.
Het bovenstaande voorbeeld is afkomstig van de 8 Faces-website waar ik in 2013 aan heb gewerkt. We gebruiken deze instelling om logica op de startpagina te beheren. Dit gaat als volgt:
% if settings.show_hero == true% [Relevant hero banner code snippet] % endif%
Het toevoegen van bestanden is iets gecompliceerder, dus laten we er snel naar kijken. De opmaak is echter redelijk eenvoudig:
Er zijn een paar dingen om hier op te merken, ten eerste het naamattribuut dat in ons voorbeeld is home-page-hero.jpg
. Ongeacht de naam van het bestand dat u uploadt, wordt het hernoemd naar home-page-hero.jpg
.
Het tweede ding dat de moeite waard is om te weten, is de verlenging, in ons geval .jpg
. Ongeacht het bestandstype dat u uploadt, probeert Shopify het naar het opgegeven type te converteren. Als dit niet het geval is, wordt er een fout gemeld. Ten slotte worden, in tegenstelling tot productafbeeldingen, bestandsuploads altijd opgeslagen in de activamap van het thema.
Dit is hoe we onze startpagina-heldafbeelding in onze sjabloon kunnen weergeven:
Hier gebruiken we de ASSET_URL
filter om het volledige pad naar de afbeelding op de Shopify CDN toe te voegen. Als u niet vertrouwd bent met dit filter, kunt u er meer over lezen in deel twee van deze serie.
Ik raad ten zeerste aan om een gratis thema of twee te downloaden van het themagebied Shopify en de sjabloon voor thema-instellingen te ontleden, omdat ze een geweldige bouwsteen zijn voor je eigen thema-ontwikkeling.
Hoewel het redelijk is om te zeggen dat alles wat u echt moet doen om thema's te ontwikkelen, een teksteditor en een Shopify-partneraccount is, zijn er een paar goodies die de moeite waard zijn om te overwegen.
Als je de serie hebt gevolgd, heb je je wellicht aangemeld voor een gratis Shopify-partneraccount. Eén ding dat ik altijd aanbeveel, is om de "nep-gateway" op te zetten in je ontwikkelwinkels. U vindt dit op het tabblad Instellingen bij het afrekenen in de Shopify-beheerder. Als u dit inschakelt, kunt u een volledige transactie weergeven en alle gekoppelde e-mailmeldingen genereren die worden gegenereerd. Het is de moeite waard eraan te denken dat u al deze Liquid-technieken ook in uw e-mails voor meldingen uitstekend kunt gebruiken.
Een ander zeer nuttig hulpprogramma is de Shopify Desktop Theme Editor voor Mac. Na installatie synchroniseert het naadloos uw bestandswijzigingen naar uw ontwikkeling, of live, winkel. Als u Mac, Windows of Linux gebruikt, kunt u ook het Shopify-thema Gem-opdrachtregelhulpprogramma installeren om uw lokale bestanden te synchroniseren met uw ontwikkelwinkel.
Met de Shopify Desktop Theme Editor voor Mac kunt u bestanden naadloos synchroniseren tussen uw lokale bestandssysteem en uw winkelTen slotte, als u een TextMate-gebruiker of een fan van SublimeText bent, wilt u mogelijk een kopie van de Liquid-extensie installeren die syntax-highlighting voor Liquid behandelt..
De themawinkel Shopify staat vol met gratis thema's die je kunt downloaden en van kunt leren. Maar als het gaat om het starten van je eigen thema, zou je misschien liever iets meer uitgekleed hebben zoals mijn eigen boilerplate beschikbaar op GitHub.
Ten slotte zijn hier een paar keuzemogelijkheden om u te helpen bij het ontwikkelen van uw Shopify-thema:
Shopify is een geweldig en lonend platform om voor te ontwerpen met de toegevoegde bonus dat Liquid op grote schaal wordt gebruikt in andere tools zoals Mixture en SiteLeaf. We hebben veel over deze drie tutorials behandeld. Ik hoop vooral dat u het interessant en nuttig vindt en dat de hier gepresenteerde ideeën u in staat stellen om geweldige e-commerce-ervaringen voor u en uw klanten op te bouwen.