我正在构建一个 CiviCRM 扩展,它还有一个带有 UI 的管理部分,用于设置特定于扩展的各种配置。我正在寻找一种将配置存储在数据库中的推荐方法。
一种方法是专门为此目的在数据库中创建一个新表,但如果只保存几个选项,这似乎有点过头了。
另一种方法可能是使用该civicrm_setting
表,这首先是有意义的,但我不确定该表是否用于此目的。
任何意见,将不胜感激。
我正在构建一个 CiviCRM 扩展,它还有一个带有 UI 的管理部分,用于设置特定于扩展的各种配置。我正在寻找一种将配置存储在数据库中的推荐方法。
一种方法是专门为此目的在数据库中创建一个新表,但如果只保存几个选项,这似乎有点过头了。
另一种方法可能是使用该civicrm_setting
表,这首先是有意义的,但我不确定该表是否用于此目的。
任何意见,将不胜感激。
是的,您可以而且应该明确地使用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 中是否更好。
您还可以做的(我们目前的做法)是使用单例模式将您的配置逻辑存储在一个特殊的类中(就像 CiviCRM 所做的那样)。如果您想查看示例,请查看: https ://github.com/CiviCooP/no.maf.oppgavexml/blob/master/CRM/Oppgavexml/Config.php