【问题标题】:Storing CiviCRM extension specific configuration in database在数据库中存储 CiviCRM 扩展特定配置
【发布时间】:2014-11-07 16:30:33
【问题描述】:

我正在构建一个 CiviCRM 扩展,它还有一个带有 UI 的管理部分,用于设置特定于扩展的各种配置。我正在寻找一种将配置存储在数据库中的推荐方法。

一种方法是专门为此目的在数据库中创建一个新表,但如果只保存几个选项,这似乎有点过头了。

另一种方法是使用civicrm_setting 表,起初这很有意义,但我不确定该表是否用于此目的。

任何建议将不胜感激。

【问题讨论】:

    标签: civicrm


    【解决方案1】:

    是的,您可以而且应该明确地使用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)。
    • 现在有一个关于最佳实践的文档,它可以帮助您在声明的设置之上拥有一个漂亮的管理 UI:docs.civicrm.org/dev/en/latest/framework/setting/…
    【解决方案2】:

    您还可以做的(我们目前的做法)是使用单例模式将您的配置逻辑存储在一个特殊的类中(就像 CiviCRM 所做的那样)。如果您想查看示例,请检查: https://github.com/CiviCooP/no.maf.oppgavexml/blob/master/CRM/Oppgavexml/Config.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-26
      • 2011-08-05
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 2014-02-05
      相关资源
      最近更新 更多