Skip to main content

Live shopping

Old: CMS & online store

This manual page describes functions that pertain to the old plentymarkets online shop Callisto. For information regarding the online store template Ceres, please refer to the Setting up Ceres page.

With live shopping, one of the items from your range of products will be offered at a discounted price each day during a specified period (e.g. from 9:00am to 6:00pm). Configure live shopping offers in the System » Client » Settings » Live shopping menu.

1. Creating a live shopping offer

Proceed as described below to create a new live shopping offer.

Sales price for live shopping offers

Create a sales price of the type Special offer, add it to an item and save a price. The sales price for your live shopping offers is selected automatically based on the sales price settings.

Creating a live shopping offer:

  1. Go to System » Client » Settings » Live shopping.

  2. Click on a live shopping tab.

  3. Click on the green plus icon.
    → The New live shopping offer window will be displayed.

  4. Carry out the settings as desired. Pay attention to the explanations given in Table 1.

  5. Save the settings.

Table 1. live shopping settings
Setting Explanation

Start

Select a date and a time when the live shopping offer should start.

End

Select a date and a time when the live shopping offer should end.

Item ID

Enter the item’s ID.
Note: The same item cannot be offered in more than one live shopping offer during the same period.

Quantity sold

Setting changes the displayed percentage of items that have been purchased in live shopping already.

Total

Enter maximum quantity that can be sold at the discounted price. Regardless of this entry, there must be enough stock available for those items that are tied to the stock.
If a customer tries to put a larger quantity into their shopping cart, then the quantity will automatically be reduced. As soon as this quantity has been sold, the item will be offered at the normal price again.

Link active

The same period can be configured for more than one live shopping offer. Activate option to display this live shopping offer as soon as a live shopping item that is higher up in the live shopping display and is sold at the same time has sold out.

Price if the remaining quantity is exceeded

At some point, a buyer may try to order more copies of an item than are still available in the live shopping offer. If this happens, then the normal item price will be used for the entire order. Example: There are 7 copies of a live shopping item remaining. A customer puts 8 copies of the live shopping item into their shopping cart. All 8 copies of the item will be sold at the normal sales price.

Advise customers of this fact and make sure that they can always see how many items are still available at a reduced price as part of the live shopping offer.

2. Configuring a live shopping offer

Configure newly created live shopping offers as described below.

Configuring a live shopping offer:

  1. Go to System » Client » Settings » Live shopping.

  2. Click on a live shopping tab.

  3. Click on the Settings tab.

  4. Carry out the settings as desired. Pay attention to the explanations given in Table 2.

  5. Save the settings.

Table 2. settings for live shopping offers
Setting Explanation

Show live shopping

Hide if no offer is active = The template variable Container_ItemViewLiveShopping() will only be displayed if an item currently can be purchased at the discounted price.
Show upcoming offer if no offer is currently active = Template variable will always be filled. If no offer is active, a preview of an upcoming offer is shown. However, the discounted price will only be applied once the live shopping offer starts. Therefore, set the same starting time for offers that should automatically follow each other. Also see Table 1, option Link active.

3. Integrating live shopping into your online store

Now insert the live shopping function into your online store. Insert the following template function and template variable into your online store’s design.

  • {% Container_ItemViewLiveShopping() %}

  • {% $LiveShoppingID = 1 %}
    → The ID determines which live shopping offer is inserted. For example, use ID 1, to insert the offer Live shopping 1.

3.1. Modifying the ItemViewSingleItem view

You can indicate again that the live shopping is a special offer by inserting the following template variables into the ItemViewSingleItem template:

  • $LiveShoppingQuantityRemaining

  • $LiveShoppingPrice

Example code for your ItemViewSingleItem template:

{% if $LiveShoppingQuantityRemaining>0 %} Live shopping SPECIAL OFFER while supplies last! {% endif %}

3.2. Modifying the offer view using template variables

Design the layout for live shopping offers in the CMS » Web design » Layout » ItemView » ItemViewLiveShopping template. The following template variables are available for this purpose:

  • $LiveShoppingContainerId

  • $LiveShoppingQuantityRemaining

  • $LiveShoppingPrice

  • $LiveShoppingPriceOriginal

  • $LiveShoppingPercentRemaining

  • $LiveShoppingPercentSold

  • $LiveShoppingQuantitySold

  • $LiveShoppingStartTime

  • $LiveShoppingEndTime

The following code shows a possible layout for live shopping offers in the ItemViewLiveShopping template:

<div class="ff01_pagenav">

    <h2 id="liveshopping_start_end" >Live shopping</h2>

</div>

<table width="100%" border="0" cellspacing="0" cellpadding="3" class="border marginbottom"><tr><td style="width:40%;">

    <table width="100%" border="0" cellspacing="0" cellpadding="3">

        <tr>

            <td colspan="2" style="padding:10px;"><strong>$Name[1]</strong>

            </td>

        </tr>

        <tr>

            <td rowspan="1" style="padding-left:10px; height:250px" width="60%">$MiddleSizeImage[1]</td>

            <td style="padding-left:10px;" valign="top">

                <table width="200" border="0" cellspacing="0" cellpadding="0">

                    <tr>

                        <td id="clock_clock" width="36">&nbsp;

                        </td>

                        <td style="padding-left:10px">

                            Offer is still active<br /><span  id="ldate" style="font-size:20px; font-weight:bold;"></span>

                        </td>

                    </tr>

                </table><br /><br />

                <div>instead of <span style="text-decoration: line-through;">$LiveShoppingPriceOriginal $Currency</span>

                <div><span class="Price_single_art">now only $LiveShoppingPrice</span> <span class="Price_single_art">$Currency</span></div>

                <div class="small">including VAT</div>

                <div class="small" style="margin-bottom:10px;"><a href="{% Link_ShippingCosts() %}">plus shipping</a></div>

                {% if $Weight > 0 %}

                  <div>Shipping weight: $Weight g

                  </div>

                {% endif %}

                <div>$FormOpenOrder$AttributeSelect

                    <input src="/layout/farbfinal01/images/btn_basket.png" title="Buy" alt="Buy" type="image" style="padding-top:15px" >

      $FormCloseOrder

                </div>

                </div>

            </td>

        </tr>

        <tr>

            <td style="padding-left:10px; width:40%;"><b>Item description:</b><br /><br />$DescriptionShort<br /><br />

                <label onclick="if(document.getElementById('liveshopping_description').style.display=='none'){ document.getElementById('liveshopping_description').style.display='block'; } else {    document.getElementById('liveshopping_description').style.display='none'; }"> <b>more information...</b>

                </label><br />

                <div id="liveshopping_description" style="display:none;">$Description</div><br />

            </td>

            <td style="width:40%; width:40%; padding-left:10px;" valign="top"> $LiveShoppingPercentRemaining % remaining!

                <table width="150px" height="12px" cellspacing="0">

                    <tr>

                        <td style="background-image:url(/images/icons/liveshopping/balken_links.jpg); padding-left:6px; height:7px; width=7px";>

                        </td>

                        <td style="background-image:url(/images/icons/liveshopping/balken_mitte.jpg); height:7px; width=7px;"$LiveShoppingPercentRemaining%>

                      </td>

                <td style="background-image:url(/images/icons/liveshopping/balken_gruen_rechts.jpg); padding-left:4px; height:7px;" width="5"></td>

                <td style="background-image:url(/images/icons/liveshopping/balken_grau.jpg); height:7px;" width="$LiveShoppingPercentSold%"></td>

                <td style="background-image:url(/images/icons/liveshopping/balken_rechts.jpg); padding-left:4px; height:7px;" width="5"></td>

    </tr>

        </table>

      <br />

      <br />

      {% if $LiveShoppingQuantityRemaining<=0 %} <b>Live shopping currently not active or offer quantity sold out!</b><br />

      {% endif %} </td>

  </tr>

</table></td>



    </tr>

</table>





<script language="JavaScript" type="text/javascript">



  function tickLiveShoppingTimer() {



    var currenttime=new Date();



    if(checkIfCurrentTimeIsInPeriod('$LiveShoppingStartTime','$LiveShoppingEndTime')){



      var eventdate = getDateObjectFromUTC("$LiveShoppingEndTime");

      var milliseconds_until_event=Math.floor((eventdate.getTime()-currenttime.getTime()));

      var seconds_until_event=milliseconds_until_event/1000;



      days = Math.floor(seconds_until_event/(60*60*24));

      hours = Math.floor(seconds_until_event/(60*60)) - (days * 24);

      minutes = Math.floor(seconds_until_event/(60)) - (days*24*60+hours*60);

      seconds = seconds_until_event - (days*24*60*60+hours*60*60+minutes*60);



      //add leading zeroes if necessary

      var s_minutes = (minutes < 10) ? '0' + minutes : minutes ;

      seconds = Math.floor(seconds);

      var s_seconds = (seconds < 10) ? '0' + seconds : seconds ;



      if(document.getElementById('ldate') && document.getElementById('clock_clock')){

        document.getElementById('ldate').innerHTML = (days>0?days+"d ":"")+hours+'h '+s_minutes+':'+s_seconds;

        document.getElementById('clock_clock').style.backgroundImage = 'url(/images/icons/liveshopping/clock.jpg)';

      }



      window.setTimeout("tickLiveShoppingTimer()", 1000);



    } else {

      if(document.getElementById('ldate') && document.getElementById('clock_clock')){

        document.getElementById('ldate').innerHTML = '';

        document.getElementById('clock_clock').style.backgroundImage = '';

        window.setTimeout("tickLiveShoppingTimer()", 1000);

      }

    }

  }



  function getLocalDateTimeStringFromUTC(strDateTime) {



    var DateTimeArray = strDateTime.split(" ");



    var DateArray = DateTimeArray[0].split("-");

    var strYear = DateArray[0];

    var strMonth = DateArray[1];

    var strDay = DateArray[2];



    var TimeArray = DateTimeArray[1].split(":");

    var strHour = TimeArray[0];

    var strMinutes = TimeArray[1];

    var strSeconds = TimeArray[2];



    var eventtime = new Date();

    eventtime.setUTCSeconds(strSeconds);

    eventtime.setUTCMinutes(strMinutes);

    eventtime.setUTCHours(strHour);

    eventtime.setUTCDate(strDay);

    eventtime.setUTCMonth(strMonth-1);

    eventtime.setUTCFullYear(strYear);



    var strDateLocal = ((eventtime.getDate()<10)?'0'+eventtime.getDate():eventtime.getDate())  +"."+  ((eventtime.getMonth()+1<10)?'0'+(eventtime.getMonth()+1):eventtime.getMonth()+1) +"."+ eventtime.getFullYear();

    var strTimeLocal = ((eventtime.getHours() < 10) ? '0' + eventtime.getHours() : eventtime.getHours()) +':'+ ((eventtime.getMinutes() < 10) ? '0' + eventtime.getMinutes() : eventtime.getMinutes());

    return strDateLocal+" "+strTimeLocal;

    //return eventtime.toLocaleString(); //always uses long date format

  }



  function getDateObjectFromUTC(strDateTime) {



    var DateTimeArray = strDateTime.split(" ");



    var DateArray = DateTimeArray[0].split("-");

    var strYear = DateArray[0];

    var strMonth = DateArray[1];

    var strDay = DateArray[2];



    var TimeArray = DateTimeArray[1].split(":");

    var strHour = TimeArray[0];

    var strMinutes = TimeArray[1];

    var strSeconds = TimeArray[2];



    var eventtime = new Date();

    eventtime.setUTCSeconds(strSeconds);

    eventtime.setUTCMinutes(strMinutes);

    eventtime.setUTCHours(strHour);

    eventtime.setUTCDate(strDay);

    eventtime.setUTCMonth(strMonth-1);

    eventtime.setUTCFullYear(strYear);



    return eventtime;

  }



  function checkIfCurrentTimeIsInPeriod(strStartDateTime, strEndDateTime){



    var StartDateTimeArray = strStartDateTime.split(" ");



    var StartDateArray = StartDateTimeArray[0].split("-");

    var strYear = StartDateArray[0];

    var strMonth = StartDateArray[1];

    var strDay = StartDateArray[2];



    var StartTimeArray = StartDateTimeArray[1].split(":");

    var strHour = StartTimeArray[0];

    var strMinutes = StartTimeArray[1];

    var strSeconds = StartTimeArray[2];



    var starttime = new Date();

    starttime.setUTCSeconds(strSeconds);

    starttime.setUTCMinutes(strMinutes);

    starttime.setUTCHours(strHour);

    starttime.setUTCDate(strDay);

    starttime.setUTCMonth(strMonth-1);

    starttime.setUTCFullYear(strYear);



    var EndDateTimeArray = strEndDateTime.split(" ");



    var EndDateArray = EndDateTimeArray[0].split("-");

    var strYear = EndDateArray[0];

    var strMonth = EndDateArray[1];

    var strDay = EndDateArray[2];



    var EndTimeArray = EndDateTimeArray[1].split(":");

    var strHour = EndTimeArray[0];

    var strMinutes = EndTimeArray[1];

    var strSeconds = EndTimeArray[2];



    var endtime = new Date();

    endtime.setUTCSeconds(strSeconds);

    endtime.setUTCMinutes(strMinutes);

    endtime.setUTCHours(strHour);

    endtime.setUTCDate(strDay);

    endtime.setUTCMonth(strMonth-1);

    endtime.setUTCFullYear(strYear);



    var currenttime=new Date();



    var startDateSeconds = Date.UTC(starttime.getFullYear(), starttime.getMonth() , starttime.getDate(), starttime.getHours(), starttime.getMinutes(), starttime.getSeconds());

    var endDateSeconds = Date.UTC(endtime.getFullYear(), endtime.getMonth() , endtime.getDate(), endtime.getHours(), endtime.getMinutes(), endtime.getSeconds());

    var currentDateSeconds = Date.UTC(currenttime.getFullYear(), currenttime.getMonth() , currenttime.getDate(), currenttime.getHours(), currenttime.getMinutes(), currenttime.getSeconds());



    if(currentDateSeconds>=startDateSeconds && currentDateSeconds<endDateSeconds){

      return true;

    } else {

      return false;

    }

  }



  document.getElementById('liveshopping_von_bis').innerHTML='Live shopping offer '+getLocalDateTimeStringFromUTC('$LiveShoppingStartTime')+' to '+getLocalDateTimeStringFromUTC('$LiveShoppingEndTime');

  tickLiveShoppingTimer();





    </script>

4. Publishing live shopping offers

Live shopping offers can also be presented on external platforms such as the German site liveshopping-aktuell.de. Register with the provider and save the offer’s URL as follows:

  • Offer 1: your_domain/plenty/api/liveshopping_xml_1.php

  • Offer 2: your_domain/plenty/api/liveshopping_xml_2.php

In these examples, the items for the first and second live shopping offer are exported.

Use the ID to specify which live shopping offer should be exported. Use the parameter SHIPPING to set specific shipping costs.

Example: ID and SHIPPING parameters

ID for live shopping offer 1: "your_domain/plenty/api/liveshopping_xml_1.php?ID=1"
ID for live shopping offer 3 and code for 3.90 shipping costs: "your_domain/plenty/api/liveshopping_xml_2.php?ID=3&SHIPPING=3.90"

Only the preview text (short_description) will be exported as the item description.

Export condition

Live shopping offers will only be exported if the item is linked to a category.

5. Posting information about live shopping offers automatically

Use the procedure manager to publish information about your live shopping offers on Twitter and Facebook every day. To do so, set up procedures. For further information about setting up your Twitter account in plentymarkets, refer to the Twitter page of the manual.

Setting up a procedure:

  1. Go to System » Item » Procedures.

  2. Click on the New procedure tab.

  3. Select the*Tweet live shopping offers* procedure.

  4. Enter a name.

  5. Specify a time at which the procedure is to be carried out.

  6. Place a check mark next to the option Active.

  7. Click on the Filter tab.

  8. Select the client (store).

  9. Select which category page the template variable for the live shopping offer was inserted in.

  10. Select the Twitter account that is to be used for the procedure.

  11. Click on the Procedure tab.

  12. Enter a message for the procedure.

  13. Save the settings.
    → The procedure will be set up and displayed in the Procedures tab.

In order to post live shopping offers on Facebook, set up a second procedure Post live shopping on Facebook in the same way and link the procedure to your Facebook account.

Facebook-Berechtigungen

To ensure that the linking of your Facebook account is functioning properly, you have to activate the two permissions manage_pages and publish_pages.

6. FAQs

6.1. Active live shopping offer

When is live shopping active for an item?

The live shopping for an item is active when the current time is within the previously specified time frame and when there is still a sufficient amount of stock available for items that are tied to the stock.=== Selling attribute items

I sell item variations. Can the selection of attributes be built into the live shopping offer?

Yes, the selection of attributes can be built into the live shopping offer. Use the same template variables as for displaying single items. These include $AttributeSelect and $AttributeSelectWithoutAttributeName. Simply insert one of these two template variables into your ItemViewLiveShopping template.=== Inserting a link to live shopping offer

I would like to create a link from the homepage to the page with the live shopping offer. How do I display this link only while a live shopping offer is active?

To do so, use the template function {% if Container_ItemViewLiveShopping() %} LINK {% endif %}.

To top