Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在API中替换CiviCRM令牌的问题_Php_Drupal 7_Token_Civicrm_Civicrm Extension - Fatal编程技术网

Php 在API中替换CiviCRM令牌的问题

Php 在API中替换CiviCRM令牌的问题,php,drupal-7,token,civicrm,civicrm-extension,Php,Drupal 7,Token,Civicrm,Civicrm Extension,我目前正在开发一个CiviCRM扩展,我需要在html代码中替换CiviCRM令牌(用于pdf和邮件生成) 我在核心文件中做了一点研究,并尝试在PDFLetterCommon.php(/civicrm/CRM/Contact/Form/Task/PDFLetterCommon.php)中重新创建该行为,它将替换后处理函数中的令牌 这是原始的CiviCRM代码: list($formValues, $categories, $html_message, $messageToken, $return

我目前正在开发一个CiviCRM扩展,我需要在html代码中替换CiviCRM令牌(用于pdf和邮件生成)

我在核心文件中做了一点研究,并尝试在
PDFLetterCommon.php
/civicrm/CRM/Contact/Form/Task/PDFLetterCommon.php
)中重新创建该行为,它将替换后处理函数中的令牌

这是原始的CiviCRM代码:

list($formValues, $categories, $html_message, $messageToken, $returnProperties) = self::processMessageTemplate($form);

$skipOnHold = isset($form->skipOnHold) ? $form->skipOnHold : FALSE;
$skipDeceased = isset($form->skipDeceased) ? $form->skipDeceased : TRUE;

foreach ($form->_contactIds as $item => $contactId) {
  $params = array('contact_id' => $contactId);

  list($contact) = CRM_Utils_Token::getTokenDetails($params,
    $returnProperties,
    $skipOnHold,
    $skipDeceased,
    NULL,
    $messageToken,
    'CRM_Contact_Form_Task_PDFLetterCommon'
  );

  ...

 }
这是我的测试版本:

list($formValues, $categories, $html_message, $messageToken, $returnProperties) = self::processMessageTemplate($form);

$skipOnHold = isset($form->skipOnHold) ? $form->skipOnHold : FALSE;
$skipDeceased = isset($form->skipDeceased) ? $form->skipDeceased : TRUE;

foreach ($form->_contactIds as $item => $contactId) {
  $params = array('contact_id' => $contactId);

  list($contact) = CRM_Utils_Token::getTokenDetails($params,
    $returnProperties,
    $skipOnHold,
    $skipDeceased,
    NULL,
    $messageToken,
    'CRM_Contact_Form_Task_PDFLetterCommon'
  );

  ...

 }
(此代码位于我的扩展中的api函数内)

我正在使用
$skipOnHold
(false)和
$skipDeceased
(true)的默认值,并且只将一个(现有)用户id传递到
$params
数组中(
$tokenParams

这是我的问题:

list($formValues, $categories, $html_message, $messageToken, $returnProperties) = self::processMessageTemplate($form);

$skipOnHold = isset($form->skipOnHold) ? $form->skipOnHold : FALSE;
$skipDeceased = isset($form->skipDeceased) ? $form->skipDeceased : TRUE;

foreach ($form->_contactIds as $item => $contactId) {
  $params = array('contact_id' => $contactId);

  list($contact) = CRM_Utils_Token::getTokenDetails($params,
    $returnProperties,
    $skipOnHold,
    $skipDeceased,
    NULL,
    $messageToken,
    'CRM_Contact_Form_Task_PDFLetterCommon'
  );

  ...

 }
我的
$messageToken
$returnProperties
变量通过CiviCRM的核心函数正确填充,但当我将它们全部传递到
CRM\u Utils\u Token::getTokenDetails()
时,返回的
$contact
变量包含一个空数组

我真的没有主意了,我一直在研究
CRM/Utils/Token.php
getTokenDetails()
所在的位置,但是没有找到我代码的问题


提前感谢您的帮助

您使用的是哪个版本的D8或D7?我使用的是Drupal 7您是否尝试过了解getTokenDetails()是如何实现的?