Путь в матрицу

Библиотека взаимоувязанных документов, привязанная к отечественным стандартам разработки, проектирования и документирования, выполненная в многопользовательском глобально–сетевом варианте. В качестве движка применяется Drupal с минимально необходимым числом «контрибных» модулей и модулей ядра. Почти никакого программирования. Последовательность действий при подготовке и импорте контента в Drupal для организации нод, «портирование» ранее созданной и обкатанной библиотеки. Редакция от 09.11.2024.

Создан 14.12.2020 19:20:39

На западном фронте без перемен...

- На западном фронет без перемен

Далее:
Подготовка HTML–контента
Подготовка импортера Drupal

Подготовка HTML–контента

Подготовка HTML–контента — самая обычная и без особенностей. Публикация, изменение кодовой страницы с Win–1251 на UTF, компрессия, преобразование старых тегов под стандарты w3.org, удаление «сложносочиненных» тегов body и html. На выходе — компактный HTML–контент, последующая загрузка на сервер по FTP.

Подготовка XML или CSV–контента уже с особенностями. Чисто XML'ный импорт в Drupal проходит неважно, поскольку очень своеобразно скомпонован сам XML–файл после публикации в AuthorIT. Неприятность состоит в том, что все объекты — сиблинги, «братья и сестры», а по логике вещей объекты Book должны бы возглавлять иерархию. Понятно, что объекты в AuthorIT могут быть созданы отдельно и независимо друг от друга, но опубликованы они быть могут только в составе Book.

- Объекты XML-публикации

Разбирать такой XML–файл довольно сложно, а импортировать в Drupal катастрофично. Поэтому правильный путь — создание собственного XSLT–преобразования, что и потребовало минимального программирования. На выходе после применения XSLT–преобразования Altova XMLSpy выдает вот такую чудесную табличку, которую удобно сохранять в формате xlsx.

- Результат XSLT-преобразования

Поля таблички:

  • самое первое поле содержит собственно контент каждого объекта Book, который практически невозможно вытащить из сырого XML–файла без XSLT–преобразования из–за не вполне объяснимой иерархии его объектов;
  • поле Title — это заголовок создаваемой в ходе импорта страницы Drupal, ноды в Drupal'овской терминологии, соответствующей топику. Возможно, имеет смысл сделать уникальным именно поле Title;
  • поле Body — это тело ноды, в которое подгружается контент соответствующего ноде топика. Можно подгружать текстом его прямо из XML–файла, но проще и удобнее забирать и внедрять HTML–контент в виде файлов–топиков, сгенерированных и заброшенных на сервер чуть ранее, простым оператором PHP include;
  • поле path_alias — это алиас или псевдоним ноды. Любая нода по умолчанию получает системный адрес [DOMAIN]/node/xxxxxx, где иксы — уникальный ключ ноды (nid), создаваемый Drupal'ом. Для взаимно–однозначного соответствия номеру ноды назначается уникальный ключ топика Drupal как псевдоним, в результате чего ноду можно открыть иначе — [DOMAIN]/yyyyy, где игреки — ключ топика;
  • поле guid — пока используется как уникальный идентификатор, но, наверное, разумно поменять его на Title, чтобы не двоить ноды при апдейте;
  • поля Book Link Title и Book Link URL — это и есть сама матрица, связывающая множество топиков с одной книгой. Или один топик с множеством книг. Т.е. в КАКИХ Book какой Topic присутствует.

Далее эта табличка копируется сразу в две — XXXXX node update и XXXXX book update. И оставляется в покое.

Далее:
Таблица node update
Таблица book update

Таблица node update

- Таблица node update

В этой табличке ячейки полей Body Link Title и Body Link URL содержат на хвосте запятые, добавляемые при XSLT–преобразовании. Из таблички удаляются строки сгруппированных полей Drupal CSVимпорт, после чего в новом листе создается сводная таблица.

Примечание — В табличке отсутствует набор полей для импорта в Jira, он есть, но пока закомментирован в XSLT–преобразовании за ненадобностью. При необходимости его легко включить и импортировать задачи в Jira целыми пакетами, сотнями и тысячами.

Итак, на рисунке ниже изображена разметка сводной таблицы.

- Разметка сводной таблицы

Просто и тупо, в ёкселе так не получится. На выходе отсортированная сводная таблица, см. рисунок ниже.

- Сводная таблица до конкатенации

Выделены строки с топиком, который внедрен в структуры нескольких книг, в данном случае пяти. Соответствующие ячейки по столбцам должны быть объединены через запятую в одну строку, как изображено на рисунке ниже.

- Сводная таблица после конкатенации

После указанного объединения табличка сохраняется в формате файла CSV, изображенного на рисунке ниже. При сохранении не забывать ставить флажок Текстовые значения в кавычках, это важно!

- Файл CSV

Это уже зачищенный вариант. Предварительно в файле надо сделать автозамены ,","[ на ","[ и ],", на ]" Удаляются также хвосты пусто и итогрезультат. Множественные запятые не мешают.

После этого файл полностью готов к импорту в Drupal. Ничего не поделать, такова особенность CSV–импорта практически везде, вечная проблема с ограничениями в части зарезервированных символов.

Таблица book update

- Таблица book update

Таблица book update полностью готова для работы, не имеет смысла ее во что–то преобразовывать, проще копипастить непосредственно в файлы книг, имена которых расположены над выделенными областями. Сами файлы открываются для редактирования удаленно по FTP, выделенные области должны быть заключены в <?php ВЫДЕЛЕННАЯ ОБЛАСТЬ ?>. Начинать надо с самой топовой книги, в данном случае — с книги 51098.

Подготовка импортера Drupal

- Подготовка импортера Drupal

В чистовом варианте следует поменять названия целевых полей на Book Link. Теперь настройка тампера — включаются фильтры Explode, чтобы была возможность импортировать списки ссылок.

- Tamper

Вот и все, можно импортировать ноды с обновлением уже существующих.