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>