drupal views – ¿Cómo anular el / taxonomy / term /% para términos específicos?

Pregunta:

Me gustaría anular la vista estándar /taxonomy/term/% para ciertos términos en un vocabulario dado en dos situaciones: una es para un término dado, otra es para todos los hijos de un término dado (así que si y solo si el término actual tiene XXX tiene padre, la vista debe activarse °.

Cuando se cumple una de las condiciones anteriores, esta vista debe activarse; de ​​lo contrario, la vista estándar debe mostrarse.

¿Cuál es la forma correcta de lograrlo?

EDITAR

Ejemplo: la página de taxonomía estándar ordena los avances por fecha de publicación y, por lo general, es lo que necesito, excepto todos los elementos secundarios del término "Regiones" (África, Asia, el Caribe, …) donde debo ordenarlos por país y proporcionar información expuesta. filtros.

No quiero crear una vista para cada uno de esos términos. Me gustaría crear una vista que se active solo cuando el término principal es Regiones. En todos los demás casos, se debe representar la vista estándar /taxonomy/term/% .

Respuesta:

No sé si esta es la forma 'correcta' de hacerlo, pero a menudo necesito hacer algo muy similar y lograrlo anulando la devolución de llamada de la página para el término de taxonomía estándar.

Esto implica implementar hook_menu_alter() así:

function MYMODULE_menu_alter(&$items) {
  $items['taxonomy/term/%taxonomy_term']['page callback'] = 'MYMODULE_taxonomy_page';
}

Luego, proporcionaría una devolución de llamada de página que ve a qué vocabulario pertenece el término actual y toma una decisión sobre si servir la página de taxonomía estándar o una vista:

function MYMODULE_taxonomy_page($term) {
  $build = array();

  // If we're on some vocabulary, serve a view
  if ($term->vid == function_to_get_vid()) {
    $build['term_page'] = array(
      '#markup' => views_embed_view('name_of_view', 'name_of_display', $arg1, $arg2)
    );
  }
  else {
    module_load_include('inc', 'taxonomy', 'taxonomy.pages');
    $build['term_page'] = taxonomy_term_page($term);
  }

  return $build;
}

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım