* MyObject::add_extension("FulltextSearchable('MySearchableField,MyOtherField')"); * * * Caution: This is a wrapper method that should only be used in _config.php, * and only be called once in your code. * * @param array $searchableClasses The extension will be applied to all DataObject subclasses * listed here. Default: {@link SiteTree} and {@link File}. * @throws Exception */ public static function enable($searchableClasses = [SiteTree::class, File::class]) { $defaultColumns = [ SiteTree::class => ['Title','MenuTitle','Content','MetaDescription'], File::class => ['Name','Title'], ]; if (!is_array($searchableClasses)) { $searchableClasses = [$searchableClasses]; } foreach ($searchableClasses as $class) { if (!class_exists($class)) { continue; } if (isset($defaultColumns[$class])) { $class::add_extension(sprintf('%s(%s)', static::class, "'" . implode("','", $defaultColumns[$class]) . "''")); } else { throw new Exception( "FulltextSearchable::enable() I don't know the default search columns for class '$class'" ); } } self::$searchable_classes = $searchableClasses; if (class_exists("SilverStripe\\CMS\\Controllers\\ContentController")) { ContentController::add_extension("SilverStripe\\CMS\\Search\\ContentControllerSearchExtension"); } } /** * @param array|string $searchFields Comma-separated list (or array) of database column names * that can be searched on. Used for generation of the database index defintions. */ public function __construct($searchFields = []) { parent::__construct(); if (is_array($searchFields)) { $this->searchFields = $searchFields; } else { $this->searchFields = explode(',', $searchFields); foreach ($this->searchFields as &$field) { $field = trim($field); } } } public static function get_extra_config($class, $extensionClass, $args) { return [ 'indexes' => [ 'SearchFields' => [ 'type' => 'fulltext', 'name' => 'SearchFields', 'columns' => $args, ] ] ]; } /** * Shows all classes that had the {@link FulltextSearchable} extension applied through {@link enable()}. * * @return array */ public static function get_searchable_classes() { return self::$searchable_classes; } }