diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeAccessBaseTableTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeAccessBaseTableTest.php index 6b7d00d..8e03579 100644 --- a/core/modules/node/lib/Drupal/node/Tests/NodeAccessBaseTableTest.php +++ b/core/modules/node/lib/Drupal/node/Tests/NodeAccessBaseTableTest.php @@ -17,7 +17,7 @@ class NodeAccessBaseTableTest extends NodeTestBase { * * @var array */ - public static $modules = array('node_access_test'); + public static $modules = array('node_access_test', 'views'); /** * The installation profile to use with this test. 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..7cc67a5 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php @@ -17,7 +17,7 @@ class BreadcrumbTest extends MenuTestBase { * * @var array */ - public static $modules = array('menu_test'); + public static $modules = array('menu_test', 'views'); protected $profile = 'standard'; @@ -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/taxonomy/config/views.view.taxonomy_term.yml b/core/modules/taxonomy/config/views.view.taxonomy_term.yml new file mode 100644 index 0000000..4793e15 --- /dev/null +++ b/core/modules/taxonomy/config/views.view.taxonomy_term.yml @@ -0,0 +1,104 @@ +api_version: '3.0' +base_field: nid +base_table: node +core: '8' +description: 'Displays all nodes associated with a term.' +disabled: '0' +display: + default: + id: default + display_title: Master + display_plugin: default + position: '1' + display_options: + query: + type: views_query + options: + query_comment: '0' + access: + type: perm + options: + perm: 'access content' + cache: + type: none + exposed_form: + type: basic + pager: + type: full + sorts: + sticky: + id: sticky + table: node + field: sticky + order: DESC + created: + id: created + table: node + field: created + order: DESC + arguments: + term_node_tid_depth: + id: term_node_tid_depth + table: node + field: term_node_tid_depth + default_action: 'not found' + exception: + title_enable: '1' + title_enable: '1' + title: '%1' + default_argument_type: fixed + summary: + format: default_summary + specify_validation: '1' + validate: + type: taxonomy_term + depth: '0' + break_phrase: '1' + set_breadcrumb: '1' + filters: + status_extra: + id: status_extra + table: node + field: status_extra + group: '0' + expose: + operator: '0' + style: + type: default + row: + type: node + page_1: + id: page_1 + display_title: Page + display_plugin: page + position: '2' + display_options: + query: + type: views_query + options: { } + path: taxonomy/term/% + feed_1: + id: feed_1 + display_title: Feed + display_plugin: feed + position: '3' + display_options: + query: + type: views_query + options: { } + pager: + type: full + options: + items_per_page: '15' + path: taxonomy/term/%/feed + displays: + 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/Plugin/views/argument/IndexTid.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument/IndexTid.php index 955f80b..0585da2 100644 --- a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument/IndexTid.php +++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument/IndexTid.php @@ -43,7 +43,8 @@ function set_breadcrumb(&$breadcrumb) { return; } - return views_taxonomy_set_breadcrumb($breadcrumb, $this); + module_load_include('inc', 'taxonomy', 'taxonomy.views'); + views_taxonomy_set_breadcrumb($breadcrumb, $this); } function title_query() { diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument/IndexTidDepth.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument/IndexTidDepth.php index b5ab713..52b1a38 100644 --- a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument/IndexTidDepth.php +++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument/IndexTidDepth.php @@ -31,7 +31,6 @@ protected function defineOptions() { $options['depth'] = array('default' => 0); $options['break_phrase'] = array('default' => FALSE, 'bool' => TRUE); $options['set_breadcrumb'] = array('default' => FALSE, 'bool' => TRUE); - $options['use_taxonomy_term_path'] = array('default' => FALSE, 'bool' => TRUE); return $options; } @@ -58,17 +57,6 @@ public function buildOptionsForm(&$form, &$form_state) { '#default_value' => !empty($this->options['set_breadcrumb']), ); - $form['use_taxonomy_term_path'] = array( - '#type' => 'checkbox', - '#title' => t("Use Drupal's taxonomy term path to create breadcrumb links"), - '#description' => t('If selected, the links in the breadcrumb trail will be created using the standard drupal method instead of the custom views method. This is useful if you are using modules like taxonomy redirect to modify your taxonomy term links.'), - '#default_value' => !empty($this->options['use_taxonomy_term_path']), - '#states' => array( - 'visible' => array( - ':input[name="options[set_breadcrumb]"]' => array('checked' => TRUE), - ), - ), - ); parent::buildOptionsForm($form, $form_state); } @@ -77,7 +65,8 @@ function set_breadcrumb(&$breadcrumb) { return; } - return views_taxonomy_set_breadcrumb($breadcrumb, $this); + module_load_include('inc', 'taxonomy', 'taxonomy.views'); + views_taxonomy_set_breadcrumb($breadcrumb, $this); } /** 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/RssTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/RssTest.php index e87d931..5a45294 100644 --- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/RssTest.php +++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/RssTest.php @@ -17,7 +17,7 @@ class RssTest extends TaxonomyTestBase { * * @var array */ - public static $modules = array('node', 'field_ui'); + public static $modules = array('node', 'field_ui', 'views'); public static function getInfo() { return array( 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..9ffe995 100644 --- a/core/modules/taxonomy/taxonomy.module +++ b/core/modules/taxonomy/taxonomy.module @@ -264,10 +264,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 +293,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 +1259,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) { 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 diff --git a/core/modules/taxonomy/taxonomy.views.inc b/core/modules/taxonomy/taxonomy.views.inc index c44037d..f672f32 100644 --- a/core/modules/taxonomy/taxonomy.views.inc +++ b/core/modules/taxonomy/taxonomy.views.inc @@ -484,20 +484,13 @@ function views_taxonomy_set_breadcrumb(&$breadcrumb, &$argument) { } $args = $argument->view->args; - $parents = taxonomy_get_parents_all($argument->argument); + $parents = taxonomy_term_load_parents($argument->argument); + foreach (array_reverse($parents) as $parent) { - // Unfortunately parents includes the current argument. Skip. - if ($parent->tid == $argument->argument) { - continue; - } - if (!empty($argument->options['use_taxonomy_term_path'])) { - $path = $parent->uri(); - $path = $path['path']; - } - else { - $args[$argument->position] = $parent->tid; - $path = $argument->view->getUrl($args); - } - $breadcrumb[$path] = check_plain($parent->name); + $parent = array_shift($parents); + + $path = $parent->uri(); + $path = $path['path']; + $breadcrumb[$path] = check_plain($parent->label()); } }