xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Добавить определённому типу сущности новое свойство

Опубликовано в

Пример добавления терминам таксономии нового текстового свойства myproperty, которое будет хранится в таблице taxonomy_term_data:

modulename.install:

/**
 * Implements hook_schema_alter().
 */
function modulename_schema_alter(&$schema) {
  $entity_info = entity_get_info('taxonomy_term');
  $entity_table = $entity_info['base table'];
  $property_name = 'myproperty';
 
  if (!isset($schema[$entity_table]['fields'][$property_name])) {
    $schema[$entity_table]['fields'][$property_name] = array(
      'type' => 'varchar',
      'length' => 255,
      'not null' => TRUE,
      'default' => '',
    );
  }
}
 
/**
 * Implements hook_install().
 */
function modulename_install() {
  $entity_info = entity_get_info('taxonomy_term');
  $entity_table = $entity_info['base table'];
  $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_info = entity_get_info('taxonomy_term');
  $entity_table = $entity_info['base table'];
  $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);
Написанное актуально для Drupal 7
Похожие записи

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании