3

次のトークンを作成しました。しかし、ループ アクションで 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;
}
?>
4

1 に答える 1

1

いくつかのこと。

  1. トークンは、hook_token_info APIページ[type:token]で説明されているようにフォーマットされます。あなたの例では、それは. カスタム クーポン トークンはおそらく *site_url* や *site_name* などのサイト全体のトークンとは関係がないため、トークンをサイト配列に追加する理由がわかりません。[coupon-link:coupon]

  2. coupon_linkタイプはマシン名であるため、ダッシュを含むマシン名は Drupal 標準ではないため、 に変更する必要があります。

  3. 本当に迷った場合は、サンプル モジュールのトークンの例も参照することをお勧めします。

于 2013-04-21T23:43:26.157 に答える