C#/VB.NET Code:
<?xml version="1.0" standalone="yes" ?>
<package version="2.1" displayname="Featured Products" debug="false" includeentityhelper="true">
<!--
<query name="Products" rowElementName="Product">
<sql>
<![CDATA[
exec dbo.aspdnsf_GetProducts
@categoryID = 0,
@sectionID = 0,
@manufacturerID = 0,
@distributorID = 0,
@genreID = 0,
@vectorID = 1,
@localeName = @locale,
@CustomerLevelID = @CustLevelID,
@affiliateID = @AffID,
@ProductTypeID = @ProdTypeID,
@ViewType = 1,
@pagenum = 1,
@pagesize = null,
@StatsFirst = 0,
@publishedonly = 1,
@ExcludePacks = 0,
@ExcludeKits = 0,
@ExcludeSysProds = 0,
@InventoryFilter = @InvFilter,
@sortEntityName = @entityname
]]>
</sql>
<queryparam paramname="@locale" paramtype="runtime" requestparamname="LocaleSetting" sqlDataType="varchar" defvalue="en-US" validationpattern="" />
<queryparam paramname="@CustLevelID" paramtype="runtime" requestparamname="CustomerLevelID" sqlDataType="int" defvalue="0" validationpattern="" />
<queryparam paramname="@AffID" paramtype="runtime" requestparamname="AffiliateID" sqlDataType="int" defvalue="0" validationpattern="" />
<queryparam paramname="@ProdTypeID" paramtype="runtime" requestparamname="ProductTypeFilterID" sqlDataType="int" defvalue="1" validationpattern="" />
<queryparam paramname="@pgnum" paramtype="request" requestparamname="pagenum" sqlDataType="int" defvalue="1" validationpattern="" />
<queryparam paramname="@InvFilter" paramtype="appconfig" requestparamname="HideProductsWithLessThanThisInventoryLevel" sqlDataType="int" defvalue="0" validationpattern="" />
<queryparam paramname="@entityname" paramtype="runtime" requestparamname="EntityName" sqlDataType="varchar" defvalue="" validationpattern="" />
</query>
-->
<query name="Products" rowElementName="Product">
<sql>
<![CDATA[
exec dbo.FCP_GetProducts
@categoryID = @CatID,
@sectionID = @SecID,
@manufacturerID = @ManID,
@distributorID = @DistID,
@genreID = @GenreID,
@vectorID = @VectorID,
@localeName = @locale,
@CustomerLevelID = @CustLevelID,
@affiliateID = @AffID,
@ProductTypeID = @ProdTypeID,
@ViewType = 1,
@pagenum = @pgnum,
@pagesize = null,
@StatsFirst = 0,
@publishedonly = 1,
@ExcludePacks = 0,
@ExcludeKits = 0,
@ExcludeSysProds = 0,
@InventoryFilter = @InvFilter,
@sortEntityName = @entityname
]]>
</sql>
<queryparam paramname="@CatID" paramtype="runtime" requestparamname="CatID" sqlDataType="int" defvalue="0" validationpattern="" />
<queryparam paramname="@SecID" paramtype="runtime" requestparamname="SecID" sqlDataType="int" defvalue="0" validationpattern="" />
<queryparam paramname="@ManID" paramtype="runtime" requestparamname="ManID" sqlDataType="int" defvalue="0" validationpattern="" />
<queryparam paramname="@DistID" paramtype="runtime" requestparamname="DistID" sqlDataType="int" defvalue="0" validationpattern="" />
<queryparam paramname="@GenreID" paramtype="runtime" requestparamname="GenreID" sqlDataType="int" defvalue="0" validationpattern="" />
<queryparam paramname="@VectorID" paramtype="runtime" requestparamname="VectorID" sqlDataType="int" defvalue="1" validationpattern="" />
<queryparam paramname="@locale" paramtype="runtime" requestparamname="LocaleSetting" sqlDataType="varchar" defvalue="en-US" validationpattern="" />
<queryparam paramname="@CustLevelID" paramtype="runtime" requestparamname="CustomerLevelID" sqlDataType="int" defvalue="0" validationpattern="" />
<queryparam paramname="@AffID" paramtype="runtime" requestparamname="AffiliateID" sqlDataType="int" defvalue="0" validationpattern="" />
<queryparam paramname="@ProdTypeID" paramtype="runtime" requestparamname="ProductTypeFilterID" sqlDataType="int" defvalue="1" validationpattern="" />
<queryparam paramname="@pgnum" paramtype="request" requestparamname="pagenum" sqlDataType="int" defvalue="1" validationpattern="" />
<queryparam paramname="@InvFilter" paramtype="appconfig" requestparamname="HideProductsWithLessThanThisInventoryLevel" sqlDataType="int" defvalue="0" validationpattern="" />
<queryparam paramname="@entityname" paramtype="runtime" requestparamname="EntityName" sqlDataType="varchar" defvalue="vector" validationpattern="" />
</query>
<PackageTransform>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:aspdnsf="urn:aspdnsf" exclude-result-prefixes="aspdnsf">
<xsl:output method="html" omit-xml-declaration="yes" />
<xsl:template match="/">
<xsl:apply-templates select="root/Products/Product" />
</xsl:template>
<xsl:template match="/root/Products/Product">
<xsl:param name="pName" select="aspdnsf:GetMLValue(Name)"></xsl:param>
<xsl:param name="pImage" select="aspdnsf:LookupImage(ProductID, 'product', 'icon', 1)"></xsl:param>
<xsl:variable name="ReplaceIcon" select="'/icon/'" />
<xsl:variable name="ReplacePromoMedium" select="'/promo_medium/'" />
<xsl:variable name="Intermediary" select="concat(substring-before($pImage, $ReplaceIcon), $ReplacePromoMedium, substring-after($pImage, $ReplaceIcon))" />
<xsl:variable name="breakOn" select="'.png'"/>
<xsl:variable name="replaceWith" select="'.gif'"/>
<li>
<center>
<a class="bscroll" href="{aspdnsf:ProductLink(ProductID, $pName, 0, 0)}">
<xsl:value-of select="concat(substring-before($Intermediary,$breakOn),$replaceWith, substring-after($Intermediary,$breakOn))" disable-output-escaping="yes" />
</a><br />
<span class="scrollTitle">
<a class="bscroll" href="{aspdnsf:ProductLink(ProductID, $pName, 0, 0)}">
<xsl:value-of select="$pName" disable-output-escaping="yes" />
</a>
</span><br />
<div class="moreInfo">
<a class="bscroll" href="{aspdnsf:ProductLink(ProductID, $pName, 0, 0)}">
<img height="21" border="0" width="63" src="/skins/Skin_1/images/more_info_button.gif"/>
</a></div>
</center>
</li>
</xsl:template>
</xsl:stylesheet>
</PackageTransform>
</package>
So the hometemplate.ascx acts as a wrapper and the XMLpackage builds the <li> items and styles them the way we want. We can then feature products by simply placing them in this vector category and use the native sorting functions built into ASPDNSF to determine where on the carousel we want our products.