Имеются установленные Drupal 7 + commerce. У товара несколько атрибутов. Пути вариаций товара формируются через Commerce Product URLs. Имеют вид:
/node/10?id=16
/node/10?id=17
/node/10?id=18 и .т.д.
Установлен модуль Metatag. Нужно: в title дисплея товара потянуть артикул вариации товара, которая отображается по текущему url. Думал через токен [commerce-product:sku], но в дисплее товара такой токен прописать не даёт. Удалось только через [node:field-product:0:sku], но он всегда передает первую вариацию.
Подскажите, в какую сторону лучше двигаться? Рассматриваю варианты:
- Накодить свой токен
- Чего-нибудь похукать
- Как-то определять правильный номер вариации для [node:field-product:?:sku]
- Или я где-то чего-то упустил и всё решается штатными токенами
- Другой вариант
Должно работать так:
Переходим /node/10?id=16 в title видим "Качественный товар 000016 купить недорого..."
Переходим /node/10?id=17 в title видим "Качественный товар 123017 купить недорого..."
Комментарии
Изваял такой токен:
* Implements hook_token_info().
*/
function mymodule_token_info() {
return array(
'tokens' => array(
'node' => array(
'product' => array(
'name' => t('Product reference'),
'description' => t('Product referenced via field_product'),
'type' => 'commerce-product',
),
),
),
);
}
/**
* Implements hook_tokens().
*/
function mymodule_tokens($type, $tokens, array $data = array(), array $options = array()) {
$replacements = array();
if ($type == 'node' && !empty($data['node'])) {
$node = $data['node'];
if (isset($node->field_product) && $p_tokens = token_find_with_prefix($tokens, 'product')) {
$parsed_url = drupal_parse_url(request_uri());
if (isset($parsed_url['query']['id'])) {
foreach ($node->field_product[LANGUAGE_NONE] as $delta => $f_p) {
if ($parsed_url['query']['id'] == $f_p['product_id']) {
$product = entity_metadata_wrapper('commerce_product', $f_p['product_id'])->value();
$replacements += token_generate('commerce-product', $p_tokens, array('commerce-product' => $product), $options);
break;
}
}
}
}
}
return $replacements;
}
Можно использовать любые поля товара: [node:product:sku], [node:product:title], и т.д.