Displaying a list of products on a page - Developer Example
See Also: Displaying Subpages - Developer Example
TODO-UC: Explain
TODO-UC: Note the difference between displaying products (items) and sub pages (groups).
##
## UltraCart - Mr Teas Template
## http://www.ultracart.com/
##
## Copyright (c) 2015 BPS Info Solutions Inc.
## License located here:
## http://www.ultracart.com/storefront/license/
##
## Designed by Level 2 Design, LLC http://www.level2d.com/
##
## uc:display-items="true"
## uc:item-multimedia-default-used="true"
## uc:theme-attribute-boolean="Hide Sale Banner"
## uc:theme-attribute-boolean="Hide Out of Stock Banner"
<!-- $theme.attr("Hide Sale Banner", "false") -->
<div class="product-list-images small four-up" data-equalizer>
<ul>
#set($groupItems = $group.getItemsForPage($page))
## $formatHelper.sortByAttribute($groupItems, "sort_order", false)
## $formatHelper.removeItemsWithoutCost($groupItems)
## $formatHelper.removeOutOfStockItems($groupItems)
## Below manually sets the url segment that is used to construct the item path
## #set($groupItems = $formatHelper.getItemsForPage($groupItems, $page, 2))
#foreach($item in $groupItems)
#if($item.getSaleCost())
#set($saleClass = "sale")
#else
#set($saleClass = "")
#end
#if($item.isInventoryTracked())
#if($item.getAvailableQuantity() && $item.getAvailableQuantity() < 1)
#set($stockClass = "out-of-stock")
#else
#set($stockClass = "")
#end
#else
#set($stockClass = "")
#end
<li data-equalizer-watch class="$saleClass #if($theme.attr('Hide Out of Stock Banner') == 'false') $stockClass #end">
<a href="${baseUrl}${item.getPath()}" title="$item.getTitle()" class="product-photo">
<strong>${item.getTitle()}</strong>
<span class="link">View</span>
#if($item.getDefaultMultimedia('Image'))
<img src="$baseThumbnailUrl$item.getDefaultMultimedia('Image').getThumbnail(220, 220)" class="UC-default-item-multimedia" width="220" height="220" alt="$item.getTitle()" />
#else
<img src="$baseThemeUrl$theme.attr('Item No Image Available Image URL')" width="220" height="220" alt="$item.getTitle()" />
#end
#if($item.getSaleCost() && $theme.attr("Hide Sale Banner") == "false")
<sub>
<em>Sale!</em>
</sub>
#end
#if($item.isInventoryTracked() && $theme.attr("Hide Out of Stock Banner") == "false")
#if($item.getAvailableQuantity() && $item.getAvailableQuantity() < 1)
<sub>
<em>Out of stock</em>
</sub>
#end
#end
</a>
<div class="product-info">
<a href="${baseUrl}${item.getPath()}" title="" class="product-title">${item.getTitle()}</a>
#if($item.isReviewable())
#if (!$item.hasApprovedReview())
<div class="review-stars">
No Reviews
## <span class='icon-star-0-4'></span>
## <span class='icon-star-0-4'></span>
## <span class='icon-star-0-4'></span>
## <span class='icon-star-0-4'></span>
## <span class='icon-star-0-4'></span>
</div>
#else
<div class="review-stars">
$item.getReviewOverallAsHtml([
"<span class='icon-star-0-4'></span>",
"<span class='icon-star-1-4'></span>",
"<span class='icon-star-2-4'></span>",
"<span class='icon-star-3-4'></span>",
"<span class='icon-star-4-4'></span>"
])
</div>
#end
#end
<p class="product-description">$formatHelper.excerpt($formatHelper.removeHtml(${item.getExtendedDescriptionNoEscape()}), 130)</p>
#if($item.getSaleCost())
<span class="price"><strike>$item.getRegularCostLocalized()</strike></span>
<span class="price sale">$item.getSaleCostLocalized()</span>
#else
<span class="price">$item.getCostLocalized()</span>
#end
</div>
</li>
#end
</ul>
</div>
, multiple selections available,