metatag_views.module 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. /**
  3. * @file
  4. * Provides native meta tag integration with Views.
  5. */
  6. /**
  7. * Implements hook_views_api().
  8. */
  9. function metatag_views_views_api() {
  10. return array('api' => 3);
  11. }
  12. /**
  13. * Implements hook_ctools_plugin_api().
  14. */
  15. function metatag_views_ctools_plugin_api($owner, $api) {
  16. if ($owner == 'metatag' && $api == 'metatag') {
  17. return array('version' => 1);
  18. }
  19. }
  20. /**
  21. * Implements hook_view_preview_info_alter().
  22. */
  23. function metatag_views_views_preview_info_alter(&$rows, $view) {
  24. if (metatag_views_views_display_has_metatags($view->display_handler)) {
  25. $instance = 'view:' . $view->name;
  26. $metatags = $view->display_handler->get_option('metatags');
  27. $metatags = !empty($metatags) ? $metatags : array();
  28. // Set the page title to be the previewed views title before fetching meta
  29. // tag values.
  30. $title = drupal_set_title();
  31. if ($view_title = $view->get_title()) {
  32. drupal_set_title($view_title);
  33. }
  34. $options['token data']['view'] = $view;
  35. $values = metatag_metatags_values($instance, $metatags, $options);
  36. foreach ($values as $metatag => $value) {
  37. $metatag_info = metatag_get_info('tags', $metatag);
  38. $values[$metatag] = check_plain($metatag_info['label']) . ': ' . check_plain($value);
  39. }
  40. $rows['query'][] = array(
  41. '<strong>' . t('Meta tags') . '</strong>',
  42. implode('<br />', $values),
  43. );
  44. // Restore the page title.
  45. drupal_set_title($title);
  46. }
  47. }
  48. /**
  49. * Implements hook_page_alter().
  50. */
  51. function metatag_views_page_alter(&$page) {
  52. if ($view = views_get_page_view()) {
  53. // The following is taken from views_get_page_view().
  54. // If a module is still putting in the display like we used to, catch that.
  55. if (is_subclass_of($view, 'views_plugin_display')) {
  56. $view = $view->view;
  57. }
  58. // Load the
  59. if (metatag_views_views_display_has_metatags($view->display_handler)) {
  60. $saved_metatags = $view->display_handler->get_option('metatags');
  61. $metatags = array();
  62. if (!empty($saved_metatags)) {
  63. $metatags[LANGUAGE_NONE] = $saved_metatags;
  64. }
  65. // Build options for meta tag rendering.
  66. $instance = 'view:' . $view->name;
  67. $options = array();
  68. $options['token data']['view'] = $view;
  69. // Add the metatags.
  70. $page['content']['metatags'][$instance] = metatag_metatags_view($instance, $metatags, $options);
  71. }
  72. }
  73. }
  74. /**
  75. * Determine whether the requested view display has meta tags saved.
  76. *
  77. * @param $display views_plugin_display
  78. * The view display plugin that will be checked.
  79. *
  80. * @return
  81. * Simple boolean to indicate whether there are meta tags saved.
  82. */
  83. function metatag_views_views_display_has_metatags(views_plugin_display $display) {
  84. if (method_exists($display, 'has_metatags')) {
  85. return $display->has_metatags();
  86. }
  87. else {
  88. return $display->has_path() && $display->uses_breadcrumb();
  89. }
  90. }