Pregunta de views con argumento.

Events happening in the community are now at Drupal community events on www.drupal.org.
rodibox's picture

Hola estimados miembros

Me interesa preguntar sobre el codigo para hacer un views con argumento.

Tengo varios tipos de contenidos , TPA , TPB , TPC y tengo varias vocabularios , V1; V2 .

Intento lograr hacer un block que cuando este la vista de un nodo TPA, tener un bloque que liste todos los nodos B, que tenga el mismo termino de taxonomia del V1 (ej) que el nodo TPA.

Bueno, hacer el bloque en el views son los pasos comunes que ustedes ya explicaron muchas veces.

Ahora en argumento , es donde no logro encontrar el correcto.

En argumento selecciono taxonomy term.--->

Taxonomy Term --

Provide default argument (pegue este codigo)

$node=node_load(arg(1));
if($node){
foreach($node->taxonomy as $term){$terms[]=$term->tid;}
return implode('+',$terms);
}else {return;}

Provide Basic Validation

Taxonomy term

----- V1 (selecciono vocabulario 1)

Esto me crea un bloque en principio me trae los nodos b, pero solo cuando voy al primer nodo (y con la coincidencia en el primer termino del vocabulario 1) Luego en el resto de los nodos TCA no trae resultados

Alguien podría ayudarme con hacer el argumento para listar , (por el nodo donde esta , url) traiga todos los nodos asociados por un termino de un vocabulario comun a ambos Tipos de contenido,

Desde ya muchas gracias

Comments

Decís que estás usando

Alexander N's picture

Decís que estás usando Taxonomy: Term, pero tu código retorna un string de Taxonomy IDs concatenados con "+". Cambia el tipo de argumento de tu View a Taxonomy: ID.

Asegurate de activar la opción Allow multiple terms per argument en los settings del argumento. Y probablemente también tendrás que activar la opción Reduce duplicates, porque si un nodo está relacionado al nodo actual por más de un término, va a aparecer más de una vez en la lista.

filtros

maikelm's picture

Hola

Igual pudieses usar filtros, incluyes el módulo view_php_filter y puedes incluir en los filtros código php que te retorne un arreglo con los nid de los nodos que deseas cargar.

saludos

Hola Rodibox Yo lo uso tal

-enzo-'s picture

Hola Rodibox

Yo lo uso tal como dices, hacer un bloque view para traer todos los nodos que comparten la misma taxonomía

Habilitando un argumento tipo term id como ves en esta imagen http://twitpic.com/22f569

Y luego le pones el codigo para cuando el termino no se pasa en la URL tome los datos del nodo actualmente visualizado como se ve en esta imagen http://twitpic.com/22f5qb

Aqui mi código

$node=node_load(arg(1));
if($node){
  foreach($node->taxonomy as $term){
      $terms[]=$term->tid;
    }
 
   if(empty($terms)) return ;
else return implode('+',$terms);

}else {return;}

Espero que te sirva de ayuda.

-enzo-

enzo - Eduardo Garcia

Hola

rodibox's picture

Muchas gracias por contestar y ayudarme

Confieso que no queria escribir hasta no probar todo lo que me dijeron.
Intente con el codigo que me pasaste enzo, y confiezo que no logro imprimir en el pie del bloque el terms que representa

En filtro del bloque le pong termino1, que es el id 55, entonces el bloque lista todos los nodos asociados por el termino1 (id=55)

Agrege tu codigo en Argument .

Ahora en el pie del bloque quiero imprimir ese numero,

<?php
print $terms
?>
, o como me sugeris que obtento el print del term id en el bloque.

Desde ya muchas gracias.

gracias!

hacmx's picture

Muchas gracias enzo, me ha servido tu codigo, y ahorrado un dia de trabajo, saludos!

Muchas gracias por tu

ivanhi's picture

Muchas gracias por tu ayuda.

Creo que estoy apunto de conseguir lo que propones en tu mensaje. Desde el preview de la vista, funciona perfectamente cuando le paso términos del vocabulario. El problema es cuando veo el bloque en una página que me tira el siguiente error:

Warning: Invalid argument supplied for foreach() en eval() (línea 3 de /home/ispgrupo/public_html/videosempresas/sites/all/modules/views/plugins/views_plugin_argument_default_php.inc(50) : eval()'d code).
Notice: Undefined variable: terms en eval() (línea 6 de /home/ispgrupo/public_html/videosempresas/sites/all/modules/views/plugins/views_plugin_argument_default_php.inc(50) : eval()'d code).
Warning: implode() [function.implode]: Invalid arguments passed en eval() (línea 6 de /home/ispgrupo/public_html/videosempresas/sites/all/modules/views/plugins/views_plugin_argument_default_php.inc(50) : eval()'d code).
Warning: Invalid argument supplied for foreach() en eval() (línea 3 de /home/ispgrupo/public_html/videosempresas/sites/all/modules/views/plugins/views_plugin_argument_default_php.inc(50) : eval()'d code).
Notice: Undefined variable: terms en eval() (línea 6 de /home/ispgrupo/public_html/videosempresas/sites/all/modules/views/plugins/views_plugin_argument_default_php.inc(50) : eval()'d code).
Warning: implode() [function.implode]: Invalid arguments passed en eval() (línea 6 de /home/ispgrupo/public_html/videosempresas/sites/all/modules/views/plugins/views_plugin_argument_default_php.inc(50) : eval()'d code).

Estoy utilizando Views 3 y Drupal 7. Por si tiene algo que ver.

Muchas gracias por tu ayuda.

Y si fueran 2 taxonomías?

jorgemvd's picture

He visto la solución que han dado al problema y me gustaría hacer una pregunta relacionada.

Yo estoy usando esa misma solución en un sitio que estoy desarrollando sobre series (http://cultfiction.es) para relacionar noticias con ficha técnica, otras noticias sobre el mismo tema, frases, etc.

Pero esta solución solo me sirve si usas una sola Taxonomía, he intentado modificarlo para usar dos Taxonomías pero mis conocimientos de PHP son nulos y no he sabido como hacerlo.

Es decir quiero que por ejemplo.
Noticia: "Empieza la 5ta temporada de Dexter"
Taxonomía [series] Term "Dexter"
Taxonomía [temporada] Term "5ta"

Quiero hacer una view-block que visualice otra noticias relacionadas con los dos Term de las dos Taxonomías es decir "Dexter" y "5ta"

¿Podría alguien darme una pista de como hacerlo?

Gracias

Hola Jorge Deberia funcionar,

-enzo-'s picture

Hola Jorge

Deberia funcionar, por que si ves el codigo lo que pongo es retornar los terminos de un nodo, sin importar sus vocabularios, asi que deberia funcionarte.

Mira si no existe un filtro por vocabulario que te este molestando.

nos vemos

enzo

enzo - Eduardo Garcia

Pues no funciona, supongo que debe ser otra cosa

jorgemvd's picture

Le he dado mil vueltas al view y sigue listando solamente como si solo hubiera una taxonomía relacionada.

Lo único raro que veo que en el enlace de la vista generada por ejemplo para los term 18 y 3 aparecen los caracteres "%2B"
http://cultfiction.es/noticias_relacionadas/18%2B3

No debería quedar el enlace http://cultfiction.es/noticias_relacionadas/18/3 ?

Puede ser que sea

eloivaque's picture

Puede ser que sea esto?

Tienes que ir a las opciones del argumento. allí hay una opción que se llama "Permitir términos multiples por argumento". Una vez marcado esto, te permitirà multiple argumentos de manera que la url que te tendira que salir es http://cultfiction.es/noticias_relacionadas/18+3 con un + y no un "/"

No me funciona, ayuda por favor

A.Lliso's picture

Yo pongo el codigo del amigo Enzo y tansiquiera me aparece el bloque, pero en cuanto quito el argumento entonces si que sale, pero claro salen todos los nodos, de todas formas por si me pueden ayudar lo que yo pretendo es, tener como un menu principal, que tenga varias categorias y dentro de cada categoria varias secciones (hasta ahi lo he hecho con vistas y mas o menos claro), pero luego cuando seleccione la categoria y seccion, quiero que en el contenido principal aparezcan todos lo nodos en forma de resumen segun su taxonomia, hasta aqui tambien funciona, pero lo que NO logro conseguir es que en el lateral quiero que asu vez me aparezca un listado con el titulo de todos los nodos que pertenecen a es m¡smo termino.GRACIAS

Argentina

Group organizers

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds:

Hot content this week