【问题标题】:Searchable civiEvents in drupal7drupal 7 中可搜索的 civiEvents
【发布时间】:2013-11-25 17:36:41
【问题描述】:

我有一个在 drupal 7 上运行并使用 civicrm 4.4.1 的站点。我需要将事件包含在搜索结果中。

到目前为止,我发现的只是 civicrm 上过时的文档,这些文档需要 Drupal 7 不可用的模块。

我也尝试了搜索页面模块,它没有抓取事件。

【问题讨论】:

    标签: search drupal-7 drupal-modules civicrm drupal-search


    【解决方案1】:

    有点不清楚你在找什么,所以我会用两种方式回答。

    您可以通过进入“搜索”菜单并选择“高级搜索”来最轻松地搜索活动参与者。您可以通过单击“事件”标题查看事件信息——该部分将打开。您无需在搜索表单中输入任何其他内容,除非您也想搜索(即居住在西弗吉尼亚州的筹款活动参与者)。

    如果您希望 CiviCRM 事件显示在您的 Drupal 内容搜索结果中,您需要让事件显示为内容。 CiviCRM 信息与 Drupal 内容 100% 分开,但您可能会幸运地使用 CiviCRM 实体模块 https://drupal.org/project/civicrm_entity 将 CiviCRM 事件公开为实体。

    【讨论】:

    • 我正在寻找您的第二个解决方案并尝试了实体模块。在 civicrm 食谱中有关于用它做我想做的事情的说明,事件数据不再在实体模块中。不过我会再看一遍。
    • 实体更适合与规则一起使用。我没有看到任何关于将实体链接到 drupal 内容的信息。有什么想法/建议吗?
    • 是的,但是 civicrm_entity 使 CiviCRM 实体显示为 Drupal 实体,类似于用户和节点。它不是 100% 完成的,但它现在是一个很好的开始。
    【解决方案2】:

    在标准 Drupal 站点搜索中,我还没有看到任何预构建的将 CiviCRM 事件包括在内的东西。查看搜索 api,我认为可以创建一个模块来做到这一点,但我认为这不是微不足道的。我还没有为搜索 api 编写任何模块,但似乎需要做一些簿记来编写这种集成。

    我已经通过几种方式为我的客户处理了这个问题。一、为Events创建一个内容类型,并在内容类型中放入详细的描述和基本的日期信息。在 CiviCRM 中创建事件时,只需创建一个准系统事件进行注册,并直接从事件节点链接到事件注册页面。二,让事件搜索成为一个单独的动作,带有一个漂亮的链接和一个视图。

    我知道这些解决方案都不是理想的,但除了编写自己的搜索插件之外,我没有看到快速的解决方案。

    【讨论】:

      【解决方案3】:

      我们在 Drupal 中创建内容并使用 Computed Field 将其链接到 Civi 事件页面,该 Computed Field 将事件名称与节点的标题字段匹配,并将事件开始日期与节点的事件日期字段匹配。计算字段的示例代码:

      list($id, $vid, $bundle) = entity_extract_ids($entity_type, $entity);
      
      $query = "SELECT
                  ce.id
                  FROM {node} n
                  INNER JOIN {field_data_field_event_date} de ON n.nid = de.entity_id AND n.vid = de.revision_id
                  INNER JOIN {civicrm_event} ce ON n.title = ce.title COLLATE utf8_unicode_ci 
                      AND ce.start_date = convert_tz(field_event_date_value,'GMT','America/New_York')
                  WHERE n.nid = :nid
                  AND n.vid = :vid 
                  LIMIT 1";
      
      $result = db_query($query, 
      array(':vid' => $vid, ':nid' => $id))->fetchField(0);
      
      if ($result === NULL || $result == "")
      {
      $entity_field[0]['value'] = 0;
      }
      else
      {
      $entity_field[0]['value'] = $result;
      }
      

      然后你可以使用如下显示代码:

      if ($entity_field_item['value'] == 0)
      {
      $display_output = '';
      }
      else
      {
      $display_output = '<a href="https://examplesite.org/civicrm/event/register?reset=1&id=' . $entity_field_item['value'] . '">Buy tickets</a>';
      }
      

      由于我们将 Civi 事件代码保存到节点,我们还可以使用任何原生 Drupal 搜索或视图功能,并根据需要在 Drupal 模板中获得创意。其他选项可能是编写您自己的模块来执行此类操作,或者考虑将 Civi REST 端点 /sites/all/modules/civicrm/extern/rest.php?entity=Event&amp;action=getlist&amp;json={"sequential":1}&amp;api_key=yoursitekey&amp;key=yourkey 与 Drupal FeedsFeeds Extensible Parsers 模块一起使用,以获得使用最少代码创建和更新 Drupal 事件的解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多