我正在构建一个CiviCRM扩展,它还有一个带有UI的管理部分,用于设置特定于扩展的各种配置。我正在寻找一种将配置存储在数据库中的推荐方法。
一种方法是专门为此目的在数据库中创建一个新表,但如果只保存几个选项,这似乎有点过分。
另一种方法可能是使用civicrm_setting
表,这种表最初是有意义的,但我不确定这个表是否可用于此目的。
任何建议都将受到赞赏。
答案 0 :(得分: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');
Setting
似乎有一个API,但它似乎在CiviCRM 4.4.x中运行良好。不知道在CiviCRM 4.5中它是否更好。
答案 1 :(得分:0)
你还可以做什么(我们目前的做法)是使用单例模式将配置逻辑存储在一个特殊的类中(如CiviCRM所做的那样)。如果你想看一个例子,请检查一下: https://github.com/CiviCooP/no.maf.oppgavexml/blob/master/CRM/Oppgavexml/Config.php