Работа со схемой данных в Drupal

В определенный момент стандартные схемы данных Drupal вас могут перестать удовлетворять, и вы решите добавить свои таблицы в базу данных сайта. Как это сделать по друпальному (а-ля drupal way)?

Для инициализации таблиц в базе данных, которые называются в терминах drupal — схемой данных, используется одноименный API — Schema API.

API предлагает два хука hook_schema и hook_schema_alter. Их нужно определять в файле модуля myModuleName.install.

Hook_schema

Эта зацепка позволяет определить модулю собственные таблицы. Это делается с помощью массива, описывающего свойства полей этой таблицы. Подробнее можно посмотреть в доках schema API, а ещё лучше взглянуть на реальную реализацию этого хука, к примеру в файле /modules/node/node.install.

Данный хук вызывает иногда у разработчиков определенные трудности в плане того, в какой момент он вызывается системой. Это происходит только в момент инсталляции модуля в первый раз. При этом происходит создание описанных таблиц физически в базе данных.

Если модуль уже активен, то вариантов как минимум два:

  1. де-инсталлировать модуль, используя /admin/modules/uninstall (или любым другим способом: используя drush pmu myModuleName или удалив запись из таблицы system). Затем снова включить (и инсталлировать) модуль, чтобы заставить систему выполнить инструкции зацепки hook_schema.
  2. Написать очередной hook_update для вашего модуля с командой drupal_install_schema(‘myModuleName’);
    Это напрямую вызовет hook_schema вашего модуля.

При изменении схемы в процессе совершенствования модуля (добавлении полей, новых таблиц) придется добавлять очередные hook_update с использованием соответствующих команд Schema API.

При деинсталляции модуля drupal вызывает drupal_uninstall_schema для вашего модуля. Т.е. созданные таблицы удаляются из базы.

Hook_schema_alter

Сообщает о изменении схемы (таблиц), созданных другими модулями. Сам хук не создаёт новых полей, но должен быть объявлен в myModuleName.install для поддержания информации об общей схеме в актуальном порядке.

Менять же существующие схемы нужно через hook_update, используя команды schema API. При де-инсталляция модуля, не забудьте удалить ваши поля в таблицах сторонних модулей.

Мало букафф? Читайте есчо !

Изменить текст no-results во views программно

Февраль 5, 2020 г.

Drupal views позволяют сконфигурировать сообщение на случай если результат запроса пуст и нельзя срендерить какой либо контент для данного представления. Данная опция находится во вкладке 'advanced' вашего представления. Но в данной статье я покажу ...

Читать

Как получить текущий id node в drupal из кода программы?

Ноябрь 8, 2016 г.

Можно использовать анализ адреса хранимый Drupal в $_GET['q'] и/или анализ частей адреса, получаемых функцией arg(N). Оба варианта по сути делают одно и тоже - анализ внутреннего адреса, который для публикации имеет вид: node/%NID%. Я использую функцию ...

Читать

Удаление поля из entity в Drupal программно

Январь 10, 2020 г.

Обычно такой код требуется писать в файлах .install, для модификации структуры ваших полей при обновлении модуля, чтобы не проделывать эту операцию вручную. Также предварительно стоит подумать о переносе данных из удаляемого поля в какое то новое место. ...

Читать

Программное создание параграфов (ParagraphsItemEntity) в Drupal

Май 24, 2019 г.

Пример кода, как программно реализовать создание параграфа (речь идет о модуле - paragraphs). Обычно параграфы создаются редакторами через админку, но иногда требуется создать новый параграф с помощью кода, например, при импорте данных, структурных ...

Читать
 

Комментарии к «Работа со схемой данных в Drupal»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: