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&action=getlist&json="sequential":1&api_key=yoursitekey&key=yourkey
与 Drupal Feeds 和 Feeds Extensible Parsers 模块一起使用,以获得使用最少代码创建和更新 Drupal 事件的解决方案。
【讨论】:
以上是关于drupal 7 中可搜索的 civiEvents的主要内容,如果未能解决你的问题,请参考以下文章