Пример добавления терминам таксономии нового текстового свойства myproperty
, которое будет хранится в таблице taxonomy_term_data
:
modulename.install:
/**
* Implements hook_schema_alter().
*/
function modulename_schema_alter(&$schema) {
$entity_table = 'taxonomy_term_data';
$property_name = 'myproperty';
if (isset($schema[$entity_table]) && !isset($schema[$entity_table]['fields'][$property_name])) {
$schema[$entity_table]['fields'][$property_name] = array(
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => '',
);
}
}
/**
* Implements hook_enable().
*/
function modulename_enable() {
$entity_table = 'taxonomy_term_data';
$entity_schema = drupal_get_schema($entity_table, TRUE);
$property_name = 'myproperty';
if (isset($entity_schema['fields'][$property_name]) && !db_field_exists($entity_table, $property_name)) {
db_add_field($entity_table, $property_name, $entity_schema['fields'][$property_name]);
}
}
/**
* Implements hook_uninstall().
*/
function modulename_uninstall() {
$entity_table = 'taxonomy_term_data';
$entity_schema = drupal_get_schema($entity_table, TRUE);
$property_name = 'myproperty';
if (isset($entity_schema['fields'][$property_name]) && db_field_exists($entity_table, $property_name)) {
db_drop_field($entity_table, $property_name);
}
}
modulename.info:
...
dependencies[] = taxonomy
После этого можно сохранять и получать значение нового свойства:
// Write
$term = taxonomy_term_load(123);
$term->myproperty = 'test';
taxonomy_term_save($term);
// Read
$term = taxonomy_term_load(123);
debug($term->myproperty);
Замечание 1: в .info файл надо добавить зависимость от модуля, создающего сущность, в данном случае taxonomy, чтобы хук modulename_enable()
вызвался в самом конце.
Замечание 2: в hook_schema_alter
нельзя вызывать entity_get_info()
, поэтому надо хардкодить название таблицы.
Написанное актуально для
Drupal 7
Похожие записи
- Добавить сторонней контент сущности своё базовое поле (base field)
- Создание простейшего модуля управления данными с помощью Entity API
- Как работает опция "Aggregation type" в настройках полей Views при включённой агрегации
- Добавить своё действие над сущностью в bulk operations
- Добавить своё действие над сущностью в contextual links
Добавить комментарий