metatag_hreflang.tokens.inc 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. /**
  3. * @file
  4. * Custom tokens for Metatag:hreflang.
  5. */
  6. /**
  7. * Implements hook_token_info().
  8. */
  9. function metatag_hreflang_token_info() {
  10. // This only makes sense if either the Translation or Entity Translation
  11. // modules are enabled.
  12. if (!(module_exists('translation') || module_exists('entity_translation'))) {
  13. return;
  14. }
  15. $info = array();
  16. $languages = language_list('enabled');
  17. // Verify there are multiple languages enabled.
  18. if (!empty($languages[1]) && is_array($languages[1]) && count($languages[1]) > 1) {
  19. if (module_exists('node')) {
  20. foreach ($languages[1] as $langcode => $language) {
  21. $info['tokens']['node']['url-' . $langcode] = array(
  22. 'name' => t('URL (@lang translation)', array('@lang' => $language->name)),
  23. 'description' => t('The URL for the %lang translation of the node, if available.', array('%lang' => $language->name)),
  24. );
  25. }
  26. }
  27. }
  28. return $info;
  29. }
  30. /**
  31. * Implements hook_tokens().
  32. */
  33. function metatag_hreflang_tokens($type, $tokens, array $data = array(), array $options = array()) {
  34. $replacements = array();
  35. $sanitize = !empty($options['sanitize']);
  36. // Node tokens.
  37. if ($type == 'node' && !empty($data['node'])) {
  38. // Shortcuts.
  39. $node = $data['node'];
  40. // Only generate tokens if there are multiple translations.
  41. if (isset($node->translations) && !empty($node->translations->data)) {
  42. $languages = language_list('enabled');
  43. if (!empty($languages[1]) && is_array($languages[1]) && count($languages[1]) > 1) {
  44. foreach ($tokens as $name => $original) {
  45. foreach ($node->translations->data as $langcode => $translation) {
  46. if ($name == 'url-' . $langcode) {
  47. $url_options = $options;
  48. $url_options['language'] = $languages[1][$langcode];
  49. $url_options['absolute'] = TRUE;
  50. $replacements[$original] = url('node/' . $node->nid, $url_options);
  51. }
  52. }
  53. }
  54. }
  55. }
  56. }
  57. return $replacements;
  58. }