Использование токена в качестве селектора данных
Я создал следующий токен; Однако, когда я пытаюсь использовать сайт: купоны в качестве селектора данных в действии цикла Это не отображается в браузере выбора данных. Обратите внимание, что он отображается как шаблон замены, когда я использую, например, действие "Показать сообщение на сайте".
Я потратил много времени на поиск в интернете и очереди выдачи "токенов" правил, а также попытался прочитать исходные коды основного токена, токена и правил. Я также нашел некоторую информацию, например, селектор данных не являются токенами! или правила работают только с сущностями! До сих пор я не мог заставить это работать независимо от того, сколько я старался. Мои данные не являются сущностью. Есть ли способ интегрировать его с правилами? Я не смог найти никакой официальной документации по этому вопросу, поэтому я создал проблему с надеждой, что некоторые эксперты правила помогут мне.
Примечание: если я заменю сайт купон-ссылкой в следующем коде, он даже не будет отображаться в качестве шаблона замены в правилах. но он работает как токен где угодно, но не в правилах
заранее спасибо
<?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;
}
?>
1 ответ
Несколько вещей.
Токены отформатированы как
[type:token]
как объяснено на странице API hook_token_info. Для вашего примера это будет[coupon-link:coupon]
, Я не уверен, почему вы добавляете свои токены в массив сайтов, так как ваш токен, вероятно, не имеет ничего общего с обычными токенами, такими как * site_url * или * site_name *.Поскольку типы являются именами машин, вы должны изменить его на
coupon_link
поскольку названия машин с тире не являются стандартом Drupal.Если вы действительно заблудились, я предлагаю также взглянуть на пример токена из модуля examples.