Rune Grønkjærs Blog
Abonnér på mit feed

Tea Commerce serverside validation

Tea Commerce handler om fedt design og fede JavaScripts. Af den årsag er det let at glemme behovet for serversidevalidering af kundens data. For at kunne gennemføre en ordre skal en bruger gerne have lagt noget i sin kurv, men han skal muligvis også have indtastet nogle bestemte data om sig selv eller den pågældende ordre. I de fleste tilfælde er det rigeligt med almindelig javascript validering, men JavaScript validering kan snydes. Hvis det er vigtigt med korrekte data skal der serverside validering til.

Scenariet for serversidevalidering i Tea Commerce

Helt grundlæggende har jeg tænkt mig, at validere det der oftest er step 2, hvor der skal indtastes kundeoplysninger. Min løsning skal tage sørge for, at tjekke om data er udfyldt korrekt, hvis man er på et step højere end 2.

Der skal også tages højde for sprogversionering af kurven. Det betyder at jeg ikke vil hardcode nogen id’er i min serverside kode. Der skal også tjekkes om der er en ordre og om ordren har tilknyttet ordrelinier. Hvis ikke ordren validerer vil jeg sende folk tilbage til det step, som ikke validerer.

Hvordan man kan lave serversidevalidering i Tea Commerce

Serversidevalidering er ikke standard i Tea Commerce. Til gengæld er det med Tea Commerce’s .NET API let, at lave det selv. Der er uden tvivl masser af måder, at løse problemstillingen på. Jeg har dog valgt, at gøre det med en Umbraco XSLT library extension.

Jeg vil derfor lave en Umbraco XSLT library metode, som kan kaldes fra alle xslt’er. Nærmere bestemt skal den kaldes på de steps der kommer efter step 2, for på den måde at kunne sende kunden tilbage.

Umbraco XSLT library extensionen

Der er ikke meget at sige og jeg vil egentligt mest lade koden og de indlagte kommentarer tale for sig. Dog kan jeg give denne huskeliste med de ting man skal have ordnet før det vil virke. Koden til det hele har jeg sat ind lidt længere nede.
  1. Byg en dll med library extensionen og smid den op i bin mappen
  2. Registrer din XSLT extension i filen /config/xsltExtensions.config
  3. Lav kaldet i dine xslt’er. Husk at den nye extension også skal registreres i selve xslt’en. Nye xslt’er får automatisk din extension sat ind i xsl:stylesheet tag’et. Du kan derfor eventuelt lave en ny og kopiere hele toppen fra den

Fuld XSLT library extension kode

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using TeaCommerce;
using TeaCommerce.Data;

namespace ServersideValidation {
  public class Library {

    public Library() {
      //This has to be here, because of the way umbraco runs xslt extension
    }

    public static string ValidateOrder( int currentStepId, int cartStep2Id ) {
      try {
        //Test to make sure we are not logged in at the back end
        var test = HttpContext.Current.CurrentHandler as umbraco.BasePages.UmbracoEnsuredPage;
        if ( test == null ) {

          //Get the order
          Order order = TeaCommerce.Razor.TeaCommerce.GetOrder();

          //If there is no order we redirect to step 1 of the cart
          if ( order == null || order.OrderLines.Count() == 0 )
            HttpContext.Current.Response.Redirect( umbraco.library.NiceUrl( cartStep2Id ) + "?validate=false", true );

          //If the current step is not step 1 we validate the data on that step
          if ( currentStepId != cartStep2Id ) {
            //Get the values we must validate
            string firstName = order.GetPropertyValue( "firstName" ),
                  lastName = order.GetPropertyValue( "lastName" ),
                  streetAddress = order.GetPropertyValue( "streetAddress" ),
                  zipCode = order.GetPropertyValue( "zipCode" ),
                  city = order.GetPropertyValue( "city" ),
                  email = order.GetPropertyValue( "email" );

            //Simple validation of the values
            if ( string.IsNullOrEmpty( firstName ) ||
                 string.IsNullOrEmpty( lastName ) ||
                 string.IsNullOrEmpty( streetAddress ) ||
                 string.IsNullOrEmpty( zipCode ) ||
                 string.IsNullOrEmpty( city ) ||
                 string.IsNullOrEmpty( email ) ) {
              //Go back to step 1 if validation fails
              HttpContext.Current.Response.Redirect( umbraco.library.NiceUrl( cartStep2Id ) + "?validate=false", true );
            }
          }
        }
      } catch ( Exception ex ) {
        return ex.Message;
      }
      return string.Empty;
    }
  }
}

Registreringen i Umbraco’s /config/xsltExtensions.config fil



  
  

Kaldet i cartStep03.xslt (Og eventuelt andre efterfølgende)

<xsl:template match="/">

<xsl:variable name="step2PageId" select="umbraco.library:GetDictionaryItem('step2PageId')"/>
<xsl:value-of select="ServersideValidation:ValidateOrder($currentPage/@id, $step2PageId)" />

Tea Commerce links

Dette indlæg blev skrevet i .NET, e-commerce, Tea Commerce, umbraco, xslt. Føj permalink til favoritter. Følg alle kommentarer her med RSS feedet for dette indlæg. Skriv en kommentar eller smid et trackback: Trackback URL. | Read this in english English version

Smid en kommentar

Your email is never published nor shared. Required fields are marked *

*
*

Du kan benytte disse HTML tags og attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

English version