Skip to content

Repository files navigation

Silverstripe TNTSearch

Latest Stable Version Total Downloads Latest Unstable Version License PHP Version Require

A silverstripe search module that utilizes TNTSearch to index content.

Installation

composer require werkbot/werkbot-search

Requirements

Setup

Add the following extensions to Page

Page::add_extension(SearchableExtension::class);
PageController::add_extension(SearchControllerExtension::class);

You will need to run dev/build

Define getIndexQuery on Page

The Page::class will need to have a function getIndexQuery defined. Here is an example for Page:

/**
 * getIndexQuery
 * This query is used when building the index
 *
 * @return string|boolean - FALSE if not set
 */
public function getIndexQuery()
{
  $class = get_class($this);
  $class = str_replace('\\', '\\\\', $class);

  /*
    Alternatively, just use the short class name of the current file
    Example: "Page"
  */
  $indexQueryDeclaringClassShortname = $this->owner->getIndexQueryDeclaringClassShortname();

  return <<<SQL
    SELECT
      concat("{$indexQueryDeclaringClassShortname}_", SiteTree_Live.ID) AS ID,
      SiteTree_Live.ClassName,
      SiteTree_Live.Title,
      SiteTree_Live.Content
    FROM
      Page
    LEFT JOIN
      SiteTree_Live
    ON
      SiteTree_Live.ID = Page.ID
    WHERE
      SiteTree_Live.ShowInSearch = '1'
    AND
      -- Keeps subclasses from re-indexing duplicates
      SiteTree_Live.ClassName = '$class'
    AND
      SiteTree_Live.Content IS NOT NULL
  SQL;
}

This is a simple query that is used by the indexer to index your content.

This function can be customized however you like and also can be added to DataObjects.

Data Extensions

Note that if the getIndexQuery method is defined in a DataExtension, the SearchableExtension must be added before the extension that adds the method. Otherwise the method will return the default: false.

SearchableDataObject::add_extension(SearchableExtension::class);  // MUST BE APPLIED FIRST for getIndexQuery to return SQL Query string.
SearchableDataObject::add_extension(SearchableDataObjectExtension::class); // Defines getIndexQuery SQL Query string.

External Libraries

By default, the templates used here use classes provided by external css libraries. We suggest installing both for the best experience:

Usage

About

A silverstripe search module that utilizes TNTSearch to index content and provides search functionality

Topics

Resources

Contributing

Stars

0 stars

Watchers

2 watching

Forks

Releases

Used by

Contributors

Languages