Prerequisites

  • You have created Products in the Admin

Getting Started

This Tutorial will show you how to output information about a Product on its automatically-generated Detail Page.

It will cover how to:

  • Find where Product layouts are stored on Code Editor
  • Develop a wrapper.liquid file
  • Include an item.liquid file
  • Add functionality for a User to add the Product to Cart

File Structure

In SITE MANAGER/Code Editor, the folder structure for eCommerce layouts is as below:

layouts
  modules
    module_14
      product
        name_of_my_layout
          list
            wrapper.liquid
            item.liquid
          detail
            wrapper.liquid
            item.liquid
      product_attributes
        my_attribute_layout.liquid

Creating a new set of Product Layouts

To create a new set of Product layouts- create your folder at the level of "name_of_my_layout". Inside that, the folders and files should be created as shown above.

Detail Layout Development

As with list views, the detail folder inside your new layout folder should contain a wrapper.liquid and an item.liquid file. Refer to the folder structure at top of the document for reference. You also have the option of creating an attribute layout which can be included inside your item.liquid file to show Product Variations.

wrapper.liquid

wrapper.liquid -- detail view example

<section class="large detail-view ecommerce">
  <div class="container">
    <div class="row">
      {%- include 'modules/siteglide_ecommerce/ecommerce/get/get_products', item_layout: 'item' -%}
    </div>
  </div>
</section>

This is the file for the main section code e.g. a section title or padding. You will need to use the following liquid to include your item.liquid file inside the wrapper and give it access to information about the Product:

{%- include 'modules/siteglide_ecommerce/ecommerce/get/get_products', item_layout: 'item' -%}

item.liquid

item.liquid -- detail view example

<div class="col-lg-6"> <img src="{{this['Image'] | asset_url}}" class="img-fluid"></div>
<div class="col-lg-5 offset-lg-1">
  <div>
    <h2 class="product-title">{{this['name']}}</h2>
    <p class="product-price" data-price-control="{{this.price.price_charge}}" data-currency-control="{{this.price.currency_symbol}}"></p>
    <div class="row">
      <div class="col-md-4">
        <div class="form-group">
          <label>Quantity</label>
          <input type="number" min="1" value="1" class="form-control" data-quantity-control="">
        </div>
      </div>
    </div>
  </div>
  <hr class="mt-4 mb-4">
  {% if this['Description'] %} <h4>Product Description</h4> {{this['Description']}} {% endif %}
  <hr class="mt-4 mb-4">
  <div class="row product-detail-buttons">
    <div class="col-12 col-md-6"> {% include 'ecommerce/cart_add' -%} </div>
    <div class="col-12 col-md-6">
      <a class="btn btn-primary" href="/cart">View my Cart</a>
    </div>
  </div>
</div>

Unlike the List View, the code in the item.liquid file in the Detail folder will only be displayed once instead of looped. Inside the item.liquid file, you'll have access to the "this" object, which contains the fields you'll need. See reference for available fields or output {{this | json}} in the item.liquid file to see the exact data available to you.

Add to Cart

To create a button to add the current Product to the Cart use the following liquid:

Including the item.liquid file inside the detail wrapper.liquid file

{% include 'ecommerce/cart_add' -%}

and the following JavaScript which makes sure the correct data is ready when the "Add Cart Button" is pressed:

Quantity to Add to Cart


In order to use the "Add to Cart" Button, you'll also need to have an input element where Users can select the quantity they'd like to add. Make sure it has the correct data-attribute.

<label for="quantity">Quantity</label>
<input type="number" min="1" value="1" data-quantity-control id="quantity" />


Keeping the Price Up to Date

Your code which displays price is also important in the process which updates the price; the correct data-attributes must be added.

<p class="product-price" data-price-control="{{this.price.price_charge}}" data-currency-control="{{this.price.currency_symbol}}"></p>

Price will update when the User interacts with settings like Attributes, but you will also want to update the price on page load with JavaScript:

document.addEventListener('DOMContentLoaded', function(){
  s_e_update_price();
});

Related Docs and Reference

See the Product Layout Reference Doc for fields you can use throughout your Product Layouts.

Did this answer your question?