- drupal
- 7
| Versions | |
| 7 |
hook_entity_info() |
Inform the base system and the Field API about one or more entity types.
Inform the system about one or more entity types (i.e., object types that
can be loaded via entity_load() and, optionally, to which fields can be
attached).
Return value
An array whose keys are entity type names and whose values identify
properties of those types that the system needs to know about:
- label: The human-readable name of the type.
- controller class: The name of the class that is used to load the objects.
The class has to implement the DrupalEntityControllerInterface interface.
Leave blank to use the DrupalDefaultEntityController implementation.
- base table: (used by DrupalDefaultEntityController) The name of the
entity type's base table.
- static cache: (used by DrupalDefaultEntityController) FALSE to disable
static caching of entities during a page request. Defaults to TRUE.
- field cache: (used by Field API loading and saving of field data) FALSE
to disable Field API's persistent cache of field data. Only recommended
if a higher level persistent cache is available for the entity type.
Defaults to TRUE.
- load hook: The name of the hook which should be invoked by
DrupalDefaultEntityController:attachLoad(), for example 'node_load'.
- uri callback: A function taking an entity as argument and returning the
uri elements of the entity, e.g. 'path' and 'options'. The actual entity
uri can be constructed by passing these elements to url().
- label callback: (optional) A function taking an entity as argument and
returning the label of the entity. The entity label is the main string
associated with an entity; for example, the title of a node or the
subject of a comment. If there is an entity object property that defines
the label, use the 'label' element of the 'entity keys' return
value component to provide this information (see below). If more complex
logic is needed to determine the label of an entity, you can instead
specify a callback function here, which will be called to determine the
entity label. See also the entity_label() function, which implements this
logic.
- fieldable: Set to TRUE if you want your entity type to be fieldable.
- translation: An associative array of modules registered as field
translation handlers. Array keys are the module names, array values
can be any data structure the module uses to provide field translation.
Any empty value disallows the module to appear as a translation handler.
- entity keys: An array describing how the Field API can extract the
information it needs from the objects of the type. Elements:
- id: The name of the property that contains the primary id of the
entity. Every entity object passed to the Field API must have this
property and its value must be numeric.
- revision: The name of the property that contains the revision id of
the entity. The Field API assumes that all revision ids are unique
across all entities of a type. This entry can be omitted if the
entities of this type are not versionable.
- bundle: The name of the property that contains the bundle name for the
entity. The bundle name defines which set of fields are attached to
the entity (e.g. what nodes call "content type"). This entry can be
omitted if this entity type exposes a single bundle (all entities have
the same collection of fields). The name of this single bundle will be
the same as the entity type.
- label: The name of the property that contains the entity label. For
example, if the entity's label is located in $entity->subject, then
'subject' should be specified here. If complex logic is required to
build the label, a 'label callback' should be defined instead (see
the 'label callback' section above for details).
- bundle keys: An array describing how the Field API can extract the
information it needs from the bundle objects for this type. This entry
is required if the 'path' provided in the 'bundles'/'admin' section
identifies the bundle using a named menu placeholder whose loader
callback returns an object (e.g., $vocabulary for taxonomy terms, or
$node_type for nodes). If the path does not include the bundle, or the
bundle is just a string rather than an automatically loaded object, then
this can be omitted. Elements:
- bundle: The name of the property of the bundle object that contains
the name of the bundle object.
- bundles: An array describing all bundles for this object type. Keys are
bundles machine names, as found in the objects' 'bundle' property
(defined in the 'entity keys' entry above). Elements:
- label: The human-readable name of the bundle.
- uri callback: Same as the 'uri callback' key documented above for the
entity type, but for the bundle only. When determining the URI of an
entity, if a 'uri callback' is defined for both the entity type and
the bundle, the one for the bundle is used.
- admin: An array of information that allows Field UI pages to attach
themselves to the existing administration pages for the bundle.
Elements:
- path: the path of the bundle's main administration page, as defined
in hook_menu(). If the path includes a placeholder for the bundle,
the 'bundle argument' and 'real path' keys below are required.
- bundle argument: The position of the bundle placeholder in 'path', if
any.
- real path: The actual path (no placeholder) of the bundle's main
administration page. This will be used to generate links.
- access callback: As in hook_menu(). 'user_access' will be assumed if
no value is provided.
- access arguments: As in hook_menu().
- view modes: An array describing the view modes for the entity type. View
modes let entities be displayed differently depending on the context.
For instance, a node can be displayed differently on its own page
('full' mode), on the home page or taxonomy listings ('teaser' mode), or
in an RSS feed ('rss' mode). Modules taking part in the display of the
entity (notably the Field API) can adjust their behavior depending on
the requested view mode. An additional 'default' view mode is available
for all entity types. This view mode is not intended for actual entity
display, but holds default display settings. For each available view
mode, administrators can configure whether it should use its own set of
field display settings, or just replicate the settings of the 'default'
view mode, thus reducing the amount of display configurations to keep
track of. Keys of the array are view mode names. Each view mode is
described by an array with the following key/value pairs:
- label: The human-readable name of the view mode
- custom settings: A boolean specifying whether the view mode should by
default use its own custom field display settings. If FALSE, entities
displayed in this view mode will reuse the 'default' display settings
by default (e.g. right after the module exposing the view mode is
enabled), but administrators can later use the Field UI to apply custom
display settings specific to the view mode.
See also
entity_load()
hook_entity_info_alter()
Related topics
- Hooks
- Allow modules to interact with the Drupal core.
Code
drupal/modules/system/system.api.php, line 181
<?php
function hook_entity_info() {
$return = array(
'node' => array(
'label' => t('Node'),
'controller class' => 'NodeController',
'base table' => 'node',
'revision table' => 'node_revision',
'uri callback' => 'node_uri',
'fieldable' => TRUE,
'translation' => array(
'locale' => TRUE,
),
'entity keys' => array(
'id' => 'nid',
'revision' => 'vid',
'bundle' => 'type',
),
'bundle keys' => array(
'bundle' => 'type',
),
'bundles' => array(),
'view modes' => array(
'full' => array(
'label' => t('Full content'),
'custom settings' => FALSE,
),
'teaser' => array(
'label' => t('Teaser'),
'custom settings' => TRUE,
),
'rss' => array(
'label' => t('RSS'),
'custom settings' => FALSE,
),
),
),
);
if (module_exists('search')) {
$return['node']['view modes'] += array(
'search_index' => array(
'label' => t('Search index'),
'custom settings' => FALSE,
),
'search_result' => array(
'label' => t('Search result'),
'custom settings' => FALSE,
),
);
}
foreach (node_type_get_names() as $type => $name) {
$return['node']['bundles'][$type] = array(
'label' => $name,
'admin' => array(
'path' => 'admin/structure/types/manage/%node_type',
'real path' => 'admin/structure/types/manage/' . str_replace('_', '-', $type),
'bundle argument' => 4,
'access arguments' => array('administer content types'),
),
);
}
return $return;
}
?>