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 CopyCode image 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>