Как было[править]
На сегодня в комплекте с ELiS идут следующие таксономии, на которые в нодах оставляются ссылки:
- Год (field_date);
- Классификация (field_classification);
- Люди (field_author);
- Место (field_place);
- Организация (field_organization, field_publisher);
- Серия (field_serial);
- Событие (field_event);
- Теги (field_tags);
- Тип документа (field_doctype).
Как будет[править]
Недавно функционал field_classification был существенно расширен внесением в него типов документов из ГОСТ 7.0.60 и общая идея теперь такая:
Для описания есть два словаря (таксономии), один контролируемый (field_classification) и один неконтролируемый (field_tags).
Контролируемый словарь (Классификация, field_classification) состоит из множества систем классификаций, который расширяется организацией по мере необходимости введения контролируемых терминов.
Неконтролируемый словарь (Теги, field_tags) используется для всех остальных случаев, кроме небольшого числа исключений.
Исключения из тегов: Персоны (люди), Даты, Организации, Серии.
Термины из словарей "Места", "Событие", "Тип документа" должны теперь размещаться или в классификации или в тегах.
Если вы хотите, вы можете термины как словаря "Классификация", так и словаря "Теги" сделать типизированными (добавить типы "место", "событие", "тип ресурса" в таксономию "Классификация" и добавить к терминам поле "field_classification".
Т.е. теперь тип сущности рекомендуется хранить не в словаре (создавая разные словари под разные типы), а в поле field_classification самого термина.
Преимущества[править]
Теперь один термин может иметь множество типов одновременно, например быть и событием и местом.
Миграция[править]
Поле field_doctype и словарь "Тип документа" в ELiS объявляется устаревшим. Данные из этого словаря надо перенести.
Для этого поможет скрипт, который можно запустить из любого места. Данный скрипт переносит термины для всех нод из поля field_doctype в field_classification (если там есть нужный термин) или в field_tags, если в классификации термина нет. Поменяв field_doctype на другое поле, содержащее ссылки на термины, вы смигрируете и их.
Если выполнение скрипта прервется из-за нехватки памяти, запустите его еще несколько раз, он продолжит перенос с места прерывания.
<?php $path = '/var/www/vh/library'; print 'start bootstrap' . "\n"; $_SERVER['REMOTE_ADDR'] = "127.0.0.1"; $_SERVER['SCRIPT_NAME'] = 'index.php'; $_SERVER['SCRIPT_FILENAME'] = 'index.php'; $_SERVER['REQUEST_METHOD'] = 'GET'; $_SERVER['HTTP_HOST'] = '127.0.0.1'; $_SERVER['SERVER_ADDR'] = '127.0.0.1'; $_SERVER['SERVER_NAME'] = 'localhost'; $_SERVER['REQUEST_URI'] = $path . '/'; $_SERVER['HTTP_USER_AGENT'] = 'Drupal command line'; error_reporting(E_NOTICE); chdir($path); define('DRUPAL_ROOT', getcwd()); require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); ini_set('memory_limit','2G'); $start_nid = variable_get('migrate_elis_fields_last_nid',0); $results = db_select("node","n")->fields("n")->condition('n.nid',$start_nid,'>')->orderBy('n.nid')->execute(); $i=0; $node = false; foreach($results as $result) { $node = node_load($result->nid); if (isset($node->field_doctype)) { print "migrate nid {$node->nid}...\n"; $is_moved = ElisHelper::moveNodeTermFromFieldToField($node,'field_doctype', 'field_classification', false, true); if ($is_moved) { print "move classification term of {$node->title}\n"; } $is_moved_tags = ElisHelper::moveNodeTermFromFieldToField($node,'field_doctype', 'field_tags', true, true); if ($is_moved_tags) { print "move tags term of {$node->title}\n"; } } variable_set('migrate_elis_fields_last_nid', $node->nid); $node = false; $i++; if ($i % 10 == 0) { drupal_static_reset(); } } variable_del('migrate_elis_fields_last_nid');
После выполнения переноса, термины в словарях "Тип документа", "Место", "Событие" можно удалить.
Для выполнения скрипта вам необходима обновленная версия модуля elis.
Обязательно мигрировать?[править]
В общем случае - нет. Вы можете работать как работали, но дальнейшее развитие функционала будет связано с предположением, что есть два основных словаря "Классификация" и "Теги", которые типизированы уже в полях терминов.