Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » Drupal »

Fusionar nodos en una vista

Estas en el tema de Fusionar nodos en una vista en el foro de Drupal en Foros del Web. Hola comunidad; Estoy desarrollando una aplicación en la que he de mostrar campos cck de distintos tipos de contenido como si fuese un solo nodo. ...
  #1 (permalink)  
Antiguo 13/08/2009, 07:10
Avatar de luismiramos  
Fecha de Ingreso: agosto-2009
Mensajes: 37
Antigüedad: 14 años, 8 meses
Puntos: 0
Fusionar nodos en una vista

Hola comunidad;

Estoy desarrollando una aplicación en la que he de mostrar campos cck de distintos tipos de contenido como si fuese un solo nodo. Me explico:
- Tengo 3 tipos de contenidos
- Cada tipo de contenido tiene un campo cck
- Cada dia se crea un nodo de cada tipo de contenido
- He de mostrar los nodos de cada dia, como si fuese un solo nodo que incluye el campo cck y el cuerpo .

Llevo días dándole vueltas a esto y no consigo hacer nada que me arroje resultados satisfactorios.

Agradecería que me orientaseis a resolver este problema
Un cordial saludo
  #2 (permalink)  
Antiguo 13/08/2009, 17:43
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 5 meses
Puntos: 890
Respuesta: Fusionar nodos en una vista

Se me ocurre hacerlo con Views, pero hay un detalle(que relaciona los nodos entre si para que se fusionen?)
Y me entro la curiosidad, por que estas encarando hacerlo de esa manera? Quizas se te pueda ayudar mejor si explicaras con mas detalles, quizas una simple consulta sql podria solucionarlo, pero como digo mas detalles.
Saludos
__________________
Drupal Argentina
  #3 (permalink)  
Antiguo 14/08/2009, 09:25
Avatar de luismiramos  
Fecha de Ingreso: agosto-2009
Mensajes: 37
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Fusionar nodos en una vista

Ante todo, gracias y mil gracias por responder.
No hay mucho más de lo que he explicado, y probablemente tengas toda la razón, incluso yo llegué a la conclusión que tendria que hacer una consulta mysql, pero... ¿Desde donde tengo que hacer esta consulta? no he encontrado ningún sitio, he de crear un archivo?, y por otro lado, me pierdo con las tablas y campos de la base de datos drupal. Mis conocimientos en php y mysql no son muy elevados, me defiendo, pero solo eso, cuando quise ver la estructura de Drupal, me encontre con algo bestial que no terminé de comprender. Si puedes ayudarme te lo agradecería enormemente.
El ejemplo es el siguiente:
- Existen 3 tipos de contenido, cada uno de ellos tiene su cuerpo y varios campos cck
- cada día se escriben 3 nodos de cada uno de los distintos tipos de contenido, o sea, uno por la mañana, uno por la tarde y otro por la noche de cada tipo de contenido.
- Bien, pue lo que necesito es crear una "vista" o consulta que muestre la "fusión de los tres nodos de la mañana de cada uno de los tipo de contenido, así como de la tarde y noche.
Un cordial saludo y repito mi gratitud por tu respuesta
  #4 (permalink)  
Antiguo 23/08/2009, 03:47
Avatar de luismiramos  
Fecha de Ingreso: agosto-2009
Mensajes: 37
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Fusionar nodos en una vista

Creo que he avanzado un poco,

- He activado el módulo PHP filter
- He creado un nodo de tipo de contenido "Página"
- He escrito código php y funciona
- Pero aún no he conseguido que funcionen las consultas mysql

Podríais ponerme un ejemplo sencillo para ver el formato?
gracias
  #5 (permalink)  
Antiguo 23/08/2009, 09:01
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 5 meses
Puntos: 890
Respuesta: Fusionar nodos en una vista

No hay nada especial al hacer una consulta, usa db_query http://api.drupal.org/api/function/db_query
Ejm: Aca almaceno en un array secuencial e imprimo el campo name de los terminos de una taxonomia donde el vocabulario(id) es 1:

<?php $sql = db_query("SELECT name FROM term_data where vid=1");
while ($c = db_fetch_object($sql)) {

print $c->name;

}
?>

Pero insisto, por que fusionar tres nodos? Intentaste hacerlo on views, la verdad ahora no tengo mucho tiempo si no me pondria a trastear un poco el views, estoy casi seguro de que se podria hacer con ese modulo.

PD: Corre peligro al usar un nodo para hacer experimentos con php(aunque lo solucionas borrando el nodo desde la bd, pero no es lo ideal), usa la misma plantilla node.tpl.php alli experimenta, si algo sale mal solo lo editas.
__________________
Drupal Argentina
  #6 (permalink)  
Antiguo 23/08/2009, 11:37
Avatar de luismiramos  
Fecha de Ingreso: agosto-2009
Mensajes: 37
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Fusionar nodos en una vista

Me interesa fusionar porque cada nodo lo realiza una persona distinta y quien recibe la información necesita un resumen de campos cck y cuerpo de los 3 nodos y he de mostrarlo como información única, como si se hubiese realizado todo en un solo nodo. Lo he intentado con views pero separa los nodos, no he conseguido hacerlo con views, (que no quiere decir que no se pueda, sólo que yo no lo he conseguido)

Continúo con el problema con SQL, para probar la estructura de la consulta he hecho lo siguiente:
- He creado una vista que me arroja el siguiente resultado:

CO: 10
Observaciones:

cantidad de CO 10


Hasta aquí correcto.
Despues he copiado el código sql que me muestra la view:

SELECT node.nid AS nid,
node_data_field_co.field_co_value AS node_data_field_co_field_co_value,
node.type AS node_type,
node.vid AS node_vid,
node_revisions.body AS node_revisions_body,
node_revisions.format AS node_revisions_format
FROM node node
LEFT JOIN content_type_parte1 node_data_field_co ON node.vid = node_data_field_co.vid
LEFT JOIN node_revisions node_revisions ON node.vid = node_revisions.vid
WHERE node.type in ('parte1')

Después he creado un módulo con el siguiente código, del cual la consulta la extraigo de la vista de views, o sea, este código de arriba.

<?php
$query ="
SELECT node.nid AS nid,
node_data_field_co.field_co_value AS node_data_field_co_field_co_value,
node.type AS node_type,
node.vid AS node_vid,
node_revisions.body AS node_revisions_body,
node_revisions.format AS node_revisions_format
FROM node node
LEFT JOIN content_type_parte1 node_data_field_co ON node.vid = node_data_field_co.vid
LEFT JOIN node_revisions node_revisions ON node.vid = node_revisions.vid
WHERE node.type in ('parte1')
";
$result = db_query ($query);
while ($result_list=db_fetch_object($result)){
foreach ( $result_list as $array => $muestra ){
}
print($muestra);
}

el resultado que arroja es

1

y me devuelve un 1 por cada nodo existente. En este caso como que solo hay un nodo que cumple la requisitos me devuelve solo un 1

valor que no es el esperado.
Que estoy haciendo mal?

Última edición por luismiramos; 23/08/2009 a las 12:27
  #7 (permalink)  
Antiguo 23/08/2009, 14:46
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 5 meses
Puntos: 890
Respuesta: Fusionar nodos en una vista

Como lo imaginaba con el views lo puedes hacer tranquilamente:
Primero necesitas definir lo siguiente:

a. los campos que quieres mostrar
b. Relacionar los nodos(usar taxonomias)

No soy muy bueno creando tutoriales, pero quizas esta imagen te ayude:



Cuando llames mediante la ruta creada se mostraran los nodos fusionados con los campos que le indicaste, el argumento sera el nombre de la taxonomia, pensando mejor si solo se va a crear un solo nodo por tipo de contenido por dia, en argumento solo puedes usar la fecha.

__________________
Drupal Argentina
  #8 (permalink)  
Antiguo 24/08/2009, 08:16
Avatar de luismiramos  
Fecha de Ingreso: agosto-2009
Mensajes: 37
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Fusionar nodos en una vista

Debo ser muy necio porque no me funciona.

He seguido los siguientes pasos:
- He creado 2 tipos de contenido con un campo cck cada uno
- En taxonomias he creado un vocavulario "taxonomiafusion" y le he adjudicado los tipos de contenidos creados.
- He agregado el termino "fusiontaxonomia"
- He creado un nodo para cada tipo de nodo

img195.yfrog.com/i/fusion0.jpg/

-He creado una vista tipo nodo

img266.imageshack.us/img266/7440/fusionc.jpg

y no me muestra el resultado esperado. Si no te importa, por favor repasa mis pasos a ver donde fallo, estoy empezando a estar desesperado. Muchas gracias por tu tiempo.
  #9 (permalink)  
Antiguo 24/08/2009, 10:24
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 5 meses
Puntos: 890
Respuesta: Fusionar nodos en una vista

Recuerda que creaste una nueva vista(pagina) que hereda de default tienes que darle una ruta
No hace falta que valides la taxonomia.
Fijate si te ayuda:
__________________
Drupal Argentina
  #10 (permalink)  
Antiguo 24/08/2009, 14:34
Avatar de luismiramos  
Fecha de Ingreso: agosto-2009
Mensajes: 37
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Fusionar nodos en una vista

Sigue sin funcionar, me muestra lo mismo. Date cuenta que los nombres de los campos cck en mi caso son distintos para cada tipo de continido. Fijándome en tu ejemplo, a ti el campo cck que te aparece es el mismo "extracto" y el campo "otro campo" no te lo muestra. Si no es mucho abusar te pediría que pruebes con el ejemplo que te muestro en las imagenes del post anterior y verás lo que te digo.
Es más, si en el "Basic settings" cambio el Style a HTML list separa los nodos.

Última edición por luismiramos; 24/08/2009 a las 14:39
  #11 (permalink)  
Antiguo 24/08/2009, 16:28
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 5 meses
Puntos: 890
Respuesta: Fusionar nodos en una vista

Tengo dos tipos de nodo page e history

en history cree un cck -> otro campo field_otro_campo
en page cree un campo - > extracto field_extracto

Ves que la vista dice:

cuerpo: blah blah
extracto: blah blah.... porque es el titulo que le indique que me muestre cuado agregue que
campos mostrar en "fields"

Si te das cuenta solo es igual el nombre "extracto" pero el contenido es distinto por que esta mostrando el contenido de ambos campos cck
__________________
Drupal Argentina
  #12 (permalink)  
Antiguo 26/08/2009, 04:52
Avatar de luismiramos  
Fecha de Ingreso: agosto-2009
Mensajes: 37
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Fusionar nodos en una vista

Pues le he dado mil vueltas y no consigo que me funcione, de todas formas, muchas gracias por tu tiempo y paciencia. Aun así continuaré intentándolo, si lo consigo te cuento.
Un cordial saludo
  #13 (permalink)  
Antiguo 11/09/2009, 02:35
Avatar de luismiramos  
Fecha de Ingreso: agosto-2009
Mensajes: 37
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Fusionar nodos en una vista

Al fin he conseguido mi objetivo, para ello he creado una consulta con PHP como me indicó Nucklear.
Para ello he activado el módulo "PHP filter" del core opcional.
Creo un nodo tipo página y selecciono "PHP code" en "Formato de entrada" y escrito el siguiente código en el cuerpo.

<?php
$consulta = "
SELECT
node_revisions.body,
' cuerpo
content_type_tipo1.field_campoccktipo1_value
' campo cck donde campoccktipo1 es el nombre del campo
FROM
node_revisions
Inner Join node ON node_revisions.vid = node.vid
Inner Join content_type_tipo1 ON node.vid = content_type_tipo1.vid
WHERE
node.type = 'tipo1'
' contenido de tipo 1 donde tipo1 es el nombre del tipo de contenido
";
$contador = 0;
pongo un contador a 0 que me llevará la cuenta de los campos mostrados
$result = db_query ( $consulta );
while( $story_list = db_fetch_object ( $result )){
foreach ( $story_list as $array => $muestra ){
++$contador;
sumo 1 al contador
print ($muestra);
echo "<br>" ;
}
If ($contador==4) {
break;
cuando el contador llega a 4 campos salta el bucle foreach y deja de mostrar campos
}
}

aqui realiza lo mismo con el tipo de contenido 2
$consulta2 = "
SELECT
node_revisions.body,
content_type_tipo2.field_campoccktipo2_value
FROM
node_revisions
Inner Join node ON node_revisions.vid = node.vid
Inner Join content_type_tipo2 ON node.vid = content_type_tipo2.vid
WHERE
node.type = 'tipo2'
";
$contador = 0;
$result2 = db_query ( $consulta2 );
while( $story_list2 = db_fetch_object ( $result2 )){
foreach ( $story_list2 as $array => $muestra2 ){
++$contador;
print ($muestra2);
echo "<br>" ;
}
If ($contador==4) {
break;
}
}
?>
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:04.