Faceted Search Complete Example
This is an self-containing example, which uses both Faceted Search macros: facetsearchprepareinputdata and facetedsearchquerybuilder. It is only dependent on an xml item containing configuration/query xml. Furthermore, it uses the sqlquery macro and standard formatting to retrieve and display the search results.
Smartsite SXML | Copy Code |
---|---|
<!-- retrieve configuration/query xml --> {buffer.set(xml, convert.toxml(sxml.decode(itemdata.field('xml',QUERY_XML))))} <!-- use 'content' source --> {buffer.set(sources,'content')} <!-- call prepareinputdata macro to process the search term(s); a datatable will be returned --> <se:facetedsearchprepareinputdata searchterms="viper" operation="auto" configurationxml="{buffer.get(xml)}" resulttype="datatable" sources="{buffer.get(sources)}" save="inputdata" /> <!-- add contenttype filter to the datatable --> {datatable.rows.add($inputdata, 'contenttype', 1)} Input data for the querybuilder: <!-- display the inputdata datatable --> {datatable.simpleformat(inputdata)} <!-- call querybuilder macro to construct SQL query; this macro will also output the sqlparams datatable --> <se:facetedsearchquerybuilder mode="searchquery" save="search_query" sources="{buffer.get(sources)}"> <se:parameters> <se:parameter name="configurationxml">{buffer.get(xml)}</se:parameter> <se:parameter name="tableorview">{channel.view()}</se:parameter> <se:parameter name="outputbuffername">sqlparams</se:parameter> <se:parameter name="facetvalues"> <se:collection inputdata="inputdata" /> </se:parameter> </se:parameters> </se:facetedsearchquerybuilder> <!-- display the query --> Query: {buffer.get(search_query)} <!-- add lowerbound and upperbound to sqlparams for the paging --> {datatable.rows.add($sqlparams, 'lowerbound', 'integer', 1)} {datatable.rows.add($sqlparams, 'upperbound', 'integer', 10)} Input datatable for sqlquery: <!-- display the sqlparams datatable --> {datatable.simpleformat(sqlparams)} {buffer.set(htmlresult,'')} <p>Results: <!-- sqlquery macro to execute the search, using the constructed SQL statement and the sqlparams datatable --> <se:sqlquery sql="{buffer.get(search_query)}" save="results" resulttype="datatable" error="{buffer.set(htmlresult,'Error: '+this.error.message())}"> <se:parameters> <se:parameter name="params"> <se:collection inputdata="sqlparams" /> </se:parameter> </se:parameters> </se:sqlquery> <!-- use standard formatting to display the search result(s) --> <se:format save="htmlresult" inputdata="results" condition="$htmlresult==''" default="No results."> <se:rowformat> <tr> <td>{this.field(nr)}</td> <td>{this.field(title)}</td> </tr> </se:rowformat> <se:resultformat> <table>{this.result()}</table> </se:resultformat> </se:format> {buffer.get(htmlresult)} </p> |