2014-11-07 4 views
1

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

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

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

Любые советы будут оценены.

ответ

3

Да, вы можете и должны окончательно использовать civicrm_setting.

civicrm_setting имеет столбец group_name, который должен содержать уникальный идентификатор для вашего расширения. Я обычно добавляю полное имя расширения, например org.example.extension, но это может быть любая строка, и в основном они используют имя метки (например, Preference settings).

Для взаимодействия с этими настройками, вы можете сделать следующее:

// save the setting 
CRM_Core_BAO_Setting::setItem($value, 'My group name', 'my_setting_name'); 

// get the setting 
$setting = CRM_Core_BAO_Setting::getItem('My group name', 'my_setting_name'); 

// get all the setting for you extension 
$settings = CRM_Core_BAO_Setting::getItem('My group name'); 

Там, как представляется, API для Setting, но это не кажется, работает хорошо в CiviCRM 4.4.x. Не знаю, лучше ли это в CiviCRM 4.5.

+1

Отличный ответ! Я думаю о том, что столбец '' 'group_name''' является столбцом' '' Extension''' и '' name''' как имя расширения, за которым следует двоеточие и ключ для как '' 'org.example.extension: show_date'''. Вот как CiviCRM хранит версии расширения (т. Е. '' 'Org.example.extension: version'''). – robinmitra

+0

теперь есть документация по лучшей практике, которая поможет вам иметь приятный пользовательский интерфейс администратора поверх заявленных настроек: https://docs.civicrm.org/dev/en/latest/framework/setting/#creating-a-new -Установка-в-ан-расширения – samuelsov

0

Что вы могли бы сделать (наша текущая практика) хранит вашу конфигурационную логику в специальном классе с использованием шаблона singleton (как CiviCRM делает itslef). Если вы хотите увидеть пример, проверьте это: https://github.com/CiviCooP/no.maf.oppgavexml/blob/master/CRM/Oppgavexml/Config.php

Смежные вопросы