it-swarm-vi.com

Viết lại đầu ra của trang thuật ngữ phân loại () mà không hack lõi

Trong Drupal 7, taxonomy.pages.inc chứa taxonomy_term_page(), đặt <div class="term-listing-heading"> Xung quanh đầu ra tiêu đề phân loại.

Làm cách nào tôi có thể viết lại đầu ra của taxonomy_term_page () trong chủ đề của mình, để tôi có thể xóa DIV mà không cần hack lõi?

Tôi khá ngạc nhiên khi không có tệp tpl.php cho taxonomy_term_page() vì điều này sẽ giúp việc tạo chủ đề dễ dàng hơn nhiều.

10
big_smile

Bạn có thể làm điều đó với trang tiền xử lý một cái gì đó như thế này:

function themename_preprocess_page(&$vars) {
  if  (arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2))) {
    unset($vars['page']['content']['system_main']['term_heading']['#prefix']);
    unset($vars['page']['content']['system_main']['term_heading']['#suffix']);
  }
}

trong chủ đề của bạn là template.php

Tôi tin system_main có thể được gọi là cái gì khác, tùy thuộc vào thiết lập trang web của bạn.

11
googletorp

Vì nó là một cuộc gọi lại menu, bạn có thể thực hiện hook_menu_alter () trong một mô-đun để thay đổi cuộc gọi lại menu được gọi cho trang đó.

function mymodule_menu_alter(&$items) {
  if (!empty($items['taxonomy/term/%taxonomy_term'])) {
    $items['taxonomy/term/%taxonomy_term']['page callback'] = 'mymodule_term_page';
  }
}

function mymodule_term_page($term) {
  // Build breadcrumb based on the hierarchy of the term.
  $current = (object) array(
    'tid' => $term->tid,
  );
  $breadcrumb = array();

  while ($parents = taxonomy_get_parents($current->tid)) {
    $current = array_shift($parents);
    $breadcrumb[] = l($current->name, '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->name);

  $build = array();

  $build['term_heading'] = array(
    'term' => taxonomy_term_view($term, 'full'),
  );

  if ($nids = taxonomy_select_nodes($term->tid, TRUE, variable_get('default_nodes_main', 10))) {
    $nodes = node_load_multiple($nids);
    $build += node_view_multiple($nodes);
    $build['pager'] = array(
      '#theme' => 'pager', 
      '#weight' => 5,
    );
  }
  else {
    $build['no_content'] = array(
      '#prefix' => '<p>', 
      '#markup' => t('There is currently no content classified with this term.'), 
      '#suffix' => '</p>',
    );
  }
  return $build;
}
6
kiamlaluno

Giống như ví dụ trước, ngoại trừ có thể rõ ràng hơn và bằng chứng trong tương lai để sửa đổi lợi nhuận từ taxonomy_term_page trong trình bao bọc thay vì sao chép chức năng bán buôn ban đầu:

function mymodule_menu_alter(&$items) {
  if (!empty($items['taxonomy/term/%taxonomy_term'])) {
    $items['taxonomy/term/%taxonomy_term']['page callback'] = '_custom_taxonomy_term_page';
  }
}

function _custom_taxonomy_term_page ( $term ) {

   $build = taxonomy_term_page( $term );

   // Make customizations then return
   unset( $build['term_heading']['#prefix'] ); 
   unset( $build['term_heading']['#suffix'] );

   return $build;
}
2
Pete B