1. Nordisk e-handel Manual

2. Starta webbutik - 10 steg

Helpdesk

Helpdesk vägleder dig i systemet.

040-692 50 60 eller helpdesk@nordiskehandel.com

Vanliga symboler

- På varje flik i din webbutiks admin så finns ett frågetecken, längst upp i hörnet på sidan. Om du trycker där så kommer du automatiskt till det aktuella avsnittet i manualen.
- Denna symbol betyder att du kan lägga till ett nytt objekt.
- Denna symbol betyder att du kan kopiera ett objekt.
- Denna symbol betyder att du kan redigera och visa information för ett objekt.
- Radera ett objekt.
- Sortera ett objekt uppåt.
- Sortera ett objekt neråt.
- Statistik och historikinformation.
- Kundikon, normalt länkad till kundkort eller kundlista.
- Orderikon - länkad till ett orderkort.
- Skicka mail.
 - Länkikon för nyhetsbrev.
- Exportera objekt.
- Filartikel.
- Öppna objekt i webbutik.
- Lista varor.
- Denna symbol betyder att du kan bestämma hur och vad som skall visas i översikterna.
 - Skriv ut.
 - Packsedel.

14.5 QUERY

 14.5.1 Använda Query i HTML

<%QUERY QueryName(parameter1=,parameter2=)
PAGE 1 PAGEROWS 10 DO
/*this is a comment*/
/*code here will run before the loop of results from the database query*/
DISPLAY
/*code here will run once for every result from the database query*/
NEXTROW
/*code here will run after loop of results from the database query*/
ENDQUERY%>

FETCH finns också i systemet med är gammal och ska ersättas när det är möjligt. FETCH ska inte användas i nya funktioner.

 

Möjliga parameter

Detta beror helt på hur queryn är gjorde i perl. Beskriver detta i avsnittet för hur man skapar en egen QUERY.

 

Möjliga val mellan DO och DISPLAY

PAGE och PAGEROWS - används ungefär som limit i en sql-fråga. PAGE måste vara större än 0.

PAGE 1 PAGEROWS 10 hämtar de 10 första resultaten. PAGE 2 PAGEROWS 10 hämtar resultat 11-20.

SHOWONCE - koden mellan DISPLAY och NEXTROW kommer att köras 1 gång även om sql-frågan inte returnerar något resultat. Detta är användbart tex om man har ett formulär som används både för att skapa ett nytt objekt och för att redigera ett objekt. Formulärets fällt kommer alltså att visas trots att objektet inte fanns i databasen.

 

Information mellan DO och DISPLAY

Rownum - finns ibland men används inte.

Pagerows - antal rader som visas i detta anrop. Motsvarar PAGEROWS ovan.

Pagenum - vilken "sidan" av resultaten som visas. Motsvarar PAGE ovan.

Numrows - antal rader som hela queryn returnerade.

Numpages - antal sidor som hela queryn returnerade.

Ovanstående information är standard och finns oftast i en query men inte alltid. För egenutvecklade queries kan det finns andra värden också. Skriv DEBUG mellan DO och DISPLAY för att se vilka värden som finns.

 

Information mellan DISPLAY och NEXTROW

Rownum - radnummer på resultatet. Börjar alltid på 1 och ökar sedan för varje iteration.

Pagerows - antal rader som visas i detta anrop. Motsvarar PAGEROWS ovan.

Pagenum - vilken "sidan" av resultaten som visas. Motsvarar PAGE ovan.

Numrows - antal rader som hela queryn returnerade.

Numpages - antal sidor som hela queryn returnerade.

Row_eo - är en variabel som är "even" eller "odd" och växlar för varje resultat. Kan avändas för att sätta en klass på en tr (row even/odd).

Resterande variabler är normalt fälten från resultatet av sql-frågan. För att veta vilka variabler som är tillgängliga måste man lägga in en DEBUG.

Ovanstående information är standard och finns oftast i en query men inte alltid. För egenutvecklade queries kan det finns andra värden också. Skriv DEBUG mellan DISPLAY och NEXTROW för att se vilka värden som finns.

 

Information mellan NEXTROW och ENDQUERY

Rownum - finns ibland men används inte.

Pagerows - antal rader som visas i detta anrop. Motsvarar PAGEROWS ovan.

Pagenum - vilken "sidan" av resultaten som visas. Motsvarar PAGE ovan.

Numrows - antal rader som hela queryn returnerade.

Numpages - antal sidor som hela queryn returnerade.

Row_eo - är en variabel som är "even" eller "odd" och växlar för varje resultat. Kan avändas för att sätta en klass på en tr (row even/odd).

Ovanstående information är standard och finns oftast i en query men inte alltid. För egenutvecklade queries kan det finns andra värden också. Skriv DEBUG mellan DO och DISPLAY för att se vilka värden som finns.

14.5.2 Definition av QUERY i perl

QUERY i plugin för enskild butik

Enkel query utan egen kod

->add_dbdef(
    "MinQuery",
    {
        auth_read => "ANY",
        auth_write => "NONE",
        main_table => "tabellnamn",
        primary => "namn på fältet som är primär nyckel",
        qualifier => ['falt1', 'falt2'],
        order => ?falt3 ASC?,
    }
);

auth_read är obligatorisk. Variabeln anger vilken rättighet som krävs för att få läsa resultatet från query.

NONE - ingen får tillgång till resultatet

ANY - ingen rättighet krävs

ADMIN - endast butiksadmin

CUSTOMER - endast inloggad kund eller registrerad engångskund.

SYSADMIN - endast systemadmin vilket våra kunder aldrig är.

auth_write är obligatorisk. Variabeln anger vilken rättighet som krävs för att man ska få skriva till databasen genom att använda queryn.

main_table - obligatorisk i detta exempel. Anger vilken tabell som ska användas. Om fetch eller en funktion med GET_FETCH används så behövs inte detta fält.

primary - obligatorisk i detta exempel. Anger primärnyckel för tabellen.

qualifier - ej obligatorisk. Fält som man lägger in här kan man använda som inparameter i QUERY när man anropar den från HTML-koden. Tex QUERY querynamn(paramter=1) DO DISPLAY NEXTROW ENDQUERY. Om man har en sql-fråga som innehåller flera tabeller och fältnamnen krockar så ska man skriva faltnamn@tabell tex user_id@Users.

order - ej obligatorisk. Lägg in vilket fält som ska användas för sortering och vilken sorteringsordning (ASC eller DESC).

trailer - ej obligatorisk. Sql-kod som ska läggas sist i sqlfrågan. Tex HAVING falt4=1

fetch - ej obligatorisk. Om denna används så kan man själv ange hela sqlfrågan. Tex ?SELECT * from tabel1 JOIN tabel2 USING(id)?.

lang - ej obligatorisk. Funktioner som har språkstöd i systemet har en språkberoende variabler i en egen tabell tex Page och Page_Lang. För att automatiskt koppla ihop dessa skriver man lang => {mode => "join",} eller lang => {mode => "left",},. Tabellerna kommer då automatiskt slås ihop med JOIN eller LEFT JOIN.

function - ej objligatorisk. Här ange en egen funktion som ska anropas. Antingen tar funktionen över helt eller så kombinerar man den befintliga funktionaliteten i query.

QUERY för hela butiksystemet

GLOBAL_add_dbdef(
    "MinQuery",
    {
        auth_read => "ADMIN",
        auth_write => "NONE",
        primary => "attr_id",
        main_table => "Attribute",
        lang => {mode => "join",},
        function => \&qh_Variant_Attributes_ALL
    }
);

14.5.3 Egen funktion för QUERY

Inparametrar till query funktionen är (gäller ej DO_FETCH):

ACTIVE - innehåller det tillstånd som körs just nu.

- hash_ref med innehållet från den rad som ska processas. Används i BEFORE_ROW annars används den inte.

- innehåller PAGE, PAGEROW och SHOWONCE om dessa används.

- innehåller dbdef

- innehåller inparametrar som är tillagda i QUERY in html tex QUERY myquery(parameter1=1,paramter2=2) ... Varibeln ->{'parameter1'} är i exemplet då 1.

- Queryhandler object.

DO_FETCH har också 6 parametrar men inte samma ordning:

ACTIVE

- observera att har en annan placering

Vissa av funktionerna nedan kan kombineras.

BEFORE_QUERY

Körs innan sql-frågan körs. (denna används troligtvis inte)

AFTER_SELECT

Kod som körs efter SBscript funktionen SELECT Query men innan loopen påbörjas.

BEFORE_ROW

Kod som körs i loopen men innan en rad processas. Om man returnerar ->{'RES_REMOVE'} så kommer raden inte att tas med i resultatet.
Om man returnerar ->{'RES_OK'} så tas raden med. Man kan även påverkar variabler på stacken om man vill.

AFTER_ROW

Körs efter en rad i loopen men innan nästa rad processas.

AFTER_LOOP

Kod som körs efter att sqlfrågan körts. Här kan man lägga in kod som påverkar variablerna efter att sqlfrågan körts.

HAVING

Lägg till extra HAVING villkor.

ORDER

Lägg till extra ORDER BY villkor. Används inte om order redan är definerad i QUERY definitionen.

GET_FETCH

Här är ett exempel på hur man skriver en egen sqlfråga i en funktion. Alla variabler som normalt skapas av en QUERY skapas nu
även om man skapat en funktion. Just detta exempel hade man kunnat göra helt utan en funktion genom att använda fetch och qualifier.

GLOBAL_add_dbdef(
    "MyQUERY",
    {
        auth_read => "ADMIN",
        auth_write => "NONE",
        primary => "user_id",
        main_table => "User",
        function => \&qh_myfunction
    }
);

sub qh_myfunction
    {
    my (ACTIVE, , , , , ) = @_;
    if (ACTIVE == ->{GET_FETCH}) {
        my = get_obj('System');
        my = "SELECT * FROM User ";
        .= " LEFT JOIN UserSettings";
        .= " WHERE user_id=" . ->db_quote(->{"user_id"}) if(->{"user_id"});
    return
    } else {
    return undef; }
} ## end sub qh_myfunction

EXTRA_WHERE

Här är ett exempel på hur man lägger till ett extra where-villkor. Alla variabler som normalt skapas av en QUERY skapas nu
även om man skapat en funktion. Just detta exempel hade man kunnat göra helt utan en funktion genom att använda fetch och qualifier.

GLOBAL_add_dbdef(
    "MyQUERY",
    {
        auth_read => "ADMIN",
        auth_write => "NONE",
        primary => "user_id",
        main_table => "User",
        function => \&qh_myfunction
    }
);

sub qh_myfunction {
    my (ACTIVE, , , , , ) = @_;

    /*lägg ingen kod här eftersom den kommer att köras flera gånger*/

    if (ACTIVE == ->{EXTRA_WHERE}) {
        my = get_obj('System');
        my = '';

        if (get('Data.variable')) {
            .= " AND Table.field = 1";
        }

        return
    } else {
    return undef;
    }
} ## end sub qh_myfunction

RETURN_ARRAY

Returnerar en array precis som det låter. Denna funktion är helt manuell här måste man
själv returnera den information man vill ha tillgång till i HTML-koden.

GLOBAL_add_dbdef(
    'MyQUERY',
    {
        auth_read => "ANY",
        auth_write => "NONE",
        function => \&qh_myfunction
    }
);

sub qh_myfunction {
    my (ACTIVE, , , , , ) = @_;

    if (ACTIVE == ->{RETURN_ARRAY}) {
        my = get_obj('System');
        my
        my %outvar;
        my 1 = 0;
        =
            ->db_query( "SELECT id,name,name2 FROM myTable");
        while (my = ->fetchrow_hashref()) {
            {->{"id"}} =
            1++;
        }
            my @out = values %

        return \@out,{Numrows => 1};
    } else {
        return undef;
    }
} ## end sub qh_myfunction

DO_FETCH

Denna variant ska inte användas längre. Det är bättre att använda RETURN_ARRAY. Om koden skulle kräva mycket minne så kan man använda DO_FETCH istället för RETURN_ARRAY (eller lösa problemet på ett annat sätt).

 

Helpdesk