Smart Search plug-ins are gathered together for convenience into a plug-in group called "finder". Take a look in the plugins/finder directory and you will see the plug-ins that support the core Joomla content types. It is best to create your own plug-in by taking a copy of one of these plug-ins and adapting it to meet your specific needs.
All Smart Search plug-ins extend the FinderIndexerAdapter class which contains a good many methods to deal with maintaining the index. For the vast majority of custom content requirements you will only need to override a few of these methods.
The principle properties
Before looking at the methods, there are a few properties that need to be set up correctly:
- This should be a unique identifier for the plug-in and establishes the context that the plug-in will respond to (eg. "Content").
- The name of the extension (component) that handles the content type (eg. "com_content").
- The sublayout to use when rendering search results. For example, of $layout is set to "article" then the default view will look for a layout file called default_article.php when it needs to render a search result of this type. If no such file is found then the layout file called default_result.php will be used instead.
The principle methods
The first methods you will want to override when developing a new Smart Search plug-in are the setup, index and getListQuery methods. In the vast majority of cases those three methods will be enough to get your content indexed, although the plug-in will not be complete as there are other methods that must be implemented to deal with issues such as updating the index when the content changes. But those three methods are the working core of the plug-in.
- This method is called by the indexer once before an indexing run begins. It can be used to load libraries or initialise variables for the plug-in. Must return true.
- This is the main method called by the indexer. It is called once for each content item that is to be indexed (or the index updated). The index method essentially describes the content to the indexer by telling the indexer which fields to parse for terms/phrases and their relative weights, which fields to map into branches of the content map and what data to include in the index as "payload". This method is described in more detail later.
- This method must return a JDatabaseQuery object that will form the basis of a query that will return a list of objects of the given content type. There are constraints on this query to ensure that it is compatible with other methods used by the indexer. This method is described in more detail later.
Some other methods
For a complete Smart Search plug-in there are a number of other methods you may need to override.
- This method must return a JDatabaseQuery object that will form the basis of a query that will return the state and access level of the given content type. There are constraints on this query to ensure that it is compatible with other methods used by the indexer. This method is described in more detail later.
The following methods are called via the Smart Search content plug-in in response to specific trigger events in Joomla.
- Called in response to an onContentBeforeSave event.
- Called in response to an onContentAfterSave event.
- Called in response to an onContentDelete event.
- Called in response to an onContentChangeState event.
- Called in response to an onCategoryChangeState event.