Документация COREmanager

Добавление дополнительных полей в таблицы

Иногда, при написании плагинов возникает необходимость хранения дополнительных параметров для встроенных объектов. COREmanager (Class mgr db::Cache) позволяет добавлять дополнительные поля в таблицы БД без внесения изменений в код приложения. При этом, добавленные поля будут обрабатываться стандартными алгоритмами: будет отслеживаться наличие данного поля в таблице и его тип (при необходимости поле будет добавлено или изменен его тип), значения таких полей может быть изменено через форму редактирования или выведено в списке записей (для этого будет достаточно просто добавить соответствующее поле в метаданные ).

Для того, чтобы добавить дополнительное поле в таблицу, надо создать каталог /usr/local/mgr5/etc/sql/{имя_продукта}.{имя_таблицы}.addon или /usr/local/mgr5/etc/sql/{имя_таблицы}.addon

Каждый файл в любом из этих каталогов описывает отдельное поле таблицы. Имя поля совпадает с именем файла. По умолчанию, будет создано поле типа string с максимально возможной длинной (VARCHAR(255)), но можно задать и другой тип данных, а так же определить значение по умолчанию, и параметры доступа (Struct mgr_db::TableDesc::Field). Пример файла:

type=string
size=40
access_read= registered
access_write=admin+
default=0.0.0.0

type определяет тип поля. Возможные значения, это имена классов — наследников Class mgr db::Field . Например: имя string, создает поле типа class mgr_db::StringField. int —  class mgr_db::IntField

size размер поля (для class mgr_db::StringField). По умолчанию: 255

access_read ограничивает доступ на чтение значения поля по уровням доступа пользователей (см. Namespace mgr access ). По умолчанию, поле доступно для всех пользователей.

access_write доступ на запись (аналогично access_read)

access устанавливает доступ на чтение и на запись и перекрывает настройки установленные через (access_read и access_write)

default устанавливает значение по умолчанию. Для установки значения NULL необходимо указывать параметр следующим образом:

default null

После этого нужно очистить кеш и перезапустить панель:

rm -rf /usr/local/mgr5/var/.db.cache*
killall core