drupal 7 中可搜索的 civiEvents

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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 Feeds 和 Feeds Extensible Parsers 模块一起使用,以获得使用最少代码创建和更新 Drupal 事件的解决方案。

【讨论】:

以上是关于drupal 7 中可搜索的 civiEvents的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 7:具有多个搜索词的搜索视图

Drupal 7 GeoField Proximity 使用搜索 API 索引

搜索日志无法跟踪 Drupal 7 查看搜索词的记录?

Apache solr 搜索结果查看 Drupal 7

如何在drupal 7中根据分类术语搜索用户列表?

在 Drupal 7 中的视图创建的页面上搜索信息