【发布时间】:2014-11-07 16:30:33
【问题描述】:
我正在构建一个 CiviCRM 扩展,它还有一个带有 UI 的管理部分,用于设置特定于扩展的各种配置。我正在寻找一种将配置存储在数据库中的推荐方法。
一种方法是专门为此目的在数据库中创建一个新表,但如果只保存几个选项,这似乎有点过头了。
另一种方法是使用civicrm_setting 表,起初这很有意义,但我不确定该表是否用于此目的。
任何建议将不胜感激。
【问题讨论】:
标签: civicrm
我正在构建一个 CiviCRM 扩展,它还有一个带有 UI 的管理部分,用于设置特定于扩展的各种配置。我正在寻找一种将配置存储在数据库中的推荐方法。
一种方法是专门为此目的在数据库中创建一个新表,但如果只保存几个选项,这似乎有点过头了。
另一种方法是使用civicrm_setting 表,起初这很有意义,但我不确定该表是否用于此目的。
任何建议将不胜感激。
【问题讨论】:
标签: civicrm
是的,您可以而且应该明确地使用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 中是否更好。
【讨论】:
group_name 列为Extension,将name 列为扩展名,后跟一个冒号和org.example.extension:show_date 等设置的键。这就是 CiviCRM 存储扩展版本的方式(即org.example.extension:version)。
您还可以做的(我们目前的做法)是使用单例模式将您的配置逻辑存储在一个特殊的类中(就像 CiviCRM 所做的那样)。如果您想查看示例,请检查: https://github.com/CiviCooP/no.maf.oppgavexml/blob/master/CRM/Oppgavexml/Config.php
【讨论】: