Om du vill komma åt data från exempelvis webbplatsen eller sidans objekt i en widget eller i ett klientskript så är detta möjligt. Du kan exempelvis använda värden från sidans objekt om du vill anpassa en rubrik på en widget för merförsäljning, exempelvis så är rubriken "Kunder som köpte Scott Sub 20 köpte även" mer tilltalande för en widget med rekommendationer, än rubriken "Kunder som köpte denna produkt köpte även".
Funktionerna @write()
, @path()
, @link()
och @if()
stöds för att hantera objektfält på servern. Du kan även använda objekten för att exempelvis implementera egna spårnings- och merförsäljningsskript. På sidan Objekt och objektfält för skriptanpassningar finns en listning med alla de objekt och fält som finns tillgängliga i systemet.
Denna artikel består av följande avsnitt:@write()
- Skriva ut objektfält från servern@write()
- Skriva ut värden i listor (arrays)@path()
- Generera dynamiska adresser till objekt och sidor@link()
- Skapa dynamiska länkar till objekt och sidor@write()
, @path()
och @link()
- Formatera värden@if()
- Visa och dölja innehåll på servern baserat på ett objektfält
Använda objektfält på klienten
Skriva ut objektfält från servern
På servern (dvs. i exempelvis widgets) så använder du dig av fältfunktionen @write()
för att hämta och presentera ett värde. Funktionen är definierad enligt:
@write(objekt.fält[:"formatsträng"])
där objekt är namnet på det objekt som du vill komma åt och fält är namnet på det objektfält som du vill presentera på sidan. I formatsträng kan du, om du så önskar, ange ett format för hur värdet skall presenteras (se nedan).
Om du exempelvis vill hämta benämningen på en artikel så skriver du följande:
@write(Article.Title)
Fält kan exempelvis användas i widgeten för HTML och layoutat innehåll, i alla widgetrubriker samt spårningsskript.
Skriva ut värden i listor (arrays)
Vissa fält returnerar en lista med värden som du kan komma åt. Som standard skrivs värdet för ett sådant fält ut som en sammanslagen sträng. För att avdela dessa kan man då exempelvis använda sig av följande syntax:
@write(Article.Images:"{v};")
I de fall du enbart önskar ett specifikt värde så kan du ange index (nollbaserat) för värdet enligt följande:
@write(Article.Images[2])
Indexet kan även anges i formatet "<2" för att bara hämta ut värden som har ett index mindre än 2 eller ">2" för att hämta värden med index större än 2. Om du vill hämta ut värden bakifrån ur arrayen så kan du ange prefixet "-" före indexet. Följande exempel visar hur du kan hämta ut sista och näst sista värdet:
@write(Article.Images[-0]) @write(Article.Images[-1])
För att få reda på antalet värden i listan kan egenskapen Count användas:
@write(Article.Images.Count)
Generera dynamiska adresser till objekt och sidor
Om du vill generera dynamiska adresser till objekt i systemet, såsom varugrupper, varumärken och sidor, så kan du använda funktionen @path()
. På sidan Objekt och objektfält för skriptanpassningar anges vilka objekt som är länkbara (🔗) och vad som är objektets nyckel (🔑).
Adressfunktionen är definierad enligt:
@path(objekt[=nyckel][:"formatsträng"])
där objekt är namnet på det objekt som du vill länka till och nyckel är fältets eventuella nyckel om du inte vill länka till aktuellt objekt (strängnycklar måste inneslutas med cittattecken). I formatsträng kan du, om du så önskar, ange ett format för hur objektets sökväg skall formateras (se stycket om formatering nedan). Specialformatet url
kan vara användbar här om du vill skapa absoluta URL:er.
Skapa dynamiska länkar till objekt och sidor
Om du vill skapa länkar till objekt i systemet, såsom varugrupper, varumärken och sidor, så kan du använda funktionen @link()
på liknande sätt som funktionen @path()
ovan.
Länkfunktionen är definierad enligt:
@link(objekt[=nyckel][:"formatsträng"])
där objekt är namnet på det objekt som du vill länka till och nyckel är fältets eventuella nyckel om du inte vill länka till aktuellt objekt (strängnycklar måste inneslutas med cittattecken). I formatsträng kan du, om du så önskar, ange ett format för hur objektets titel skall formateras (se stycket om formatering nedan).
Om du exempelvis vill länka till aktuellt varumärke så skriver du:
@link(Trademark)
Om du vill länka till ett varumärke som inte är aktivt på sidan, samt formatera titeln i länken, kan du skriva:
@link(Trademark="Adidas":"Visa allt från {v}")
Länkarna som genereras får en CSS-klass enligt formatet objectlink objekttyp
där objekttyp är typen av objekt du länkat till.
Formatera värden
Genom att ange en formatsträng så kan du anpassa hur värdet skrivs ut från funktionerna @write()
, @path()
och @link()
. Formatsträngen kan vara ett specialformat eller ange en eller flera platshållare enligt .NET-standardformat. Nedan följer listningar av de platshållare och specialformat som stöds.
Formatsträngar och platshållare
En formatsträng är en sträng som anger hur värdet skall formateras innan det skrivs ut. Det kan exempelvis användas för att ändra formatet på tecken och siffror eller för att innesluta värdet i HTML-kod. Exempelvis så kan följande formatsträng användas för att innesluta en artikels benämning i en tagg:
@write(Article.Title:"<h1{v}</h1")
Formatsträngar innehåller platshållare (inneslutna med {}) som anger var ett visst värde skall skrivas ut. Platshållaren {v} är standardplatshållaren och används för att skriva ut värdet för ett fält. En platshållare kan också kompletteras med en formatangivelse för att definiera hur värdet skall formateras. Exempelvis så kan följande formatsträng användas för att visa två decimaler för ett värde:
@write(Article.CurrentPriceInclVAT:"Pris: {v:C2}")
Nedan följer en lista på specialplatshållare som stöds:
{v} |
Själva värdet som returneras från fältet. Om värdet är ett objekt kan underegenskaper nås genom syntaxen "v.Property". |
{i} |
Det nollbaserade indexet för värdet i en lista (endast för arrays) |
{c} |
En räknare för värdet i en lista (endast för arrays) |
Specialformat
Följande specialformat stöds av systemet:
Formatnyckel | Beskrivning och exempel |
---|---|
lower |
Värdet görs om till "lower case" (gemener). Exempel: @write(Group.Title:"lower") DVD-spelare - dvd-spelare Mjuka byxor - mjuka byxor |
upper |
Värdet görs om till "upper case" (versaler). Exempel: @write(Group.Title:"upper") DVD-spelare - DVD-SPELARE Mjuka byxor - MJUKA BYXOR |
lower-w-acronyms |
Värdet görs om till "lower case" (gemener), men ord som bara består av versaler ses som akronymer (förkortningar) och påverkas inte. Exempel: @write(Group.Title:"lower") DVD-spelare - DVD-spelare Mjuka byxor - mjuka byxor |
title |
Värdet görs om till "title case" med versaler i början av varje ord, resten gemener. Ord som bara består av versaler ses som akronymer (förkortningar) och påverkas inte. Exempel: @write(Group.Title:"title") DVD-spelare - DVD-Spelare Mjuka byxor - Mjuka Byxor |
MD5 |
Värdet hashas enligt MD5-algoritmen innan det skrivs ut. Exempel: @write(User.Email:"MD5") 84B075ABFA92DDD1427D07A9F3D606FC |
MD5-lower |
Värdet hashas i "lower case" enligt MD5-algoritmen innan det skrivs ut. Exempel: @write(User.Email:"MD5-lower") 84b075abfa92ddd1427d07a9f3d606fc |
type |
Värdets datatyp skrivs ut. Kan exempelvis användas i felsökningssyfte. Exempel 1: @write(Sys.DateTime:"type") DateTime Exempel 2: @write(Article.Title:"type") String |
url |
Värdet formateras som en absolut sökväg enligt aktuell webbplats. Exempel:@path(Trademark:"url") https://www.soffbutiken.se/sv/trademarks/adidas |
värde1=värde2 |
Ersätter alla instanser av värde1 med värde2. Ersättningen är skiftlägeskänslig. Exempel: @write(Group.Title:"byxor=vantar") Mjuka byxor - Mjuka vantar |
Flera olika format kan kombineras genom att avdela dem med ":" (kolon).
Visa och dölja innehåll på servern baserat på ett objektfält
På servern kan du, via "if"-satser visa och dölja innehåll baserat på värdet på ett visst objektfält. Både strängvärden och numeriska värden kan användas för jämförelse i en "if"-sats, och de kan användas på alla ställen där @write()
och övriga funktioner kan användas. Vissa operatorer stöds dock enbart för numeriska värden. Konstruktionen för en "if"-sats ser ser ut som följer:
@if(objekt.fält operator värde)
[innehåll]
[@else]
[innehåll]
@end-if
Om en "else"-sats anges så kommer innehållet i denna att visas om inte kriteriet angivet för "if"-satsen uppfylls. De olika delarna av "if"-satsen definieras enligt:
- objekt
- Namnet på det objekt som du vill hämta ett värde för
- fält
- Det fält på objektet som du vill jämföra värde med
- operator
- Den operator som används för jämförelsen mellan fält och värde. Systemet stödjer följande operatorer:
= Returnerar om fält är detsamma som värde. Kan användas booleska värden, strängar, numeriska värden och datum/tid. Ej skiftlägeskänsligt.
Exempel:
Article.IsOutOfStock = true
Trademark.Title = "Adidas"
Article.QuantityInStock = 37
Sys.DateTime = "2023-01-01"
!= Returnerar om fält inte är detsamma som värde. Kan användas för booleska värden, strängar, numeriska värden och datum/tid. Ej skiftlägeskänsligt.
Exempel:
Article.IsOutOfStock != true
Trademark.Title != "Adidas"
Article.QuantityInStock != 37
Sys.DateTime != "2023-01-01"
> Returnerar om fält är större än värde. Kan enbart användas för numeriska värden och datum/tid.
Exempel:
Article.CurrentPriceInclVAT > 100
Sys.DateTime > "20:00"
< Returnerar om fält är mindre än värde. Kan enbart användas för numeriska värden och datum/tid.
Exempel:
Article.QuantityInStock < 100
Sys.DateTime < "20:00"
>= Returnerar om fält är större eller lika med värde. Kan enbart användas för numeriska värden och datum/tid.
Exempel:
Cart.Quantity >= 1
Sys.DateTime >= "2023-01-01 20:00"
<= Returnerar om fält är mindre eller lika med värde. Kan enbart användas för numeriska värden och datum/tid.
Exempel:
Cart.Quantity <= 1
Sys.DateTime <= "2023-01-01 20:00"
contains
Returnerar om fält innehåller (mönstermatchat och ej skiftlägeskänsligt) alla värde(n), avdelade med semikolon (;). Kan användas för både strängar och arrayer.
Exempel:
Article.Title contains "soffa"
Article.Tags contains "vår"; "sommar"
contains-any
Returnerar om fält innehåller (mönstermatchat och ej skiftlägeskänsligt) minst ett värde(n), avdelade med semikolon (;). Kan användas för både strängar och arrayer.
Exempel:
Article.Title contains-any "soffa"
Article.Tags contains-any "vår"; "sommar"
is-any
Returnerar om fält matchar exakt (är lika med) ett värde(n), avdelade med semikolon (;). Som "lika med"-operatorn (=), men för flera värden. Kan användas för numeriska värden, datum/tid samt strängar/arrayer.
Exempel:
Site.ID is-any 1; 3; 5
Sys.DateTime is-any "2023-01-01"; "2023-02-01"
Article.Tags is-any "vår"; "sommar"
between
Returnerar om fält är mellan värde1 och värde2, avdelade med "..". Kan användas för numeriska värden och datum/tid.
Exempel:
ArticleVariant.QuantityInStock between 100..200
Sys.DateTime between "2023-06-01".."2023-07-31"
Sys.DateTime between "09:00".."17:00"
- värde
- Det värde som fält skall jämföras med via operatorn
- innehåll
- Detta är den text eller annat innehåll som visas beroende på vilket kriterium som uppfylls
Nedan visas ett exempel på hur konstruktionen kan användas för att anpassa texten på en sida beroende på värdet av varukorgen:
@if(Cart.SumInclVAT >= 1000)
<p>Du har kommit upp i fri frakt!</p>
@else
<p>Du måste handla för minst 1000 kr för att få fri frakt</p>
@end-if
Exemplet nedan visar hur texten på artikelsidan kan anpassas beroende på om en artikel märkts med en viss artikeltagg:
@if(Article.Tags contains "presenttips")
<p>Denna produkt passar utmärkt som present!</p>
@end-if
Använda objektfält på klienten
För att kunna komma åt fältobjekt via JavaScript så måste du först tillåta att objekten och dess fält skrivs ut i sidans kod. Detta gör du enligt följande:
- Gå till Kontrollpanelen -> Webbplats -> Allmänt.
- Gå in på fliken Script.
- Kryssa för rutan Aktivera Javascript-objekt på klienten för att aktivera klientobjektet.
När klientobjektet aktiverats enligt ovan kan du komma åt de olika delobjekten via TC (eller den tidigare konventionen Triton.Client). Exempelvis så kan du komma åt artikelns benämning enligt:
var title = TC.Article.Title;
Vissa av objekten (exempelvis varukorgen) är arrayer som du kan loopa i via skript. De objektfält som anses innehålla känslig data kan inte kommas åt via klientskript, och finns inte heller tillgängliga i sidans kod.
Kommentarer
0 kommentarer
Artikeln är stängd för kommentarer.