
Denna insikt var fröet till den programvara som nu finns bakom Svenska Butiker. Den är byggd utifrån följande enkla föresatser:
Med dessa enkla föresatser som bakgrund är sedan systemet uppbyggt i en väl genomtänkt flexibel struktur med en databas och HTML-sidor samt kod som binder dessa samman.
Våning.Namn. Om man nu vill ha tag i en
Pettersson och man inte vet vilken våning han bor på, får man
kontrollera varje våning för sig tills man hittar honom. Detta kan man
göra på två olika sätt, genom att börja på den lägsta våningen och
vandra uppåt, eller genom att börja på den översta och fortsätta
neråt. Om det finns mer än en Pettersson i huset så kommer man att
hitta olika personer beroende på vilken metod man använder. Vi utökar
modellen genom att kunna bygga en ny våning överst i huset för nya
personer att flytta in, samt att kunna ta bort en våning och alla över
denna från huset.
|
Längst ner i stacken finns en rad nivåer som skapas automatiskt av systemet innan HTML- sidan läses in för bearbetning. Ovanpå dessa kommer det att finnas flera nivåer beroende på vilka kommandon som finns i sidan och var i körningen programmet är. När bearbetningen av en sida är klar så skall det inte finnas fler nivåer i stacken än när den startades.
All data som finns i stacken kan läsas men bara data och session under Cart-taggen kan ändras/skapas med SET-kommandot från en webbsida.
Ett speciellt värde (som vi i fortsättningen kallar variabel) i
stacken refereras med $Taggnamn.Namn och om man bara är
intresserad av det senaste namnet skriver man $Namn som då
söker uppifrån i stacken $.Namn gör samma sökning men nerifrån
istället.
Det finns två typer av operationer i språket, det ena är skriv ut och det andra är hämta:
$Shop.ShopName, butiken för dig!</h1>
$Shop.ShopName kommer att bytas ut mot den text som
finns lagrad under ShopName i Shop-taggen på nivå 3 i
stacken. Om vi hade skrivet $Shop.FinnsInte så hade detta
ersatts med tomrum då något sådant namn inte finns i
stacken. <% %>
taggar i HTML koden, om en variabel står innan för <% %>
taggarna skrivs den inte ut, utan den skall då höra till
något kommando.
<p>Kontakta oss <%IF $Shop.FAX THEN%> på fax $Shop.FAX <%ELSE%> med post <%ENDIF%>. </p>Uppmanar besökaren att faxa om
$Shop.FAX finns och har något
innehåll, annars får besökaren skriva brev.
Vissa kommandon t. ex. IF i exemplet ovan gör att ett stycke
HTML-kod visas ingen/en/flera gånger. Detta stycke kallar vi för
ett Block och det kan innehålla HTML-kod, utskrifter och
kommandon. på fax och med post ovan är två exempel på
block.
TEXT
NOCACHE
CALL string
CALL ID( expr_list )
PRINT expr
DEBUG
INCLUDE expr
INCLUDE_QUOTE expr
SELECT query [$var] [string]
QUERY query(parameter=expr,...) [SHOWONCE] [PAGE expr PAGEROWS expr] DO {...} DISPLAY {...} NEXTROW {...} ENDQUERY
DRAW ID( expr_list ) } [$var] [query] DISPLAY {...} [NEXTBLOCK {...}]
ENDDRAW
IF logical THEN {...} [ELSIF logical {...}] [ELSE {...}] ENDIF
SET $var [=] expr
$var = expr
POP var
PICTURE [( expr )]
PICTURE_DATA [( expr )]
QUERY
QUERY Fråga(paramer=expr,...)
[SHOWONCE] [PAGE expr PAGEROWS expr]
DO {Block1}
DISPLAY {Block2}
NEXTROW {Block3}
ENDQUERY
{Block1} exekveras en gång före
frågan. Aktiva variabler: $Pagenum, $Numpages,
$Rownum, $Numrows, $Pagerows.
{Block2} exekveras en gång för varje post som
hittas. Aktiva variabler: $Pagenum, $Numpages,
$Rownum, $Numrows, $Pagerows, Alla variabler
från frågan. {Block3} exekveras en gång efter
frågan. Aktiva variabler: $Pagenum, $Numpages,
$Rownum, $Numrows, $Pagerows
PAGE expr PAGEROWS expr efter frågan.
PAGE är vilken sida som ska visas och PAGEROWS är antal
rader per sida.
Ex.
QUERY Product() PAGE 1 PAGEROWS 10 DO DISPLAY ... NEXTROW ENDQUERY
SHOWONCW efter frågan.
Detta behövs för att kunna ta fram en post och visa den i samma formulär oavsett om posten redan finns eller skall skapas.
Ex.
QUERY Product() SHOWONCE DO DISPLAY ... NEXTROW ENDQUERY
product_id
shop_id, category_id
category_id
shop_id, parent_category_id
$category_id definierat.
shop_id, parent_category_id
product_id
shop_id, category_id
variant_id
shop_id, product_id
$Count.
shop_id, product_id
$Count
$Count.
shop_id, category_id
$Count
$Count.
shop_id
$Count
shop_id
$ID, $shop_id, $category_id,
$Text1, $Img_File, $Img_X,
$Img_Y
shipping_id
shop_id
Shipping
shop_id
payment_id
shop_id
shop_id
Payment
Product, Variant, $variant_id,
$unit
$Data.Search_Text ord separerade med
mellanslag, komma, semikolon etc.
$Data.Search_Method AND eller
OR, blir AND om den ej specificerats.
$Data.Search_Where, default värden
(Product.Name, Product.Descr,
Product.Brand, Variant.TextID, Variant.Size)
Om man specificerar ISBN och sökbegreppet är ett giltigt ISBN
nummer så sker sökning endast i Variant.TextID fältet och då mot
samma ISBN-nummer.
Variant.TextID som måste ge en fullständig matchning för
att träffa. Vid sökning i textfält betraktas versaler och gemena
som samma tecken.
$category_id
$category_id
$Rownum (med aktuellt djup)
$first_page, $last_page - första och sista
sidnummer på alla sidor
$cur_page - Sidnummer på aktuell sida.
$start, $end - Sidnummer på första och sista sidan
som kommer att visas. Denna variabel är aktiv under loop delen:
$n - loopvariabel, går från $start till $end.
$QTY = Antalsgräns för denna kolumn.
$PRICE_EA = Pris/st
$PRICE_PQTY = Pris per priskvantitet. Det går inte att begränsa antalet returnerade rader på ovanstående frågor förutom SEARCH.
IF Expr THEN
Block1
ENDIF
IF Expr THEN
Block1
ELSE
Block2
ENDIF
Ett Expr är ett logiskt uttryck, i sin enklaste form bara en
variabel som är sann om den har ett värde skilt från 0 eller ''(tomma
strängen). Man kan jämföra variabler med varandra och med tal,
strängar och konstanter med följande operatorer:
Det går tyvärr inte att skriva några mer avancerade uttryck, t.ex. matematiska och parenteser och det saknas även AND,OR, NOT funktionalitet, detta kommer att läggas till vad det lider.
En variabel skrivs som $Tagg.Namn eller bara $Namn. Ett
tal skrivs som 5, strängar skrivs inom enkelfnuttar t.ex. 'Potatis'.
Gör att sidan inte cachas hos användaren ( och i framtiden på servern )
<% SET $Rownum 11 %> <% $Rownum = 11 %>
Det finns två olika sätt satt skriva en tilldelning på:
SET $variabel värde
$variabel = värde
$Data.variabel .
SELECT ID [$To_from_Variable] ['Options to include in HTML statement']
Skapar en select-kontroll och väljer aktuellt värde efter den primärnyckel som hittas på stacken.
ID är antingen en vanlig fråga eller en speciell värdemängd. To_From anger att svaret och defaultvärdet skall hamna resp hämtas från denna variabel och inte från tabellens primärnyckel som man oftast gör.
Speciella ID:n för SELCT är:
$parent_category_id är satt visas bara de som är
barn direkt under den gruppen.
Variabler skrivs ut med någon av följande syntax: (allt skrivs in inkl. klammer)
$category_id;sida.html.
" tecken blir
" skall används då man skriver i attributfält i HTML
koden.
Denna funktion används för att anropa någon speciell subrutin i systemet.
POP $Namn
Raderar $Data.Namn, dvs tar bort namnet helt så att det inte
hittas vid sökning. Är mest användbart efter att man skapat/uppdaterat
en post och man sedan vill visa alla poster på resultatsidan.
Webbutik, onlinemanual