我有一个在drupal 7上运行并使用civicrm 4.4.1的站点。我需要将事件包含在搜索结果中。
到目前为止,我发现所有关于civicrm的日期文档都需要Drupal 7无法使用的模块。
我也尝试过搜索页面模块,并没有抓住这些事件。
答案 0 :(得分:0)
有点不清楚你在寻找什么,所以我会回答两种方式。
您可以进入“搜索”菜单并选择“高级搜索”,以便最轻松地搜索活动参与者。您可以通过单击“事件”标题来查看事件信息 - 该部分将打开。您不需要在搜索表单上输入任何其他内容,除非您也想搜索它(即居住在西弗吉尼亚州的筹款人员)。
如果您希望CiviCRM事件显示在您的Drupal内容搜索结果中,您需要将事件显示为内容。 CiviCRM信息与Drupal内容100%分开,但您可以运气使用CiviCRM实体模块https://drupal.org/project/civicrm_entity将CiviCRM事件公开为实体。
答案 1 :(得分:0)
我还没有看到任何预先构建的内容,包括标准Drupal站点搜索中的CiviCRM事件。看看搜索API,我认为有可能创建一个模块来做到这一点,但我不认为这是微不足道的。我没有为搜索API编写任何模块,但似乎有一些记录要做,以编写这种集成。
我已经通过几种方式为我的客户处理了这个问题。一,为事件创建内容类型,并在内容类型中放置详细描述和基本日期信息。在CiviCRM中创建事件时,只需创建一个准系统事件进行注册,并直接从事件节点链接到事件注册页面。第二,使事件搜索成为一个单独的动作,带有一个很好的链接和一个视图。
我知道这些解决方案都不理想,但除了编写自己的搜索插件外,我没有看到快速解决方案。
答案 2 :(得分:0)
我们在Drupal中创建内容,并使用Computed Field将事件名称与节点的标题字段匹配,并将事件开始日期链接到节点的事件日期字段,将其链接到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模板中获得创意。其他选项可能是编写自己的模块,执行类似这样的操作,或考虑使用带有Drupal Feeds和Feeds Extensible Parsers模块的Civi REST端点/sites/all/modules/civicrm/extern/rest.php?entity=Event&action=getlist&json={"sequential":1}&api_key=yoursitekey&key=yourkey
来创建和更新Drupal的解决方案需要最少代码的事件。