我有一个在 drupal 7 上运行并使用 civicrm 4.4.1 的站点。我需要将事件包含在搜索结果中。
到目前为止,我发现的只是有关 civicrm 的过时文档,这些文档需要 Drupal 7 不可用的模块。
我还尝试了搜索页面模块,它没有抓取事件。
我有一个在 drupal 7 上运行并使用 civicrm 4.4.1 的站点。我需要将事件包含在搜索结果中。
到目前为止,我发现的只是有关 civicrm 的过时文档,这些文档需要 Drupal 7 不可用的模块。
我还尝试了搜索页面模块,它没有抓取事件。
我还没有看到在标准 Drupal 站点搜索中包含 CiviCRM 事件的任何预构建。查看搜索 api,我认为可以创建一个模块来做到这一点,但我认为这不是微不足道的。我还没有为搜索 api 编写任何模块,但似乎需要做一些簿记来编写这种集成。
我已经以几种方式为我的客户处理了这个问题。一、为Events创建一个内容类型,并在该内容类型中放入详细的描述和基本的日期信息。在 CiviCRM 中创建事件时,只需创建一个准系统事件进行注册,并直接从事件节点链接到事件注册页面。第二,使事件搜索成为一个单独的动作,带有一个漂亮的链接和一个视图。
我知道这些解决方案都不是理想的,但除了编写自己的搜索插件之外,我没有看到快速的解决方案。
我们在 Drupal 中创建内容并使用计算字段将其链接到 Civi 事件页面,该计算字段将事件名称与节点的标题字段匹配,将事件开始日期与节点的事件日期字段匹配。计算字段的示例代码:
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 事件的解决方案。
有点不清楚你在找什么,所以我会回答两种方式。
您可以通过进入“搜索”菜单并选择“高级搜索”来最轻松地搜索活动参与者。您可以通过单击“事件”标题查看事件信息——该部分将打开。您无需在搜索表单上输入任何其他内容,除非您也想搜索(即居住在西弗吉尼亚州的筹款活动参与者)。
如果您希望 CiviCRM 事件显示在您的 Drupal 内容搜索结果中,您需要让事件显示为内容。CiviCRM 信息与 Drupal 内容 100% 分开,但您可能会幸运地使用 CiviCRM 实体模块https://drupal.org/project/civicrm_entity将 CiviCRM 事件公开为实体。