Dear Wiki user, You have subscribed to a wiki page or wiki category on "Solr Wiki" for change notification.
The following page has been changed by MatthiasEpheser: http://wiki.apache.org/solr/SolrJS ------------------------------------------------------------------------------ The library is written using the javascript toolkit jQuery [http://jquery.com/] (Version 1.2.5). SolrJS is included in one additional javascript file "solrjs.js" The idea is to create several (reusable and extensible) "widgets" that represent solr queries. A widget is a javascript object that is responsible for creating the according solr query as well as render the result from the server to html. One manager object acts as a container that holds these widgets, performs the actual query using jQueries getJSON [http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback] method. This method creates a dynamic script tag, making cross-domain solr requests possible. - === Examples for widgets === + == Examples and source code == - * Result widget: displaying a pageable view of the current result. - * Facet widget: Create a faceted selection menu for one field in the solr document + The best way to get an idea how a widget may look like and how it can be integrated into html is to explore the documented source code and the test*.html example pages at [http://solrstuff.org/svn/solrjs/trunk]. + + Despite this, I'll try to describe some important implementation further on this page. == Implementation == @@ -29, +30 @@ <script src="solrjs.js"/> <script> var $sj = jQuery.noConflict(); </script> }}} - After that, all objects are accessible using $sj.solrjs.* + After that, all SolrJS objects are accessible using $sj.solrjs.* === The manager object === @@ -39, +40 @@ * addQueryItems: add a list of field:value pairs that restrict the current query * removeQueryItems: remove the given items from the current query * doRequest(start): performs the actual solr requests + * doRequestAll(): clears queryItems and requests all documents ==== How a query request works ==== @@ -112, +114 @@ }}} + === Example for an easily customized widget: ExtensibleResultWidget === - + The ExtensibleResultWidget is a showcase of a flexible widget. It provides 2 abstract methods: + * renderDataItem + * renderPageStatus + + After the document result for the current page is returned, these methods are called and the user is able to use custom javascript code to render the result properly. + + {{{ + + javascript: + + var resultWidget = new $sj.solrjs.ExtensibleResultWidget({ + id:"result", + target:"#result", + rows:20, + renderDataItem : function(item) { + jQuery('<div/>').html(item.id).appendTo(this.target); + // more custom code for rendering one single result item + }, + renderPageStatus : function(first, last, total) { + // custom code for rendering the pagination status + jQuery('#pageStatus_start').html(first + ""); + jQuery('#pageStatus_last').html(last + ""); + jQuery('#pageStatus_total').html(total + ""); + var navigation = $sj('#navigation').html(""); + var pageSize = last - first + 1; + var lastpageFirst = Math.ceil(total / pageSize) * pageSize - pageSize; + // create navigation buttons for paging + } + }); + solrjsManager.addWidget(resultWidget); + + + html: + + <body> + <div id="pageStatus"> + Showing <span id="pageStatus_start"></span> to <span id="pageStatus_last"></span> of <span id="pageStatus_total"></span> + </div> + <div id="navigation"></div> + <div id="result"></div> + </body> + + + + }}} +
