steveosoule
11/15/2016 - 1:31 AM

Miva - SearchSpring Experiment

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>