Использование токена в качестве селектора данных

Я создал следующий токен; однако, когда я пытаюсь использовать 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;
}
?>

person Sina Salek    schedule 15.10.2012    source источник


Ответы (1)


Несколько вещей.

  1. Токены имеют формат [type:token], как описано в страница hook_token_info API. Для вашего примера это будет [coupon-link:coupon]. Я не знаю, почему вы добавляете свои токены в массив site, так как ваш собственный токен купона, вероятно, не имеет ничего общего с токенами всего сайта, такими как *site_url* или *site_name*.

  2. Поскольку типы являются именами машин, вы должны изменить их на coupon_link, так как имена машин с тире не являются стандартом Drupal.

  3. Если вы действительно заблудились, предлагаю также взглянуть на пример токена из модуля примеров.

person fmitchell    schedule 21.04.2013