'my_module_synonyms_behavior_implementation_machine_name', 'label' => t('This is human friendly name of my synonyms behavior implementation. Put something meaningful here'), 'class' => 'MySynonymsSynonymsBehavior', ); break; } break; } break; } return $providers; } /** * Example of synonyms behavior implementation class. * * You are encouraged to extend AbstractSynonymsBehavior class as that one * contains a few heuristic that make your implementation easier. */ class MySynonymsSynonymsBehavior extends AbstractSynonymsBehavior implements AutocompleteSynonymsBehavior { /** * Extract synonyms from an entity within a specific behavior implementation. * * @param object $entity * Entity from which to extract synonyms * * @return array * Array of synonyms extracted from $entity */ public function extractSynonyms($entity) { $synonyms = array(); // Do something with $entity in order to extract synonyms from it. Add all // those synonyms into your $synonyms array. return $synonyms; } /** * Add an entity as a synonym into another entity. * * Basically this method should be called when you want to add some entity * as a synonym to another entity (for example when you merge one entity * into another and besides merging want to add synonym of the merged entity * into the trunk entity). You should update $trunk_entity in such a way that * it holds $synonym_entity as a synonym (it all depends on how data is stored * in your behavior implementation, but probably you will store entity label * or its ID as you cannot literaly store an entity inside of another entity). * If entity of type $synonym_entity_type cannot be converted into a format * expected by your behavior implementation, just do nothing. * * @param object $trunk_entity * Entity into which another one should be added as synonym * @param object $synonym_entity * Fully loaded entity object which has to be added as synonym * @param string $synonym_entity_type * Entity type of $synonym_entity */ public function mergeEntityAsSynonym($trunk_entity, $synonym_entity, $synonym_entity_type) { // If you can add $synonym_entity into $trunk_entity, then do so. // For example: $trunk_entity->synonym_storage[] = $synonym_entity; } /** * Look up entities by their synonyms within a behavior implementation. * * You are provided with a SQL condition that you should apply to the storage * of synonyms within the provided behavior implementation. And then return * result: what entities match by the provided condition through what * synonyms. * * @param QueryConditionInterface $condition * Condition that defines what to search for. Apart from normal SQL * conditions as known in Drupal, it may contain the following placeholders: * - AbstractSynonymsBehavior::COLUMN_SYNONYM_PLACEHOLDER: to denote * synonyms column which you should replace with the actual column name * where the synonyms data for your provider is stored in plain text. * - AbstractSynonymsBehavior::COLUMN_ENTITY_ID_PLACEHOLDER: to denote * column that holds entity ID. You are supposed to replace this placeholder * with actual column name that holds entity ID in your case. * For ease of work with these placeholders, you may extend the * AbstractSynonymsBehavior class and then just invoke the * AbstractSynonymsBehavior->synonymsFindProcessCondition() method, so you * won't have to worry much about it * * @return Traversable * Traversable result set of found synonyms and entity IDs to which those * belong. Each element in the result set should be an object and will have * the following structure: * - synonym: (string) Synonym that was found and which satisfies the * provided condition * - entity_id: (int) ID of the entity to which the found synonym belongs */ public function synonymsFind(QueryConditionInterface $condition) { // Here, as an example, we'll query an imaginary table where your module // supposedly keeps synonyms. We'll also use helpful // AbstractSynonymsBehavior::synonymsFindProcessCondition() to normalize // $condition argument. $query = db_select('my_synonyms_storage_table', 'table'); $query->addField('table', 'entity_id', 'entity_id'); $query->addField('table', 'synonym', 'synonym'); $this->synonymsFindProcessCondition($condition, 'table.synonym', 'table.entity_id'); $query->condition($condition); return $query->execute(); } /** * Collect info on features pipe during invocation of hook_features_export(). * * If your synonyms provider depends on some other features components, this * method should return them. * * @return array * Array of features pipe as per hook_features_export() specification */ public function featuresExportPipe() { $pipe = parent::featuresExportPipe(); // Here you can add any additional features components your provider // depends on. return $pipe; } }