Я создал следующий токен; однако, когда я пытаюсь использовать site:coupons в качестве селектора данных в циклическом действии, он не отображается в браузере выбора данных. Обратите внимание, что он отображается как шаблон замены, когда я использую, например, действие «Показать сообщение на сайте».
Я потратил много времени на поиск в Интернете и очередь проблем с токенами правил, я пытался прочитать исходные коды основного токена, токена и правил. Я также нашел некоторую информацию, например, селектор данных не является токеном! или правила работают только с сущностями! До сих пор я не мог заставить это работать, как бы я ни старался. Мои данные не являются сущностью. Есть ли способ интегрировать его с правилами? Я не смог найти никакой официальной документации по этому вопросу, поэтому я создал проблему в надежде, что кто-нибудь из экспертов по правилам сможет мне помочь.
Примечание. Если я заменю сайт ссылкой на купон в следующем коде, он даже не будет отображаться в качестве шаблона замены в правилах. но он отлично работает как токен где угодно, но не в правилах
заранее спасибо
<?php
/**
* Implements hook_token_info().
*/
function coupon_link_token_info() {
$types['coupon-link'] = array(
'name' => t("Coupon link coupon info"),
'description' => t("Info about linked coupon via url."),
);
// Andy Pangus specific tokens.
$tokens['site']['coupon-code'] = array(
'name' => t("Coupon Link Coupon Code"),
'description' => t("The code of the coupon entered via url."),
);
$tokens['site']['coupon'] = array(
'name' => t("Coupon Link Coupon"),
'description' => t("The coupon entered via url."),
'type' => 'commerce_coupon'
);
$tokens['site']['coupons'] = array(
'name' => t("Coupon Link List Coupons"),
'description' => t("The coupons entered via url."),
'type' => 'array'
);
return array(
'types' => $types,
'tokens' => $tokens,
);
}
/**
* Implements hook_tokens().
*
* @ingroup token_example
*/
function coupon_link_tokens($type, $tokens, array $data = array(), array $options = array()) {
$replacements = array();
$sanitize = !empty($options['sanitize']);
// Text format tokens.
if ($type == 'site' && __coupon_link_get_coupon_code()) {
//$format = $data['format'];
foreach ($tokens as $name => $original) {
switch ($name) {
case 'coupon-code':
// Since {filter_format}.format is an integer and not user-entered
// text, it does not need to ever be sanitized.
$replacements[$original] = $sanitize ? filter_xss(__coupon_link_get_coupon_code()) : __coupon_link_get_coupon_code();
break;
case 'coupon':
// Since the format name is user-entered text, santize when requested.
$replacements[$original] = __coupon_link_get_coupon(__coupon_link_get_coupon_code());
break;
case 'coupons':
// Since the format name is user-entered text, santize when requested.
$replacements[$original] = array(__coupon_link_get_coupon(__coupon_link_get_coupon_code()));
break;
}
}
}
return $replacements;
}
?>