diff --git a/core/modules/node/node.module b/core/modules/node/node.module index ea2b4ce..f4f124d 100644 --- a/core/modules/node/node.module +++ b/core/modules/node/node.module @@ -2586,7 +2586,6 @@ function node_search_validate($form, &$form_state) { * setting for number of posts to show on node listing pages. * * @see node_page_default() - * @see taxonomy_term_page() * @see node_form_system_site_information_settings_form_submit() */ function node_form_system_site_information_settings_form_alter(&$form, &$form_state, $form_id) { diff --git a/core/modules/path/lib/Drupal/path/Tests/PathTaxonomyTermTest.php b/core/modules/path/lib/Drupal/path/Tests/PathTaxonomyTermTest.php index 421870d..dbf7787 100644 --- a/core/modules/path/lib/Drupal/path/Tests/PathTaxonomyTermTest.php +++ b/core/modules/path/lib/Drupal/path/Tests/PathTaxonomyTermTest.php @@ -17,7 +17,7 @@ class PathTaxonomyTermTest extends PathTestBase { * * @var array */ - public static $modules = array('taxonomy'); + public static $modules = array('taxonomy', 'views'); public static function getInfo() { return array( diff --git a/core/modules/rdf/lib/Drupal/rdf/Tests/MappingDefinitionTest.php b/core/modules/rdf/lib/Drupal/rdf/Tests/MappingDefinitionTest.php index ab7fb0d..480aaa2 100644 --- a/core/modules/rdf/lib/Drupal/rdf/Tests/MappingDefinitionTest.php +++ b/core/modules/rdf/lib/Drupal/rdf/Tests/MappingDefinitionTest.php @@ -143,6 +143,7 @@ function testUserAttributesInMarkup() { * Creates a random term and ensures the right RDFa markup is used. */ function testTaxonomyTermRdfaAttributes() { + module_enable(array('views')); $vocabulary = $this->createVocabulary(); $term = $this->createTerm($vocabulary); diff --git a/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php b/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php index a77218b..55b4716 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php @@ -309,7 +309,7 @@ function testBreadCrumbs() { $this->drupalPost("node/{$parent->nid}/edit", $edit, t('Save')); // Put both terms into a hierarchy Drupal ยป Breadcrumbs. Required for both - // the menu links and the terms itself, since taxonomy_term_page() resets + // the menu links and the terms itself, since the taxonomy term page resets // the breadcrumb based on taxonomy term hierarchy. $parent_tid = 0; foreach ($tags as $name => $null) { @@ -365,7 +365,7 @@ function testBreadCrumbs() { $this->assertTrue(count($elements) == 1, "Link to {$link['link_path']} appears only once."); // Next iteration should expect this tag as parent link. - // Note: Term name, not link name, due to taxonomy_term_page(). + // Note: Term name, not link name, due to the taxonomy term page. $trail += array( $link['link_path'] => $term->name, ); diff --git a/core/modules/views/config/views.view.taxonomy_term.yml b/core/modules/taxonomy/config/views.view.taxonomy_term.yml similarity index 80% rename from core/modules/views/config/views.view.taxonomy_term.yml rename to core/modules/taxonomy/config/views.view.taxonomy_term.yml index 742c5d7..2e3dc0c 100644 --- a/core/modules/views/config/views.view.taxonomy_term.yml +++ b/core/modules/taxonomy/config/views.view.taxonomy_term.yml @@ -1,12 +1,9 @@ -disabled: true api_version: '3.0' -module: taxonomy -name: taxonomy_term -description: 'A view to emulate Drupal core''s handling of taxonomy/term.' -tag: default +base_field: nid base_table: node -human_name: 'Taxonomy term' core: '8' +description: 'Displays all nodes associated with a term.' +disabled: '0' display: default: id: default @@ -17,9 +14,11 @@ display: query: type: views_query options: - query_comment: false + query_comment: '0' access: - type: none + type: perm + options: + perm: 'access content' cache: type: none exposed_form: @@ -44,35 +43,35 @@ display: field: term_node_tid_depth default_action: 'not found' exception: - title_enable: 1 - title_enable: 1 + title_enable: '1' + title_enable: '1' title: '%1' default_argument_type: fixed summary: format: default_summary - specify_validation: 1 + specify_validation: '1' validate: type: taxonomy_term depth: '0' - break_phrase: 1 + break_phrase: '1' term_node_tid_depth_modifier: id: term_node_tid_depth_modifier table: node field: term_node_tid_depth_modifier exception: - title_enable: 1 + title_enable: '1' default_argument_type: fixed summary: format: default_summary - specify_validation: 1 + specify_validation: '1' filters: status_extra: id: status_extra table: node field: status_extra - group: 0 + group: '0' expose: - operator: false + operator: '0' style: type: default row: @@ -99,12 +98,16 @@ display: pager: type: full options: - items_per_page: 15 + items_per_page: '15' path: taxonomy/term/%/%/feed displays: - page: page - default: 0 + page_1: page_1 + default: '0' style: type: rss row: type: node_rss +human_name: 'Taxonomy term' +module: taxonomy +name: taxonomy_term +tag: default diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/HooksTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/HooksTest.php index e9bb9f6..f3a0826 100644 --- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/HooksTest.php +++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/HooksTest.php @@ -68,10 +68,9 @@ function testTaxonomyTermHooks() { // View the term and ensure that hook_taxonomy_term_view() and // hook_entity_view() are invoked. $term = taxonomy_term_load($term->tid); - module_load_include('inc', 'taxonomy', 'taxonomy.pages'); - $term_build = taxonomy_term_page($term); - $this->assertFalse(empty($term_build['taxonomy_terms'][$term->tid]['taxonomy_test_term_view_check']), 'hook_taxonomy_term_view() was invoked when viewing the term.'); - $this->assertFalse(empty($term_build['taxonomy_terms'][$term->tid]['taxonomy_test_entity_view_check']), 'hook_entity_view() was invoked when viewing the term.'); + $term_build = taxonomy_term_view($term); + $this->assertFalse(empty($term_build['taxonomy_test_term_view_check']), 'hook_taxonomy_term_view() was invoked when viewing the term.'); + $this->assertFalse(empty($term_build['taxonomy_test_entity_view_check']), 'hook_entity_view() was invoked when viewing the term.'); // Delete the term. taxonomy_term_delete($term->tid); diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermIndexTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermIndexTest.php index 31d01c5..55b3e0e 100644 --- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermIndexTest.php +++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermIndexTest.php @@ -205,6 +205,7 @@ function testTaxonomyIndex() { * Tests that there is a link to the parent term on the child term page. */ function testTaxonomyTermHierarchyBreadcrumbs() { + module_enable(array('views')); // Create two taxonomy terms and set term2 as the parent of term1. $term1 = $this->createTerm($this->vocabulary); $term2 = $this->createTerm($this->vocabulary); diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php index 3c47f15..ed9b1ab 100644 --- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php +++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php @@ -284,6 +284,7 @@ function testTermAutocompletion() { * Save, edit and delete a term using the user interface. */ function testTermInterface() { + module_enable(array('views')); $edit = array( 'name' => $this->randomName(12), 'description[value]' => $this->randomName(100), diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module index 3a1d297..02d7a1d 100644 --- a/core/modules/taxonomy/taxonomy.module +++ b/core/modules/taxonomy/taxonomy.module @@ -9,6 +9,7 @@ use Drupal\taxonomy\Plugin\Core\Entity\Term; use Drupal\taxonomy\Plugin\Core\Entity\Vocabulary; use Drupal\Core\Entity\EntityInterface; +use Drupal\views\ViewExecutable; /** * Denotes that no term in the vocabulary has a parent. @@ -264,10 +265,6 @@ function taxonomy_menu() { $items['taxonomy/term/%taxonomy_term'] = array( 'title' => 'Taxonomy term', - 'title callback' => 'taxonomy_term_title', - 'title arguments' => array(2), - 'page callback' => 'taxonomy_term_page', - 'page arguments' => array(2), 'access arguments' => array('access content'), 'file' => 'taxonomy.pages.inc', ); @@ -297,16 +294,6 @@ function taxonomy_menu() { 'weight' => 11, 'file' => 'taxonomy.admin.inc', ); - $items['taxonomy/term/%taxonomy_term/feed'] = array( - 'title' => 'Taxonomy term', - 'title callback' => 'taxonomy_term_title', - 'title arguments' => array(2), - 'page callback' => 'taxonomy_term_feed', - 'page arguments' => array(2), - 'access arguments' => array('access content'), - 'type' => MENU_CALLBACK, - 'file' => 'taxonomy.pages.inc', - ); $items['taxonomy/autocomplete/%'] = array( 'title' => 'Autocomplete taxonomy', 'page callback' => 'taxonomy_autocomplete', @@ -1273,19 +1260,6 @@ function taxonomy_field_formatter_prepare_view($entity_type, $entities, $field, } /** - * Title callback for term pages. - * - * @param Drupal\taxonomy\Term $term - * A taxonomy term entity. - * - * @return - * The term name to be used as the page title. - */ -function taxonomy_term_title(Term $term) { - return $term->label(); -} - -/** * Form element validate handler for taxonomy term autocomplete element. */ function taxonomy_autocomplete_validate($element, &$form_state) { @@ -1554,3 +1528,27 @@ function taxonomy_library_info() { return $libraries; } + +/** + * Implements hook_views_pre_view(). + * + * @todo This hack used to live in taxonomy_term_page() with the following + * comment: This overrides any other possible breadcrumb and is a pure + * hard-coded presumption. Make this behavior configurable per vocabulary or + * term. + */ +function taxonomy_views_pre_view(ViewExecutable $view, &$display_id, array &$args) { + if ($view->storage->get('name') == 'taxonomy_term') { + $breadcrumb = array(); + $current = (object) array( + 'tid' => reset($args), + ); + while ($parents = taxonomy_term_load_parents($current->tid)) { + $current = array_shift($parents); + $breadcrumb[] = l($current->label(), 'taxonomy/term/' . $current->tid); + } + $breadcrumb[] = l(t('Home'), NULL); + $breadcrumb = array_reverse($breadcrumb); + drupal_set_breadcrumb($breadcrumb); + } +} diff --git a/core/modules/taxonomy/taxonomy.pages.inc b/core/modules/taxonomy/taxonomy.pages.inc index 62202fb..05cbc35 100644 --- a/core/modules/taxonomy/taxonomy.pages.inc +++ b/core/modules/taxonomy/taxonomy.pages.inc @@ -10,78 +10,6 @@ use Symfony\Component\HttpFoundation\JsonResponse; /** - * Menu callback; displays all nodes associated with a term. - * - * @param Drupal\taxonomy\Term $term - * The taxonomy term entity. - */ -function taxonomy_term_page(Term $term) { - // Assign the term name as the page title. - drupal_set_title($term->label()); - - // Build breadcrumb based on the hierarchy of the term. - $current = (object) array( - 'tid' => $term->tid, - ); - // @todo This overrides any other possible breadcrumb and is a pure hard-coded - // presumption. Make this behavior configurable per vocabulary or term. - $breadcrumb = array(); - while ($parents = taxonomy_term_load_parents($current->tid)) { - $current = array_shift($parents); - $breadcrumb[] = l($current->label(), 'taxonomy/term/' . $current->tid); - } - $breadcrumb[] = l(t('Home'), NULL); - $breadcrumb = array_reverse($breadcrumb); - drupal_set_breadcrumb($breadcrumb); - drupal_add_feed('taxonomy/term/' . $term->tid . '/feed', 'RSS - ' . $term->label()); - - // If there is a menu link to this term, the link becomes the last part - // of the active trail, and the link name becomes the page title. - // Thus, we must explicitly set the page title to be the node title. - $uri = $term->uri(); - - // Set the term path as the canonical URL to prevent duplicate content. - drupal_add_html_head_link(array('rel' => 'canonical', 'href' => url($uri['path'], $uri['options'])), TRUE); - // Set the non-aliased path as a default shortlink. - drupal_add_html_head_link(array('rel' => 'shortlink', 'href' => url($uri['path'], array_merge($uri['options'], array('alias' => TRUE)))), TRUE); - - $build['taxonomy_terms'] = taxonomy_term_view_multiple(array($term->id() => $term)); - if ($nids = taxonomy_select_nodes($term->tid, TRUE, config('node.settings')->get('items_per_page'))) { - $nodes = node_load_multiple($nids); - $build['nodes'] = node_view_multiple($nodes); - $build['pager'] = array( - '#theme' => 'pager', - '#weight' => 5, - ); - } - else { - $build['no_content'] = array( - '#prefix' => '

', - '#markup' => t('There is currently no content classified with this term.'), - '#suffix' => '

', - ); - } - return $build; -} - -/** - * Generate the content feed for a taxonomy term. - * - * @param Drupal\taxonomy\Term $term - * The taxonomy term entity. - */ -function taxonomy_term_feed(Term $term) { - $channel['link'] = url('taxonomy/term/' . $term->tid, array('absolute' => TRUE)); - $channel['title'] = config('system.site')->get('name') . ' - ' . $term->label(); - // Only display the description if we have a single term, to avoid clutter and confusion. - // HTML will be removed from feed description. - $channel['description'] = check_markup($term->description, $term->format, '', TRUE); - $nids = taxonomy_select_nodes($term->tid, FALSE, config('system.rss')->get('items.limit')); - - return node_feed($nids, $channel); -} - -/** * Page callback: Outputs JSON for taxonomy autocomplete suggestions. * * This callback outputs term name suggestions in response to Ajax requests