* 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}. */ public static function enable($searchableClasses = array('SiteTree', 'File')) { $defaultColumns = array( 'SiteTree' => '"Title","MenuTitle","Content","MetaDescription"', 'File' => '"Name","Title"' ); if(!is_array($searchableClasses)) $searchableClasses = array($searchableClasses); foreach($searchableClasses as $class) { if(!class_exists($class)) continue; if(isset($defaultColumns[$class])) { Config::inst()->update( $class, 'create_table_options', array(MySQLSchemaManager::ID => 'ENGINE=MyISAM') ); $class::add_extension("FulltextSearchable('{$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("ContentController")){ ContentController::add_extension("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 = array()) { if(is_array($searchFields)) $this->searchFields = '"'.implode('","', $searchFields).'"'; else $this->searchFields = $searchFields; parent::__construct(); } public static function get_extra_config($class, $extensionClass, $args) { return array( 'indexes' => array( 'SearchFields' => array( 'type' => 'fulltext', 'name' => 'SearchFields', 'value' => $args[0] ) ) ); } /** * 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; } }