xsl-list
[Top] [All Lists]

[xsl] XSL help

2008-11-03 12:44:07
Hi Guys,

Fairly new to this forum, so please excuse me for repetition.

Here is the scenario for my problem. I have three types of payment
pages for a checkout process.  There is a progress bar at the top of
the page which indicates what stage the user is at in checkout.

I have an HTML out put which I want as follows:
<ul id="progressNav">
<li class="completed">Your Details</li>
<li class="current">Billing Address</li>
<li>Delivery Address</li>
<li>Check Details</li>
<li class="doubleLine">Payment by<br /> Direct Debit</li>
<li class="doubleLine">Payment by<br /> Credit Card</li>
<li class="doubleLine">Payment by<br /> Invoice</li>
<li>Confirmation</li>
</ul>

The XML file comes through as :
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="InvoiceForm.xslt"?>

<order>
    <!-- for navigation -->
    <paymentMethods>
        <!-- shopping cart had credit card and invoice payments;
credit card payment is already completed -->
        <creditCard />
         <invoice />
    </paymentMethods>
...
</order>

The XSL extract for this area is:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:html="http://www.w3.org/1999/xhtml";>
...
<xsl:template name="checkOutProgressStep">
    <xsl:param name="label"/>
    <xsl:variable name="noOfNodes" select="count(/order/paymentMethods/*)" />

    <xsl:variable name="ddPayment">Direct Debit</xsl:variable>
    <xsl:variable name="ccPayment">Credit Card</xsl:variable>
    <xsl:variable name="iPayment">Invoice</xsl:variable>

    <xsl:choose>
        <xsl:when test="$noOfNodes = '3'"><!-- check for 3 elements -->
            <xsl:choose>
                <xsl:when test="$label = 'directDebit'">
                    <xsl:element name="li">
                        <xsl:attribute name="class">doubleLine
current</xsl:attribute>
                        Payment by <br/><xsl:value-of select="$ddPayment" />
                    </xsl:element>
                    <xsl:element name="li">
                        <xsl:attribute name="class">doubleLine</xsl:attribute>
                        Payment by <br/><xsl:value-of select="$ccPayment" />
                    </xsl:element>
                    <xsl:element name="li">
                        <xsl:attribute name="class">doubleLine</xsl:attribute>
                        Payment by <br/><xsl:value-of select="$iPayment" />
                    </xsl:element>
                </xsl:when>

                <xsl:when test="$label = 'creditCard'">
                    <xsl:element name="li">
                        <xsl:attribute name="class">doubleLine</xsl:attribute>
                        Payment by <br/><xsl:value-of select="$ddPayment" />
                    </xsl:element>
                    <xsl:element name="li">
                        <xsl:attribute name="class">doubleLine
current</xsl:attribute>
                        Payment by <br/><xsl:value-of select="$ccPayment" />
                    </xsl:element>
                    <xsl:element name="li">
                        <xsl:attribute name="class">doubleLine</xsl:attribute>
                        Payment by <br/><xsl:value-of select="$iPayment" />
                    </xsl:element>
                </xsl:when>

                <xsl:when test="$label = 'invoice'">
                    <xsl:element name="li">
                        <xsl:attribute name="class">doubleLine</xsl:attribute>
                        Payment by <br/><xsl:value-of select="$ddPayment" />
                    </xsl:element>
                    <xsl:element name="li">
                        <xsl:attribute name="class">doubleLine</xsl:attribute>
                        Payment by <br/><xsl:value-of select="$ccPayment" />
                    </xsl:element>
                    <xsl:element name="li">
                        <xsl:attribute name="class">doubleLine
current</xsl:attribute>
                        Payment by <br/><xsl:value-of select="$iPayment" />
                    </xsl:element>
                </xsl:when>
            </xsl:choose>
        </xsl:when>
    </xsl:choose>
</xsl:template>
...
</xsl:stylesheet>

The parameter $label is set in the base xslt file which has all the
html output, and is specific to the page type (there are 3 page types,
credit card, direct debit and invoice payments).

So, each page would have label set as
creditCard - for CC payment
directDebit - for DD payment
invoice - for invoice payment.

Within the XML, the paymentMethods area can have one, two or three
nodes available (no more or less).

The problem that I have (besides not knowing that much), is that if
all three payment methods are applicable, then they need to be in the
order:

DD payment
CC payment
I payment

DD payment should always be first, and I payment last.

If the label is set to creditCard (for example), then that indicates
the page is a Credit Card page.  If this is the case, then the class
applied to the relevant list item will be class="doubleLine current".
If there are 3 payment methods for the xml, then DD payment should
have a class set as class="doubleLine completed" and Invoice should be
class="doubleLine".

So not only do I need to determine the number of payment methods
present, but I need to specify a type of order to them, and apply the
relevant class, depending on the page type being viewed.

Any help would be greatly appreciated.

Apologies again if this is somewhat convoluted!

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>
  • [xsl] XSL help, Caroline Umali <=