home

Изменение подхода к упорядочиванию ресурсов

Как было[править]

На сегодня в комплекте с 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.

Обязательно мигрировать?[править]

В общем случае - нет. Вы можете работать как работали, но дальнейшее развитие функционала будет связано с предположением, что есть два основных словаря "Классификация" и "Теги", которые типизированы уже в полях терминов.