SmartSite Implementation Guide
Your marketing website powered by printIQ
Contents
1 | Introduction: What is SmartSite | |
2 | Why use SmartSite | |
3 | Getting started | |
4 | Under the hood | |
5 | Authentication and security | |
6 | Styling | |
7 | Widget samples | |
8 | Widget configuration options | |
9 | Technical instructions for adding the widget to your website |
SmartSite is a printIQ connectivity module that transforms your marketing website into an online sales channel that
is powered by printIQ. It allows you to retain or create your own marketing focused website, using your preferred
platform, and to that we add the smarts of printIQ to deliver product specifications and pricing in a fully functional e-commerce solution.
Best of all, you’re in control of the content and the marketing strategy as it’s your own website. SmartSite simply comes in to deliver the complicated parts of e-commerce.
Traditionally, when implementing an e-commerce solution, you had two options; use a standalone web2print solution
that lacked the marketing focus, or you could go with a shopping cart that couldn’t handle the complexity of print products.
In creating SmartSite, we set about to bridge the gap by delivering a fully integrated solution with three fundamental concepts in mind:
SmartSite is targeted at web designers to add to any website without the need to understand the technical aspects of API integration
and many of the complexities associated with print products.
SmartSite is easy to setup, all product offerings and pricing is configured within printIQ after which you simply point your website at the products you wish to offer.
STEP 1 | Review your website and plan how you want to present the SmartSite widgets |
STEP 2 | Setup your Simplified Products within printIQ and decide which you want to publish on your website |
STEP 3 | Request IQ to issue your authentication token and whitelist your URL |
STEP 4 | Add the widget code to your web pages |
STEP 5 | Update the widget configuration according to your preferences |
Step 6 | Style the widget using CSS on your website |
The SmartSite widget is based on taking the smarts of printIQ simplified quoting and making it available on your website or within an external application.
The widget provides the smarts for defining a product and uses the pricing engine from within printIQ.
SmartSite is a Javascript based component that works by simply copying the supplied script onto your web page.
The plug-in has self-contained APIs that take care of the printIQ connectivity and authentication.
From there, it pulls product data and pricing from printIQ in real time using standard printIQ web service calls.
The widget follows standard printIQ protocols so that as you use the widget, an order is created within printIQ for
each product added to the shopping cart. Once the user is ready to checkout, they re-direct to printIQ Checkout screen.
Below is an explanation of some of the key terms used within SmartSite and how printIQ drives this function:
SmartSite concept | printIQ functionality that drives this |
Shopping cart | The SmartSite module uses the standard printIQ Shopping Cart which is in essence an order / quote within printIQ. Multiple products can be added to the cart, be it simplified products or products from the IQstore. Items remain in the cart until checkout is complete. |
Non-authenticated user access | The widget itself is driven by a user account within printIQ. The default user account is “widget”, but you can set this according to your preference. The user account drives access to products and pricing in the same way that any user account does within printIQ. |
Authenticated user access | You have the choice of displaying a login option on your website. Existing users can login at this point after which the pricing generated from the widget will be based on their customer account. |
Non-authenticated account access | Prior to a customer logging in, a guest account is used as an order must reside on a customer account within printIQ. The default account is “Widget” but again, it can be any customer account within printIQ. Once the user proceeds to Checkout, we move the order from the “Widget” account to the account created during the registration process so that every online order is placed on a personal account for that customer. |
printIQ Simplified Products | The main function delivered by the widget is the Simplified Product layer from within printIQ. This is our unique, child-proof layer that sits over the quoting engine where you cannot quote something that your factory is not able to produce. A prerequisite to using SmartSite is to have your products already setup. Within printIQ, products are configured and linked to a Product category. Within the widget setup, you simply point the widget at a product category. This allows you to be selective as to what you offer online. It is important to note that the widget supports the majority of Simplified Quoting functionality, however there are some aspects that are not available. This includes concepts such as Quote Questions, Parameters, component selection, quote approval etc. Where appropriate, these options are displayed on the Checkout page within printIQ and simply not available on the widget itself. |
IQstore products | IQstore products are also available within the widget. They present slightly differently as there are no specifications, you have thumbnails of the products to choose from and you only need to set the quantity required. The prerequisite is that you have setup your IQstore with products and they are available for ordering within printIQ. |
Pricing | Pricing is driven from printIQ and follows standard pricing principles. Pricing is based on the customer account that drives the widget which in turn is controlled by a printIQ Pricelist. Various options are available when it comes to pricing, it can be preset pricing or time/material based. |
Web registration | Prior to checkout, the registration process takes place where the user creates a user login and customer account. The customer account always has credit card / pre-pay terms so that an order is only confirmed once it is paid. The layout of the registration form is controlled within printIQ and you may also have a standalone link to this function without first accessing the ordering widget. The idea is that you can add a Register link to your site without making an order. |
Checkout | Once a user has added all products to the order, they choose the checkout option which takes them through to the printIQ checkout page. This takes place regardless of whether the customer is new or existing. Note, Checkout is not completed on the website. |
First of all, there are minimal setup requirements for SmartSite, especially when it comes to authentication and security.
That being said, the widget is secure and relies on core printIQ functionality for authentication and security.
SSL encryption | printIQ functions by default using the printIQ.com SSL certificate for encryption. As you are transitioning from your website to printIQ, we recommend that you run your ordering pages on the website using HTTPS. This will avoid the problem of moving from one site to another and having un-secured content warnings. |
Whitelisted URL | While you may add the widget code to any site, to operate, it first needs IQ to whitelist the URLs that will access the printIQ widget. Any URLs outside of this list will be denied access. |
Secured API | All printIQ APIs are secured with a user name, password and authentication token required to be held securely on your website. |
Non-authenticated users | Non-authenticated users have guest access to the widget via the “widget” user account within printIQ. No password access is available / stored on the front end. |
Authenticated users | Authenticated users’ login on the website with a self-contained API call to the AuthenticateUser API within printIQ. The API returns a token that allows access for a period of time. No password data is transferred in the request. |
One of the major advantages of SmartSite is that you are in control of your marketing front-end.
You decide where to place the widget and how it is to be laid out on the page.
Some general concepts for styling are as follows:
General placement, colours and styles | You control the website, so the functionality is only limited by your HTML/CSS skills. While the widget has pre-set styles, you have the option to use in-line styles or CSS within your own website to control how the widget lays out. This includes whether the widget is laid out vertically or horizontally. While you may use Javascript to control the widget, it is not supported by printIQ so take care that it does not conflict with the widget functioning correctly. Where possible, utilise the supported configs and settings outlined below to control the widget behaviour. |
Drop down labels | The labels alongside each drop down are controlled by printIQ Filters where you can update the labels and control the order that they appear in. |
Drop down contents | The content and order of the drop downs are driven from printIQ operations and Simplified Quoting. |
Widget buttons | The Customise page within printIQ allows you to control the button labels, while your website CSS controls what they look like. |
Widget configuration | The javascript placed on your website controls many of the options for layout and functionality. See below. Two common settings are:
|
Below is a list of the configuration settings that are set within the code that you copy onto your web page.
The table outlines each setting and what it controls.
Setting | Description | Value |
Shopping cart | ||
addToCart | addToCart | addToCart |
hideCartIfEmpty | The shopping cart does not show if the cart is empty | True/false |
useCookies | When true, the user’s cart will persist across page refreshes | True/false |
checkoutUsesSimplified | This setting controls the re-direct once they checkout. When true, proceed to checkout screen otherwise the user will re-direct to the ordering screen for that product to finetune options | True/false |
showSignIn | Controls whether the login option is displayed so that existing users may login and retrieve their pricing/options | True/false |
delayAddingProductToCart | Prevents the automatic add product to cart once GetPrice is clicked. When true, the product is added to the cart once the Add to Cart button is clicked | True/false |
showAnotherProductButton | When Cart is active, this button is ‘Add to Cart’. If the cart is NOT active this button becomes ‘Another Product’ | True/false |
Product types | ||
showTreeNodeSelector | Controls if the product (tree node) selector is displayed. When true, the user can select other tree nodes, otherwise, they are fixed to the preset node | True/false |
treeNodeId | The Tree Node ID is the ID number of the product category that you want to display. Obtain it from Admin ==> Factory Capabilities ==> Product Categories and open the relevant node | Tree Node ID or ‘null’ |
isParentTreeNodeSelected | Controls whether the user can navigate to a higher tree node in the hierarchy | True/false |
Filter (Drop down) settings | ||
allFiltersMandatory | Set to true if you want all drop downs completed prior to GetPrice. | True/false |
allFiltersMandatory_ErrorMessage | The message to be displayed when all filters are not completed | String |
clearFilterValuesOnProductChange | Clears the filters once a product has been added to the cart | True/false |
clearSubsequentFiltersOnFilterOpened | When true, subsequent filters will be cleared if you modify a drop down | True/false |
Quantity selectors | ||
showKinds | This expands the quantity selection by enabling the user to specify a number of Kinds/Versions | True/false |
kindsLabel | Specify the label to appear on the Kinds/Versions drop down | string |
showOtherQuantity | Controls if the quantity drop down is restricted to items in the list or if ad hoc quantities can be entered | True/false |
quantitiesBasedOnTreeNode | Controls if the quantity list is sourced from the tree node / product category or if read from the product itself | True/false |
Pricing | ||
showPrice | This setting governs how the widget is to behave. If set to true, the price is presented to the online user. If set to false it prompts the user to either log on or register to printIQ | True/false |
hideGetPriceButtonWhenPriced | Once priced, the setting allows the GetPrice button to be hidden to prevent the user inadvertently adding the product again | True/false |
includeGst | Option to control if sales tax is included within the price presented | True/false |
When setting up the IQ Connect Widget, you need to provide IQ with the name of the domain that you are using to host the widget,
so the Database records can be updated. (e.g. www.YourCoDomain.com)
IQ will provide the HTML code that needs to be embedded into your web pages. Note the widget settings are case sensitive
The Widget code is made up of four parts.
<Head>
There is the <head>
<head>
<title>Widget</title>
<link href="https://yourcompany.printiq.com/bundles/css/cartwidget" rel="stylesheet" type="text/css" />
<script src="https:// yourcompany.printiq.com/bundles/js/cartwidget"></script>
<link href="https:// yourcompany.printiq.com/bundles/css/clientwidget" rel="stylesheet" type="text/css" />
<script src="https:// yourcompany.printiq.com/bundles/js/clientwidget"></script>
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
</head>
This should be embedded into the <head> section of your web page.
There are NO edits required for these lines.
The second part of the Widget code defines the Widgets.
The order of these 2 lines will dictate the order of the Cart and Product as they appear on the Web page.
<div id="myCartWidget" class="piq-cart-widget-container"></div>
<div id="myClientWidget" class="piq-widget-container"></div>
Again, no edits required for these lines
The third part of the Widget code is used to configure the Carts’ behaviour.
code | comments |
window.CartWidget_Config = PrintIQ.CartWidget.Init({ | |
appKey: "ABCDEFGH-1234-IJKL-5678-MNOPQRSTUVWX", | |
appKey from tblAPI_Application for CART widget | |
UserId: "ZYXWVUTS-9876-RQPO-5432-NMLKJIHGFEDC", | |
udUserID from tblUserDetail for WIDGET user | |
container: document.getElementById("myCartWidget"), | |
hideCartIfEmpty: false, | |
when true, hide the cart icon when there are no products | |
useCookies: true, | |
when true, user’s cart will be persisted across page refresh | |
checkoutUsesSimplified: true | |
when true, user will be taken to QuoteDetails page, else they’ll be taken to the |
The first four rows must not be changed, or the Widget will not work.
The only settings to be changed are highlighted above.
When making changes to these settings there are a few rules you must adhere to:
Drop downs and pricing
The final part of the Widget code is where the main Widget behaviour is configured.
code | comments |
container: document.getElementById("myClientWidget"), | |
where to build the widget | |
appKey: "A1B2C3D4-E5F6-G7H8-I9J0-K11L12M13N14", | |
appKey from tblAPI_Application for Client Widget | |
userId: "ZYXWVUTS-9876-RQPO-5432-NMLKJIHGFEDC", | |
udUserID from tblUserDetail for WIDGET user | |
treeNodeId: null, | |
tree node to pre-select | |
showTreeNodeSelector: true, | |
allow user to select different tree nodes (visible yes/no) | |
isParentTreeNodeSelected: false, | |
shortCodes: "", | |
short codes which pre-select various options | |
showSignIn: true, | |
Allows user to login to Widget screen to get their pricing. | |
showPrice: true, | |
user can show price and then proceed to quote; else user will proceed to quote and see price in PIQ | |
includeGst: false, | |
include GST in the price shown to user | |
showKinds: false, | |
prompt user for number of kinds | |
kindsLabel: "Versions", | |
string, sets the label for kinds control | |
showOtherQuantity: true, | |
Allow 'Other' quantity | |
showAnotherProductButton: true, | |
Used when you are not using the Cart. Add to Cart becomes ‘Another Product’ | |
delayAddingProductToCart: true, | |
Prevents the products being added to the Cart automatically | |
allFiltersMandatory: true, | |
allFiltersMandatory_ErrorMessage: 'Please fill out all selectors', | |
clearFilterValuesOnProductChange: false, | |
Whether or not to clear selected values. False allows user to order multiple 'kinds' | |
clearSubsequentFiltersOnFilterOpened: true, | |
when True it resets all the following filters on the Widget | |
quantitiesBasedOnTreeNode: false, | |
Determines whether to use the quantity list or the quantities on the product CSV. | |
hideGetPriceButtonWhenPriced: false | |
Note: The same editing rules specified above apply to these entries.
There is nothing to edit on the 1st 3 lines above.
treeNodeId: - Options for this field are a Tree Node ID or ‘NULL’
The Tree Node ID is the ID number of the product on the Product Category. Obtain it from Admin ==> Factory Capabilities ==> Manage Product Categories and open the relevant node.
The product ID is the number to the left of the product name when the node is opened…
If set to NULL the whole tree is presented to the online user, allowing them to drill-down into the product(s) they wish to access.
When set to a product category ID number, the Widget opens up with this product selected. See related settings isParentTreeNodeSelected and showTreeNodeSelector below.
showTreeNodeSelector will show or hide the product selector. If your web site has separate pages for each product, you may wish to hide the Product Selector altogether.
This setting requires that the treeNodeId setting has a value that points to a simplified product session.
isParentTreeNodeSelected ‘false’ allows the user to navigate away from the product set on the treeNodeId setting above. ‘true’ prevents the user from going higher in the product category.
When treeNodeId is set to null, this setting should be set to false.