코어를 해킹하지 않고 taxonomy_term_page ()의 출력을 다시 작성하십시오.


10

Drupal 7에서 taxonomy.pages.inc는을 포함 하여 분류 제목 표제 주위에 taxonomy_term_page()배치합니다 <div class="term-listing-heading">.

테마에서 taxonomy_term_page () 의 출력을 어떻게 다시 작성하여 코어를 해킹하지 않고 DIV를 제거 할 수 있습니까?

tpl.php 파일이 없어서 taxonomy_term_page()테마를 훨씬 쉽게 만들 수 있기 때문에 놀랍습니다 .


답변:


11

전처리 페이지를 사용하여 다음과 같이 할 수 있습니다.

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']);
  }
}

당신의 주제에 template.php

system_main사이트 설정에 따라 다른 것으로 불릴 수 있다고 생각 합니다.


6

메뉴 콜백이므로 해당 페이지에 대해 호출 된 메뉴 콜백을 변경하기 위해 모듈에서 hook_menu_alter () 를 구현할 수 있습니다 .

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;
}

감사! 별도의 모듈이 필요하지 않으므로 googletorp의 방법을 선호합니다. 그러나 더 많은 제어권을 제공하므로 귀하의 제안은 훌륭합니다. 감사!
big_smile

내가 기억 hook_menu_alter()하는 한 테마에서도 구현할 수 있습니다. Drupal 7에서 테마는 alter hooks를 구현할 수 있습니다.
kiamlaluno

2

앞의 예제와 마찬가지로 원래 함수 도매를 복사하는 대신 taxonomy_term_page의 리턴을 랩퍼에서 수정하는 것이 더 깨끗하고 미래의 증거 일 수 있습니다.

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;
}

아마도 가장 좋은 방법 일 것입니다.
Horatio Alderaan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.