Можно ли определить entity на основе уже существующей таблицы в базе?

Аватар пользователя strelkovandreyvalerievich strelkovandreyv... 4 марта 2019 в 0:35

Добрый день. Нетривиальная задача, в базе где крутится друпал есть таблица, которая представляет собой dblink на вообще левую таблицу, ничего общего не имеющую с друпалу, однако данные этой таблицы нужно с помощью Views показывать пользователям.
Вроде задача просто, hook_views_data и вперёд, но! Хочу пользователям дать удобства, а именно возможность отмечать на будущее список избранных записку из таблицы, то есть другими словами Flag-ить. Тут сразу hook_views_data отпадает, так как это не сущность, и модуль флаг не будет с такими значениями работать. Получается нужно создавать свою сущность с помощью Entity API, а именно hook_schema и hook_entity_info, вот только в первом хуке он в момент включения модуля начинает создавать таблицу с полями...и тут возникает вопрос, а можно ли находу как то модулем создавать и описывать сущность на основе уже существующей таблицы, то есть что то вроде hook_views_data когда я могу в любой момент дописать описание полей, сбросить кэш и они уже доступны во вьюге. То есть могу ли просто описать сущность,ее название, список полей и их привязку к таблице, и все это без отдельной активации модуля.

Комментарии

Аватар пользователя Orion76 Orion76 4 марта 2019 в 5:53

Можно, но нудно..

самый простой вариант - добавить специальный тип материала, назовем его proxy.
В него добавить одно поле (текст или целое число) для хранения ID записи из данной таблицы.
Лучше какое-то кастомное с индексом в БД (для оптимизации поиска по данному полю)

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

к нему же добавляем и Flag.

Далее добавляем к материалу псевдо-поля(для данных из этой "левой" таблицы) хуком hook_field_extra_fields и "интегрируем" их с вьюсом: http://sanchiz.net/blog/extra-fields-views

получиться почти полноценный тип материала, которым можно как-то почти стандартно пользоваться.