Wer bereits mit ABASHOP Templates gearbeitet hat weiss, dass die Syntax an manchen Stellen zu Verwirrungen führen kann und gewisse Funktionen anders funktionieren, als erwartet. In diesem Beitrag möchte ich mich deshalb mit einigen Sonderfällen befassen, die einem in der Entwicklung gerne ein Bein stellen.
1. Abfrage von Datumsfeldern
Möchte man eine Variable vom Typ AbaDate
auf vorhandenen Inhalt überprüfen, genügt es nicht eine direkte Abfrage des Feldes durchzuführen. Dieser Code wirft deshalb einen Fehler:
<% if(db.ado.bf_dat1) { %> ... <% } %>
Vielmehr muss das Feld zunächst mit der Funktion toboolean
umgewandelt werden und kann anschliessend überprüft werden.
Der obige Code kann also wiefolgt umgesetzt werden:
<% if(toboolean(db.ado.bf_dat1)) { %> ... <% } %>
Anmerkung: db.ado.bf_dat1
ist ein benutzerdefiniertes Produktfeld vom Typ AbaDate.
2. Benutzerdefinierte Produktfelder
In ABACUS können benutzerdefinierte Produktfelder angelegt werden, über die der Benutzer der ABACUS Software zusätzliche Produktinformationen bereitstellen kann. Diese Felder können in der Software als einfache Inputfelder, aber auch als Selectfelder angezeigt werden.
Leider besitzen die beiden Feldtypen keine einheitliche Ausgabesyntax. Ein Inputfeld kann wiefolgt ausgelesen werden:
<%= texttohtml(db.ado.userfield(1)) %>
Bei einem Selectfeld enthält das userfield hingegen lediglich die ID der gewählten Option. Dieses muss daher so ausgelesen werden:
<%= texttohtml(db.ado.radiouserfielddescr(1,db.ado.userfield(1))) %>
Ist man bei der Ausgabe im Template nicht sicher, um welchen Feldtyp es sich handelt, muss die Abfrage mit einer Fallunterscheidung erfolgen:
<% if(!isempty(db.ado.radiouserfielddescr(1,db.ado.userfield(1)))) { %> <%= texttohtml(db.ado.radiouserfielddescr(1,db.ado.userfield(1))) %> <% } else { %> <%= texttohtml(db.ado.userfield(1)) %> <% } %>
3. Benutzerdefinierte Variablen
Manchmal benötigt man in der Entwicklung eines ABASHOP Templates eigene Variablen, um Werte für die spätere Verwendung zu speichern.
Im Gegensatz zu gängigen Programmiersprachen ist die Deklaration einer Variable in ABASHOP Syntax nicht ohne weiteres möglich. Die gewünschte Variable muss zunächst im Adminbereich des ABASHOP festgelegt werden.
Hierfür loggt man sich in den Adminbereich ein und navigiert hier zum Punkt 223. Benutzer-Variablen.
An dieser Stelle wählt man nun den Gültigkeitsbereich der gewünschten Variable aus. Request steht beispielsweise für einen einmaligen Aufruf einer Seite zur Verfügung und wird beim Aufruf einer anderen Seite wieder zurückgesetzt. Session gilt hingegen während der gesamten Loginsession eines Benutzers, wohingegen Shopvar ähnlich funktioniert, aber unabhängig vom eingeloggten Benutzer ist. Für die meisten Anwendungsfälle ist man mit Request oder Shopvar gut beraten.
Im nächsten Feld wählt man nun noch den Variablentyp und vergibt einen eindeutigen Namen.
Nach der Eingabe klickt man auf Hinzufügen, um die Variable zu speichern. Ab diesem Zeitpunkt kann die Variable im Template wiefolgt verwendet werden.
Wert zuweisen:
<% shopvar.variablenname = "Mein Wert" %>
Wert ausgeben:
<%= shopvar.variablenname %>
4. Kategorien durchlaufen
Um alle Produktkategorien einer Klassierung zu durchlaufen kann in ABASHOP Templates folgende Syntax verwendet werden:
<% if(hierarchy.tree.hasany()) { %> <% while(hierarchy.tree.hasmore()) { %> ID: <%= hierarchy.tree.id %> Name: <%= texttohtml(hierarchy.tree.shorttext(60)) %> URL: <%= hierarchy.tree.link %> Level: <%= hierarchy.tree.level %> <% } %> <% } %>
Wie tief diese Schleife durchlaufen wird kann im Adminbereich des Shops unter 36. Klassierungen im Inputfeld Stufen festgelegt werden. Die Sortierung kann hier ebenfalls beeinflusst werden.
5. Designumstellung per URL
Last but not least ein kleiner Tipp, um im Browser schnell die Ansicht zwischen angepasstem Template und dem Original Template zu wechseln. Das ist besonders hilfreich, um zu sehen, ob eigene Anpassungen die Grundfunktionalität des Shops beeinträchtigen.
Zur Umstellung des Designs kann am Ende der URL der Query Parameter opv übergeben werden. Der Wert 1 entspricht hierbei dem Original Template, der Wert 0 dem benutzerdefinierten Template.
Beispiel:
Die URL https://shop.bals.ch/de/home?opv=1 ruft den Shop mit Original Design auf, die URL https://shop.bals.ch/de/home?opv=0 setzt das Design wieder auf das benutzerdefinierte zurück.
Da die Designumstellung in der Session gespeichert wird, bleibt das gewählte Design beim Navigieren innerhalb des Shops solange erhalten, ohne den Query Parameter erneut einzugeben. Es muss also wieder explizit zurückgesetzt werden.
Ich hoffe dieser Beitrag hilft dem ein oder anderen die Entwicklung von ABASHOP Templates zu erleichtern. Wenn Sie Fragen oder Anregungen zu diesem Thema haben, freuen wir uns über Ihre Kontaktaufnahme.