我大家。 我面临一个新问题。 我从 Drupal 9 更新到 Drupal 10。 在我的收据期间,我看到在网络表单中用于从另一个字段获取值的令牌不再起作用,并显示消息:时间戳必须是数字。
更新前使用的令牌是:'[webform:element:my_date_field:value]' 我尝试过:“[webform_submission:values:my_date_field:html_date]”、“[webform_submission:values:my_date_field]”或“[webform_submission:my_date_field:html_date]”没有任何结果。
令牌“[webform_submission:created:html_date]”仍然有效。
有人可以帮我找到好方法吗:)?
最后,我创建了一个新的令牌来管理这种特殊性。
我在 my_module.tokens.inc 中声明我的令牌
function my_module_token_info() {
$info['types'] = [
'my_token_name' => [
'name' => t('my_token_name'),
'description' => t(' My Tokens.'),
],
];
$info['tokens']['my_token_name']['webform_submission_value'] = [
'name' => t("Get submission value"),
'description' => t("Get submission value from a webform element for example [my_token_name:webform_submission_value:key_date_field]"),
'dynamic' => TRUE,
];
}
然后我制作(我以 /* Dynamic tokens.*/ webform.tokens.inc 的一部分为例)
function my_module_tokens($type, $tokens, array $data, array $options, BubbleableMetadata $bubbleable_metadata) {
$replacements = get_default_replacement();
if ($type == 'my_token_name') {
$replacements = _get_specific_token_values($tokens,$options, $data, $bubbleable_metadata, $replacements);
}
return $replacements;
}
function _get_specific_token_values($tokens, array $options, array $data , BubbleableMetadata $bubbleable_metadata, array $replacements) {
$token_service = \Drupal::token();
/** @var \Drupal\webform\Plugin\WebformElementManagerInterface $element_manager */
$element_manager = \Drupal::service('plugin.manager.webform.element');
if ($value_tokens = $token_service->findWithPrefix($tokens, 'webform_submission_value')) {
$webform_submission = $data['webform_submission'];
foreach ($value_tokens as $value_token => $original) {
$value = _webform_token_get_submission_value($value_token, $options, $webform_submission, $element_manager, $bubbleable_metadata);
if ($value !== NULL) {
$replacements[$original] = $value;
}
}
}
return $replacements;
}
它适用于我的新令牌。 我希望它能有所帮助。