root / drupal7 / sites / all / modules / entity / entity.api.php @ a45e4bc1
1 |
<?php
|
---|---|
2 |
|
3 |
/**
|
4 |
* @file
|
5 |
* Hooks provided by the entity API.
|
6 |
*/
|
7 |
|
8 |
/**
|
9 |
* @addtogroup hooks
|
10 |
* @{
|
11 |
*/
|
12 |
|
13 |
/**
|
14 |
* Provide an entity type via the entity CRUD API.
|
15 |
*
|
16 |
* This is a placeholder for describing further keys for hook_entity_info(),
|
17 |
* which are introduced the entity API for providing a new entity type with the
|
18 |
* entity CRUD API. For that the entity API provides two controllers:
|
19 |
* - EntityAPIController: A regular CRUD controller.
|
20 |
* - EntityAPIControllerExportable: Extends the regular controller to
|
21 |
* additionally support exportable entities and/or entities making use of a
|
22 |
* name key.
|
23 |
* See entity_metadata_hook_entity_info() for the documentation of additional
|
24 |
* keys for hook_entity_info() as introduced by the entity API and supported for
|
25 |
* any entity type.
|
26 |
*
|
27 |
* The entity CRUD API supports the following keys:
|
28 |
* - entity class: (optional) A class the controller will use for instantiating
|
29 |
* entities. It is suggested to make use of the provided "Entity" class or to
|
30 |
* extend it.
|
31 |
* - bundle of: (optional) Entity types can be used as bundles for
|
32 |
* other entity types. To enable this functionality, use the 'bundle of' key
|
33 |
* to indicate which entity type this entity serves as a bundle for. But note
|
34 |
* that the other entity type will still need to declare entities of this
|
35 |
* type as bundles, as described by the documentation of hook_entity_info().
|
36 |
* If the other entity type is fieldable, the entity API controller takes
|
37 |
* care of invoking the field API bundle attachers. Note that
|
38 |
* field_attach_delete_bundle() has to be invoked manually upon module
|
39 |
* uninstallation. See entity_test_entity_info() and entity_test_uninstall()
|
40 |
* for examples.
|
41 |
* - module: (optional) The module providing the entity type. This is optional,
|
42 |
* but strongly suggested.
|
43 |
* - exportable: (optional) Whether the entity is exportable. Defaults to FALSE.
|
44 |
* If enabled, a name key should be specified and db columns for the module
|
45 |
* and status key as defined by entity_exportable_schema_fields() have to
|
46 |
* exist in the entity's base table. Also see 'entity keys' below.
|
47 |
* This option requires the EntityAPIControllerExportable to work.
|
48 |
* - entity keys: An array of keys as defined by Drupal core. The following
|
49 |
* additional keys are used by the entity CRUD API:
|
50 |
* - name: (optional) The key of the entity property containing the unique,
|
51 |
* machine readable name of the entity. If specified, this is used as
|
52 |
* identifier of the entity, while the usual 'id' key is still required and
|
53 |
* may be used when modules deal with entities generically, or to refer to
|
54 |
* the entity internally, i.e. in the database.
|
55 |
* If a name key is given, the name is used as entity identifier by the
|
56 |
* entity API module, metadata wrappers and entity-type specific hooks.
|
57 |
* However note that for consistency all generic entity hooks like
|
58 |
* hook_entity_load() are invoked with the entities keyed by numeric id,
|
59 |
* while entity-type specific hooks like hook_{entity_type}_load() are
|
60 |
* invoked with the entities keyed by name.
|
61 |
* Also, just as entity_load_single() entity_load() may be called
|
62 |
* with names passed as the $ids parameter, while the results of
|
63 |
* entity_load() are always keyed by numeric id. Thus, it is suggested to
|
64 |
* make use of entity_load_multiple_by_name() to implement entity-type
|
65 |
* specific loading functions like {entity_type}_load_multiple(), as this
|
66 |
* function returns the entities keyed by name. See entity_test_get_types()
|
67 |
* for an example.
|
68 |
* For exportable entities, it is strongly recommended to make use of a
|
69 |
* machine name as names are portable across systems.
|
70 |
* This option requires the EntityAPIControllerExportable to work.
|
71 |
* - module: (optional) A key for the module property used by the entity CRUD
|
72 |
* API to save the source module name for exportable entities that have been
|
73 |
* provided in code. Defaults to 'module'.
|
74 |
* - status: (optional) The name of the entity property used by the entity
|
75 |
* CRUD API to save the exportable entity status using defined bit flags.
|
76 |
* Defaults to 'status'. See entity_has_status().
|
77 |
* - default revision: (optional) The name of the entity property used by
|
78 |
* the entity CRUD API to determine if a newly-created revision should be
|
79 |
* set as the default revision. Defaults to 'default_revision'.
|
80 |
* Note that on entity insert the created revision will be always default
|
81 |
* regardless of the value of this entity property.
|
82 |
* - export: (optional) An array of information used for exporting. For ctools
|
83 |
* exportables compatibility any export-keys supported by ctools may be added
|
84 |
* to this array too.
|
85 |
* - default hook: What hook to invoke to find exportable entities that are
|
86 |
* currently defined. This hook is automatically called by the CRUD
|
87 |
* controller during entity_load(). Defaults to 'default_' . $entity_type.
|
88 |
* - admin ui: (optional) An array of optional information used for providing an
|
89 |
* administrative user interface. To enable the UI at least the path must be
|
90 |
* given. Apart from that, the 'access callback' (see below) is required for
|
91 |
* the entity, as well as the 'ENTITY_TYPE_form' for editing, adding and
|
92 |
* cloning. The form gets the entity and the operation ('edit', 'add' or
|
93 |
* 'clone') passed. See entity_ui_get_form() for more details.
|
94 |
* Known keys are:
|
95 |
* - path: A path where the UI should show up as expected by hook_menu().
|
96 |
* - controller class: (optional) A controller class name for providing the
|
97 |
* UI. Defaults to EntityDefaultUIController, which implements an admin UI
|
98 |
* suiting for managing configuration entities. Other provided controllers
|
99 |
* suiting for content entities are EntityContentUIController or
|
100 |
* EntityBundleableUIController (which work fine despite the poorly named
|
101 |
* 'admin ui' key).
|
102 |
* For customizing the UI inherit from the default class and override
|
103 |
* methods as suiting and specify your class as controller class.
|
104 |
* - file: (optional) The name of the file in which the entity form resides
|
105 |
* as it is required by hook_menu().
|
106 |
* - file path: (optional) The path to the file as required by hook_menu. If
|
107 |
* not set, it defaults to entity type's module's path, thus the entity
|
108 |
* types 'module' key is required.
|
109 |
* - menu wildcard: The wildcard to use in paths of the hook_menu() items.
|
110 |
* Defaults to %entity_object which is the loader provided by Entity API.
|
111 |
* - rules controller class: (optional) A controller class for providing Rules
|
112 |
* integration, or FALSE to disable this feature. The given class has to
|
113 |
* inherit from the class EntityDefaultRulesController, which serves as
|
114 |
* default in case the entity type is not marked as configuration. For
|
115 |
* configuration entities it defaults to FALSE.
|
116 |
* - metadata controller class: (optional) A controller class for providing
|
117 |
* entity property info. By default some info is generated out of the
|
118 |
* information provided in your hook_schema() implementation, while only read
|
119 |
* access is granted to that properties by default. Based upon that the
|
120 |
* Entity tokens module also generates token replacements for your entity
|
121 |
* type, once activated.
|
122 |
* Override the controller class to adapt the defaults and to improve and
|
123 |
* complete the generated metadata. Set it to FALSE to disable this feature.
|
124 |
* Defaults to the EntityDefaultMetadataController class.
|
125 |
* - extra fields controller class: (optional) A controller class for providing
|
126 |
* field API extra fields. Defaults to none.
|
127 |
* The class must implement the EntityExtraFieldsControllerInterface. Display
|
128 |
* extra fields that are exposed that way are rendered by default by the
|
129 |
* EntityAPIController. The EntityDefaultExtraFieldsController class may be
|
130 |
* used to generate extra fields based upon property metadata, which in turn
|
131 |
* get rendered by default by the EntityAPIController.
|
132 |
* - features controller class: (optional) A controller class for providing
|
133 |
* Features module integration for exportable entities. The given class has to
|
134 |
* inherit from the default class being EntityDefaultFeaturesController. Set
|
135 |
* it to FALSE to disable this feature.
|
136 |
* - i18n controller class: (optional) A controller class for providing
|
137 |
* i18n module integration for (exportable) entities. The given class has to
|
138 |
* inherit from the class EntityDefaultI18nStringController. Defaults to
|
139 |
* FALSE (disabled). See EntityDefaultI18nStringController for more
|
140 |
* information.
|
141 |
* - views controller class: (optional) A controller class for providing views
|
142 |
* integration. The given class has to inherit from the class
|
143 |
* EntityDefaultViewsController, which is set as default in case the providing
|
144 |
* module has been specified (see 'module') and the module does not provide
|
145 |
* any views integration. Else it defaults to FALSE, which disables this
|
146 |
* feature. See EntityDefaultViewsController.
|
147 |
* - access callback: (optional) Specify a callback that returns access
|
148 |
* permissions for the operations 'create', 'update', 'delete' and 'view'.
|
149 |
* The callback gets optionally the entity and the user account to check for
|
150 |
* passed. See entity_access() for more details on the arguments and
|
151 |
* entity_metadata_no_hook_node_access() for an example.
|
152 |
* This is optional, but suggested for the Rules integration, and required for
|
153 |
* the admin ui (see above).
|
154 |
* - form callback: (optional) Specfiy a callback that returns a fully built
|
155 |
* edit form for your entity type. See entity_form().
|
156 |
* In case the 'admin ui' is used, no callback needs to be specified.
|
157 |
* - entity cache: (optional) Whether entities should be cached using the cache
|
158 |
* system. Requires the entitycache module to be installed and enabled and the
|
159 |
* module key to be specified. As cached entities are only retrieved by id key,
|
160 |
* the cache would not apply to exportable entities retrieved by name key.
|
161 |
* If enabled and the entitycache module is active, 'field cache' is obsolete
|
162 |
* and is automatically disabled. Defaults to FALSE.
|
163 |
*
|
164 |
* @see hook_entity_info()
|
165 |
* @see entity_metadata_hook_entity_info()
|
166 |
*/
|
167 |
function entity_crud_hook_entity_info() { |
168 |
$return = array( |
169 |
'entity_test' => array( |
170 |
'label' => t('Test Entity'), |
171 |
'entity class' => 'Entity', |
172 |
'controller class' => 'EntityAPIController', |
173 |
'base table' => 'entity_test', |
174 |
'module' => 'entity_test', |
175 |
'fieldable' => TRUE, |
176 |
'entity keys' => array( |
177 |
'id' => 'pid', |
178 |
'name' => 'name', |
179 |
'bundle' => 'type', |
180 |
), |
181 |
'bundles' => array(), |
182 |
), |
183 |
); |
184 |
foreach (entity_test_get_types() as $name => $info) { |
185 |
$return['entity_test']['bundles'][$name] = array( |
186 |
'label' => $info['label'], |
187 |
); |
188 |
} |
189 |
return $return; |
190 |
} |
191 |
|
192 |
/**
|
193 |
* Provide additional metadata for entities.
|
194 |
*
|
195 |
* This is a placeholder for describing further keys for hook_entity_info(),
|
196 |
* which are introduced the entity API in order to support any entity type; e.g.
|
197 |
* to make entity_save(), entity_create(), entity_view() and others work.
|
198 |
* See entity_crud_hook_entity_info() for the documentation of additional keys
|
199 |
* for hook_entity_info() as introduced by the entity API for providing new
|
200 |
* entity types with the entity CRUD API.
|
201 |
*
|
202 |
* Additional keys are:
|
203 |
* - plural label: (optional) The human-readable, plural name of the entity
|
204 |
* type. As 'label' it should start capitalized.
|
205 |
* - description: (optional) A human-readable description of the entity type.
|
206 |
* - access callback: (optional) Specify a callback that returns access
|
207 |
* permissions for the operations 'create', 'update', 'delete' and 'view'.
|
208 |
* The callback gets optionally the entity and the user account to check for
|
209 |
* passed. See entity_access() for more details on the arguments and
|
210 |
* entity_metadata_no_hook_node_access() for an example.
|
211 |
* - creation callback: (optional) A callback that creates a new instance of
|
212 |
* this entity type. See entity_metadata_create_node() for an example.
|
213 |
* - save callback: (optional) A callback that permanently saves an entity of
|
214 |
* this type.
|
215 |
* - deletion callback: (optional) A callback that permanently deletes an
|
216 |
* entity of this type.
|
217 |
* - revision deletion callback: (optional) A callback that deletes a revision
|
218 |
* of the entity.
|
219 |
* - view callback: (optional) A callback to render a list of entities.
|
220 |
* See entity_metadata_view_node() as example.
|
221 |
* - form callback: (optional) A callback that returns a fully built edit form
|
222 |
* for the entity type.
|
223 |
* - token type: (optional) A type name to use for token replacements. Set it
|
224 |
* to FALSE if there aren't any token replacements for this entity type.
|
225 |
* - configuration: (optional) A boolean value that specifies whether the entity
|
226 |
* type should be considered as configuration. Modules working with entities
|
227 |
* may use this value to decide whether they should deal with a certain entity
|
228 |
* type. Defaults to TRUE to for entity types that are exportable, else to
|
229 |
* FALSE.
|
230 |
*
|
231 |
* @see hook_entity_info()
|
232 |
* @see entity_crud_hook_entity_info()
|
233 |
* @see entity_access()
|
234 |
* @see entity_create()
|
235 |
* @see entity_save()
|
236 |
* @see entity_delete()
|
237 |
* @see entity_view()
|
238 |
* @see entity_form()
|
239 |
*/
|
240 |
function entity_metadata_hook_entity_info() { |
241 |
return array( |
242 |
'node' => array( |
243 |
'label' => t('Node'), |
244 |
'access callback' => 'entity_metadata_no_hook_node_access', |
245 |
// ...
|
246 |
), |
247 |
); |
248 |
} |
249 |
|
250 |
/**
|
251 |
* Allow modules to define metadata about entity properties.
|
252 |
*
|
253 |
* Modules providing properties for any entities defined in hook_entity_info()
|
254 |
* can implement this hook to provide metadata about this properties.
|
255 |
* For making use of the metadata have a look at the provided wrappers returned
|
256 |
* by entity_metadata_wrapper().
|
257 |
* For providing property information for fields see entity_hook_field_info().
|
258 |
*
|
259 |
* @return
|
260 |
* An array whose keys are entity type names and whose values are arrays
|
261 |
* containing the keys:
|
262 |
* - properties: The array describing all properties for this entity. Entries
|
263 |
* are keyed by the property name and contain an array of metadata for each
|
264 |
* property. The name may only contain alphanumeric lowercase characters
|
265 |
* and underscores. Known keys are:
|
266 |
* - label: A human readable, translated label for the property.
|
267 |
* - description: (optional) A human readable, translated description for
|
268 |
* the property.
|
269 |
* - type: The data type of the property. To make the property actually
|
270 |
* useful it is important to map your properties to one of the known data
|
271 |
* types, which currently are:
|
272 |
* - text: Any text.
|
273 |
* - token: A string containing only lowercase letters, numbers, and
|
274 |
* underscores starting with a letter; e.g. this type is useful for
|
275 |
* machine readable names.
|
276 |
* - integer: A usual PHP integer value.
|
277 |
* - decimal: A PHP float or integer.
|
278 |
* - date: A full date and time, as timestamp.
|
279 |
* - duration: A duration as number of seconds.
|
280 |
* - boolean: A usual PHP boolean value.
|
281 |
* - uri: An absolute URI or URL.
|
282 |
* - entities - You may use the type of each entity known by
|
283 |
* hook_entity_info(), e.g. 'node' or 'user'. Internally entities are
|
284 |
* represented by their identifieres. In case of single-valued
|
285 |
* properties getter callbacks may return full entity objects as well,
|
286 |
* while a value of FALSE is interpreted like a NULL value as "property
|
287 |
* is not set".
|
288 |
* - entity: A special type to be used generically for entities where the
|
289 |
* entity type is not known beforehand. The entity has to be
|
290 |
* represented using an EntityMetadataWrapper.
|
291 |
* - struct: This as well as any else not known type may be used for
|
292 |
* supporting arbitrary data structures. For that additional metadata
|
293 |
* has to be specified with the 'property info' key. New type names
|
294 |
* have to be properly prefixed with the module name.
|
295 |
* - list: A list of values, represented as numerically indexed array.
|
296 |
* The list<TYPE> notation may be used to specify the type of the
|
297 |
* contained items, where TYPE may be any valid type expression.
|
298 |
* - bundle: (optional) If the property is an entity, you may specify the
|
299 |
* bundle of the referenced entity.
|
300 |
* - options list: (optional) A callback that returns a list of possible
|
301 |
* values for the property. The callback has to return an array as
|
302 |
* used by hook_options_list().
|
303 |
* Note that it is possible to return a different set of options depending
|
304 |
* whether they are used in read or in write context. See
|
305 |
* EntityMetadataWrapper::optionsList() for more details on that.
|
306 |
* - getter callback: (optional) A callback used to retrieve the value of
|
307 |
* the property. Defaults to entity_property_verbatim_get().
|
308 |
* It is important that your data is represented, as documented for your
|
309 |
* data type, e.g. a date has to be a timestamp. Thus if necessary, the
|
310 |
* getter callback has to do the necessary conversion. In case of an empty
|
311 |
* or not set value, the callback has to return NULL.
|
312 |
* - setter callback: (optional) A callback used to set the value of the
|
313 |
* property. In many cases entity_property_verbatim_set() can be used.
|
314 |
* - validation callback: (optional) A callback that returns whether the
|
315 |
* passed data value is valid for the property. May be used to implement
|
316 |
* additional validation checks, such as to ensure the value is a valid
|
317 |
* mail address.
|
318 |
* - access callback: (optional) An access callback to allow for checking
|
319 |
* 'view' and 'edit' access for the described property. If no callback
|
320 |
* is specified, a 'setter permission' may be specified instead.
|
321 |
* - setter permission: (optional) A permission that describes whether
|
322 |
* a user has permission to set ('edit') this property. This permission
|
323 |
* is only be taken into account, if no 'access callback' is given.
|
324 |
* - schema field: (optional) In case the property is directly based upon
|
325 |
* a field specified in the entity's hook_schema(), the name of the field.
|
326 |
* - queryable: (optional) Whether a property is queryable with
|
327 |
* EntityFieldQuery. Defaults to TRUE if a 'schema field' is specified, or
|
328 |
* if the deprecated 'query callback' is set to
|
329 |
* 'entity_metadata_field_query'. Otherwise it defaults to FALSE.
|
330 |
* - query callback: (deprecated) A callback for querying for entities
|
331 |
* having the given property value. See entity_property_query().
|
332 |
* Generally, properties should be queryable via EntityFieldQuery. If
|
333 |
* that is the case, just set 'queryable' to TRUE.
|
334 |
* - required: (optional) Whether this property is required for the creation
|
335 |
* of a new instance of its entity. See
|
336 |
* entity_property_values_create_entity().
|
337 |
* - field: (optional) A boolean indicating whether a property is stemming
|
338 |
* from a field.
|
339 |
* - computed: (optional) A boolean indicating whether a property is
|
340 |
* computed, i.e. the property value is not stored or loaded by the
|
341 |
* entity's controller but determined on the fly by the getter callback.
|
342 |
* Defaults to FALSE.
|
343 |
* - entity views field: (optional) If enabled, the property is
|
344 |
* automatically exposed as views field available to all views query
|
345 |
* backends listing this entity-type. As the property value will always be
|
346 |
* generated from a loaded entity object, this is particularly useful for
|
347 |
* 'computed' properties. Defaults to FALSE.
|
348 |
* - sanitized: (optional) For textual properties only, whether the text is
|
349 |
* already sanitized. In this case you might want to also specify a raw
|
350 |
* getter callback. Defaults to FALSE.
|
351 |
* - sanitize: (optional) For textual properties, that are not sanitized
|
352 |
* yet, specify a function for sanitizing the value. Defaults to
|
353 |
* check_plain().
|
354 |
* - raw getter callback: (optional) For sanitized textual properties, a
|
355 |
* separate callback which can be used to retrieve the raw, unprocessed
|
356 |
* value.
|
357 |
* - clear: (optional) An array of property names, of which the cache should
|
358 |
* be cleared too once this property is updated. As a rule of thumb any
|
359 |
* duplicated properties should be avoided though.
|
360 |
* - property info: (optional) An array of info for an arbitrary data
|
361 |
* structure together with any else not defined type, see data type
|
362 |
* 'struct'. Specify metadata in the same way as defined for this hook.
|
363 |
* - property info alter: (optional) A callback for altering the property
|
364 |
* info before it is used by the metadata wrappers.
|
365 |
* - property defaults: (optional) An array of property info defaults for
|
366 |
* each property derived of the wrapped data item (e.g. an entity).
|
367 |
* Applied by the metadata wrappers.
|
368 |
* - auto creation: (optional) Properties of type 'struct' may specify
|
369 |
* this callback which is used to automatically create the data structure
|
370 |
* (e.g. an array) if necessary. This is necessary in order to support
|
371 |
* setting a property of a not yet initialized data structure.
|
372 |
* See entity_metadata_field_file_callback() for an example.
|
373 |
* - translatable: (optional) Whether the property is translatable, defaults
|
374 |
* to FALSE.
|
375 |
* - entity token: (optional) If Entity tokens module is enabled, the
|
376 |
* module provides a token for the property if one does not exist yet.
|
377 |
* Specify FALSE to disable this functionality for the property.
|
378 |
* - bundles: An array keyed by bundle name containing further metadata
|
379 |
* related to the bundles only. This array may contain the key 'properties'
|
380 |
* with an array of info about the bundle specific properties, structured in
|
381 |
* the same way as the entity properties array.
|
382 |
*
|
383 |
* @see hook_entity_property_info_alter()
|
384 |
* @see entity_get_property_info()
|
385 |
* @see entity_metadata_wrapper()
|
386 |
*/
|
387 |
function hook_entity_property_info() { |
388 |
$info = array(); |
389 |
$properties = &$info['node']['properties']; |
390 |
|
391 |
$properties['nid'] = array( |
392 |
'label' => t("Content ID"), |
393 |
'type' => 'integer', |
394 |
'description' => t("The unique content ID."), |
395 |
); |
396 |
return $info; |
397 |
} |
398 |
|
399 |
/**
|
400 |
* Allow modules to alter metadata about entity properties.
|
401 |
*
|
402 |
* @see hook_entity_property_info()
|
403 |
*/
|
404 |
function hook_entity_property_info_alter(&$info) { |
405 |
$properties = &$info['node']['bundles']['poll']['properties']; |
406 |
|
407 |
$properties['poll-votes'] = array( |
408 |
'label' => t("Poll votes"), |
409 |
'description' => t("The number of votes that have been cast on a poll node."), |
410 |
'type' => 'integer', |
411 |
'getter callback' => 'entity_property_poll_node_get_properties', |
412 |
); |
413 |
} |
414 |
|
415 |
/**
|
416 |
* Provide entity property information for fields.
|
417 |
*
|
418 |
* This is a placeholder for describing further keys for hook_field_info(),
|
419 |
* which are introduced by the entity API.
|
420 |
*
|
421 |
* For providing entity property info for fields each field type may specify a
|
422 |
* property type to map to using the key 'property_type'. With that info in
|
423 |
* place useful defaults are generated, which suffice for a lot of field
|
424 |
* types.
|
425 |
* However it is possible to specify further callbacks that may alter the
|
426 |
* generated property info. To do so use the key 'property_callbacks' and set
|
427 |
* it to an array of function names. Apart from that any property info provided
|
428 |
* for a field instance using the key 'property info' is added in too.
|
429 |
*
|
430 |
* @see entity_field_info_alter()
|
431 |
* @see entity_metadata_field_text_property_callback()
|
432 |
*/
|
433 |
function entity_hook_field_info() { |
434 |
return array( |
435 |
'text' => array( |
436 |
'label' => t('Text'), |
437 |
'property_type' => 'text', |
438 |
// ...
|
439 |
), |
440 |
); |
441 |
} |
442 |
|
443 |
/**
|
444 |
* Alter the handlers used by the data selection tables provided by this module.
|
445 |
*
|
446 |
* @param array $field_handlers
|
447 |
* An array of the field handler classes to use for specific types. The keys
|
448 |
* are the types, mapped to their respective classes. Contained types are:
|
449 |
* - All primitive types known by the entity API (see
|
450 |
* hook_entity_property_info()).
|
451 |
* - options: Special type for fields having an options list.
|
452 |
* - field: Special type for Field API fields.
|
453 |
* - entity: Special type for entity-valued fields.
|
454 |
* - relationship: Views relationship handler to use for relationships.
|
455 |
* Values for all specific entity types can be additionally added.
|
456 |
*
|
457 |
* @see entity_views_field_definition()
|
458 |
* @see entity_views_get_field_handlers()
|
459 |
*/
|
460 |
function hook_entity_views_field_handlers_alter(array &$field_handlers) { |
461 |
$field_handlers['duration'] = 'example_duration_handler'; |
462 |
$field_handlers['node'] = 'example_node_handler'; |
463 |
} |
464 |
|
465 |
/**
|
466 |
* @} End of "addtogroup hooks".
|
467 |
*/
|