Miva - SearchSpring Experiment
<mvt:comment>
| Utility/Helper Variables
</mvt:comment>
<mvt:assign name="g.tab" value="asciichar(9)"/>
<mvt:assign name="g.newline" value="asciichar(10)"/>
<mvt:assign name="g.Module_File_Transients" value="g.Module_Root $ '/modules/util/transients.mvc'" />
<mvt:assign name="l.settings:searchspring:profiling:start" value="s.dyn_time_t * 1000000 + s.dyn_tm_usec" />
<mvt:assign name="l.settings:searchspring:transient_cache_duration" value="60*2" />
<mvt:comment>
| SearchSpring API Variables
</mvt:comment>
<mvt:assign name="l.settings:searchspring:request:url" value="'https://api.searchspring.net/api/search/search.json'" />
<mvt:assign name="l.settings:searchspring:request:fields:q" value="g.q" />
<mvt:assign name="l.settings:searchspring:request:fields:websiteKey" value="'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'" />
<mvt:assign name="l.settings:searchspring:request:fields:intellisuggest" value="1" />
<mvt:assign name="l.settings:searchspring:request:fields:method" value="'search'" />
<mvt:assign name="l.settings:searchspring:request:fields:format" value="'json'" />
<mvt:assign name="l.settings:searchspring:request:fields:resultsFormat" value="g.resultsFormat" />
<mvt:if expr="ISNULL l.settings:searchspring:request:fields:resultsFormat">
<mvt:assign name="l.settings:searchspring:request:fields:resultsFormat" value="'native'" />
</mvt:if>
<mvt:if expr="l.settings:searchspring:request:fields:resultsFormat EQ 'native'">
<mvt:assign name="l.settings:resultsFormatNativeSelected" value="'selected'" />
<mvt:elseif expr="l.settings:searchspring:request:fields:resultsFormat EQ 'html'">
<mvt:assign name="l.settings:resultsFormatHTMLSelected" value="'selected'" />
</mvt:if>
<mvt:assign name="l.settings:searchspring:request:fields:resultLayout" value="g.resultLayout" />
<mvt:if expr="ISNULL l.settings:searchspring:request:fields:resultLayout">
<mvt:assign name="l.settings:searchspring:request:fields:resultLayout" value="'grid'" />
</mvt:if>
<mvt:if expr="l.settings:searchspring:request:fields:resultLayout EQ 'grid'">
<mvt:assign name="l.settings:resultLayoutGridSelected" value="'selected'" />
<mvt:elseif expr="l.settings:searchspring:request:fields:resultLayout EQ 'list'">
<mvt:assign name="l.settings:resultLayoutListSelected" value="'selected'" />
</mvt:if>
<mvt:assign name="l.settings:searchspring:request:fields:resultsPerPage" value="g.resultsPerPage" />
<mvt:if expr="ISNULL l.settings:searchspring:request:fields:resultsPerPage">
<mvt:assign name="l.settings:searchspring:request:fields:resultsPerPage" value="'10'" />
</mvt:if>
<mvt:assign name="l.settings:searchspring:request:fields:page" value="g.page" />
<mvt:if expr="ISNULL l.settings:searchspring:request:fields:page">
<mvt:assign name="l.settings:searchspring:request:fields:page" value="'1'" />
</mvt:if>
<mvt:comment><mvt:assign name="g.sort.salesrank" value="'desc'" /></mvt:comment>
<mvt:comment>
| Fields assignments for mvt:call
</mvt:comment>
<mvt:assign name="g.format" value="l.settings:searchspring:request:fields:format" />
<mvt:assign name="g.intellisuggest" value="l.settings:searchspring:request:fields:intellisuggest" />
<mvt:assign name="g.method" value="l.settings:searchspring:request:fields:method" />
<mvt:assign name="g.page" value="l.settings:searchspring:request:fields:page" />
<mvt:assign name="g.resultLayout" value="l.settings:searchspring:request:fields:resultLayout" />
<mvt:assign name="g.resultsFormat" value="l.settings:searchspring:request:fields:resultsFormat" />
<mvt:assign name="g.resultsPerPage" value="l.settings:searchspring:request:fields:resultsPerPage" />
<mvt:assign name="g.websiteKey" value="l.settings:searchspring:request:fields:websiteKey" />
<mvt:comment>
| Get/Set Transient
</mvt:comment>
<mvt:assign name="l.settings:searchspring:request:transient_code" value="miva_array_serialize( l.settings:searchspring:request:fields )" />
<mvt:do file="g.Module_File_Transients" name="l.settings:searchspring:response:transient" value="Get_Transient( l.settings:searchspring:request:transient_code )" />
<mvt:if expr="l.settings:searchspring:response:transient">
<mvt:assign name="l.settings:searchspring:profiling:method" value="'Transient'" />
<mvt:assign name="l.settings:searchspring:response:data" value="miva_array_deserialize( l.settings:searchspring:response:transient )" />
<mvt:else>
<mvt:assign name="l.settings:searchspring:profiling:method" value="'mvt:call'" />
<mvt:comment>
| mvt:call
</mvt:comment>
<mvt:call action="l.settings:searchspring:request:url" method="'POST'" fields="'q,format,intellisuggest,method,page,resultLayout,resultsFormat,resultsPerPage,websiteKey'">
<mvt:comment><mvt:eval expr="s.callvalue" /></mvt:comment>
<mvt:assign name="l.settings:searchspring:response:body" value="l.settings:searchspring:response:body $ s.callvalue" />
</mvt:call>
<mvt:comment>
| Clean-up & Parse Response
</mvt:comment>
<mvt:assign name="l.settings:searchspring:response:body" value="glosub(glosub( l.settings:searchspring:response:body, '\t', g.tab ), '\n', g.newline)" />
<mvt:assign name="l.settings:searchspring:response:decode_result" value="miva_json_decode( l.settings:searchspring:response:body, l.settings:searchspring:response:data )" />
<mvt:do file="g.Module_File_Transients" name="l.set_transient" value="Set_Transient( l.settings:searchspring:request:transient_code, miva_array_serialize(l.settings:searchspring:response:data), l.settings:searchspring:transient_cache_duration)" />
</mvt:if>
<mvt:comment>
| Calculate Profiling
</mvt:comment>
<mvt:assign name="l.settings:searchspring:profiling:end" value="s.dyn_time_t * 1000000 + s.dyn_tm_usec" />
<mvt:assign name="l.settings:searchspring:profiling:difference" value="l.settings:searchspring:profiling:end - l.settings:searchspring:profiling:start" />
<mvt:assign name="l.settings:searchspring:profiling:difference_formatted" value="(l.settings:searchspring:profiling:difference / 1000000) $ ' sec.'" />
<mvt:comment>
| Output & Use Data
</mvt:comment>
<mvt:comment>
<mvt:eval expr="glosub(miva_array_serialize(l.settings:searchspringk), ',', '<br>')" />
</mvt:comment>
<h1 id="searchspring">SearchSpring</h1>
<h2 id="sorting">Sorting</h2>
<ul>
<mvt:foreach iterator="sorting_option" array="searchspring:response:data:sorting:options">
<li>&mvt:sorting_option:label;</li>
</mvt:foreach>
</ul>
<h2 id="breadcrumbs">Breadcrumbs</h2>
<ul>
<mvt:foreach iterator="breadcrumb" array="searchspring:response:data:breadcrumbs">
<li>&mvt:breadcrumb:filterLabel;: &mvt:breadcrumb:filterValue;</li>
</mvt:foreach>
</ul>
<h2 id="facets">Facets</h2>
<mvt:foreach iterator="facet" array="searchspring:response:data:facets">
<h3>&mvt:facet:label;</h3>
<ul>
<mvt:foreach iterator="value" array="facet:values">
<li><a href="/store/searchspring.html?q=&mvte:global:q;&resultLayout=&mvte:global:resultLayout;&resultsFormat=&mvte:global:resultsFormat;&resultsPerPage=&mvte:global:resultsPerPage;&page=&mvte:global:page;&filter.&mvte:facet:field;=&mvte:value:value;">&mvt:value:label; (&mvt:value:count;)</a></li>
</mvt:foreach>
</ul>
</mvt:foreach>
<h2 id="results">Results</h2>
<mvt:foreach iterator="result" array="searchspring:response:data:results">
<h3>&mvt:result:name;</h3>
<p>
<small><b>sku:</b> &mvt:result:sku;</small>
</p>
</mvt:foreach>
<h2 id="pagination">Pagination</h2>
<mvt:eval expr="glosub(miva_array_serialize(l.settings:searchspring:response:data:pagination), ',', '<br>')" />
<h2 id="profiling">Profiling</h2>
<mvt:eval expr="glosub(miva_array_serialize(l.settings:searchspring:profiling), ',', '<br>')" />
<mvt:if expr="g.debug">
<h2 id="debug">Debug</h2>
<mvt:eval expr="glosub(miva_array_serialize(l.settings:searchspring), ',', '<br>')" />
</mvt:if>
<mvt:item name="html_profile" />
<head>
<mvt:if expr="NOT ISNULL l.settings:page:title">
<title>&mvt:page:title;</title>
<mvt:else>
<title>&mvt:store:name;: Search</title>
</mvt:if>
<base href="&mvt:global:basehref;" />
<link rel="canonical" href="&mvte:urls:_self:auto;" />
<mvt:item name="head" param="css_list" />
<mvt:item name="head" param="head_tag" />
</head>
<body class="searchspring">
<div id="site-container">
<div id="global-header"><mvt:item name="hdft" param="global_header" /></div>
<div id="navigation-bar"><mvt:item name="navbar" /></div>
<table id="content-container">
<tr>
<td id="left-navigation"><mvt:item name="category_tree" /></td>
<td id="main-content">
<div id="page-header"><mvt:item name="hdft" param="header" /></div>
<div id="breadcrumbs"><mvt:item name="breadcrumbs" /></div>
<h1>SearchSpring Results</h1>
<form method="get" action="&mvte:urls:searchspring:rr;">
<div>
Search: <input type="search" name="q" value="&mvte:global:q;">
</div>
<div>
Layout: <select name="resultLayout">
<option &mvte:resultLayoutGridSelected;>grid</option>
<option &mvte:resultLayoutListSelected;>list</option>
</select>
</div>
<div>
Results Format: <select name="resultsFormat">
<option &mvte:resultsFormatNativeSelected;>native</option>
<option &mvte:resultsFormatHTMLSelected;>html</option>
</select>
</div>
<div>
Per Page: <input type="number" name="resultsPerPage" min="0" max="100" step="5" value="&mvte:global:resultsPerPage;">
</div>
<div>
Page: <input type="text" name="page" value="&mvte:global:page;">
</div>
<div>
Facet Hierarchy: <input type="text" name="filter.facet_hierarchy" value="&mvte:global:filter.facet_hierarchy;">
</div>
<div>
<input type="checkbox" name="debug" value="checked" &mvte:global:debug;> Debug?
</div>
<mvt:item name="buttons" param="Search" />
</form>
<div id="page-footer">
<mvt:item name="hdft" param="footer" />
</div>
</td>
</tr>
</table>
<div id="bottom-wrap"></div>
<div id="global-footer"><mvt:item name="hdft" param="global_footer" /></div>
</div>
</body>
</html>