Mostrar bloque por termino de taxonomia en Drupal
En esta oportunidad describo el proceso que se puede seguir para controlar la visibilidad de un bloque dependiendo de un termino específico de una taxonomía
Lo primero que necesitamos saber es el ID del término sobre el que se va a mostrar el bloque, de esta forma si un nodo tiene asociado el término identificado por el ID ($displayTermID) seleccionado, entonces se va a mostrar el bloque que estamos configurando.
Para conocer el ID del termino vamos a www.ejemplo.com/admin/content/taxonomy/list y elegimos el vocabulario sobre el que está creado el termino que vamos a utilizar,
Luego hacemos clic sobre Lista de terminos
Buscamos el termino deseado y hacemos clic sobre el
En la URL de la página que se muesta vemos que el ID es el número que aparece al final del enlace. http://www.ejemplo.com/taxonomy/term/1 donde 1 es el ID. Si la URL no tiene la estructura taxonomy/term/# pueden ver el ID al hacer clic sobre editar de la lista de terminos.
el código lo deben pegar en la sección Page specific visibility settings con la opción de código PHP activada como muestra la imagen.

Por último en la edición del bloque agregamos el siguiente código cambiando adecuadamente la variable $displayTermID =1;
<?phpif ( arg(0) == 'node' and is_numeric(arg(1)) and arg(2) == FALSE ) {// Vocabulary term ID for which to display the block:$displayTermID =1; // Get all taxonomy terms for current node:$currNodeTerms = taxonomy_node_get_terms(node_load(arg(1)));// If there are no terms, fail-fast:if (is_null($currNodeTerms) || 0 == count($currNodeTerms)) { return FALSE;}// For each term of the current node, get all the ancestor terms:foreach($currNodeTerms as $term) { $ancestors = taxonomy_get_parents_all($term->tid); // Check for each ancestor term whether it is the term we are looking for. // If it is, return TRUE immediately: if (!is_null($ancestors) && 0 < count($ancestors)) { foreach($ancestors as $ancestor) { if ($displayTermID == $ancestor->tid) { return TRUE; } } }}}// If we didn't find our term of interest, return FALSE:return FALSE;?>

Comentarios
Enviar un comentario nuevo