Colocar un bloque dentro del campo (field) body o cuerpo de un nodo para Drupal 7

We encourage users to post events happening in the community to the community events group on https://www.drupal.org.
elpoderosoperu's picture

Hola, hace días busco una solución y nada. Lo que pretendo es colocar un bloque ( de últimas noticias o articulos relacionados) dentro de un nodo, encontré una solución a medias poniendo el siguiente código en node.tpl.php

<?php
 
print render(module_invoke('views', 'block_view', 'pruebas-block_1'));
?>

El problema es que pone el bloque encima o debajo del campo body o cuerpo del nodo (que incluye el Titular, foto, fecha, etc), y lo que en realidad yo quiero es poner esto al costado de la foto como muestra la imagen adjunta a este mensaje.

He intentado de todo, desde cck blocks (que hace lo opuesto porque pone fields en bloque) hasta Display Content, pero descarté este último nodo porque me reventaría la base de datos ya que en realidad necesito un código limpio.

Espero me apoyen saludos

AttachmentSize
dibujo23.jpg199.06 KB

Comments

Podrias probar descomponiendo

antoniocuga's picture

Podrias probar descomponiendo la variable $content que imprimes en el node, asi podrias obtener el orden de tus elementos y podrias poner el invocar al bloque donde quieras. Tambien esta la opcion de hacer un modulo donde usando el hook_view puedas preprocesar tus variables y añadir esa opcion en la posicion que desees. La primera es la mas sencilla.

Hola..¿cómo puedo descomponer

elpoderosoperu's picture

Hola..¿cómo puedo descomponer la variable $content? entiendo que esa variable está en el node.tpl.php, pero la idea es dividirla en título, imagen, fecha, etc... Gracias por el apoyo

Por ejemplo, si solo quieres

antoniocuga's picture

Por ejemplo, si solo quieres imprimir el campo body del $content hacer lo siguiente.

<?php
print render($content['body']);
?>

Podrias usar el modulo Devel para saber el nombre de cada campo y ponerlo.

ejem.

<?php
print render($content['field_campo_fecha']);
?>

De esa manera puedes darle la estructura que quieres y arreglarlo con CSS.

hola elpoderosoperu :)

cnolasco's picture

Se me ocurren dos cosas segun tu nivel de experiencia con drupal:
1ra: la mas simple, coloca tu code dentro de una DIV y con estilos posicionala donde te sea necesario.
2do: si conoces un poco mas de drupal, agrega areas dentro de tu template, genera dentro de body ,segun el tipo de node, un top-body donde pongas el teaser del node, un left-body donde coloques el bloque que mencionas y un right-body donde coloques el resto del content del node.

Pero basicamente lo que te falta es tocar los estilos :)

saludos

Una pregunta

eliasdelatorre's picture

Este bloque lo quieres desplegar solamente en cierto tipo de contenido?

Algo así como que el bloque se muestre después del título y body del tipo de contenido "Artículo", pero antes de la imagen y los links, por ejemplo?

O aparece siempre en todos los tipos de contenido?

Hola Elias, te cuento..El

elpoderosoperu's picture

Hola Elias, te cuento..El bloque lo quiero al costado derecho o izquierdo del texto de un nodo, es decir bajo el título, la fecha y la imagen. Actualmente mis publicaciones sólo están en tipo de contenido artículo.

DisplaySuite

isaakordonez's picture

Hola,

Te recomiendo usar Display Suite http://drupal.org/project/ds

Con eso resolveras lo que necesitas:

https://github.com/jmolivas/Display-Suite esa es una buena presentacion sobre lo que puedes hacer con Display suite.

Espero resuelvas tu problema con este modulo

Saludos.

Hola Kaasi, use Display

elpoderosoperu's picture

Hola Kaasi, use Display Suite, el problema es que me recarga la base de datos y me quita memoria, por eso lo descarté..

Usa krumo

eliasdelatorre's picture

Ah, ya veo.

Si display suite no es opción entonces puedes hacer un template especial para tu tipo de contenido.

Si estás usando Drupal7 puedes copiar tu archivo node.tpl.php y renombrarlo node--articulo.tpl.php

dentro de ese archivo borra la línea que imprime el $content y reemplaza esa línea por
krumo($content)
esto vá a hacer que la siguiente vez que cargues tu nodo aparezca desplegado como un arreglo de campos, de esa manera puedes explícitamente desplegar los campos en el orden que quieras, puedes poner primero el body, como dijo antonio, y debajo imprimir tu bloque, después de eso seguir rendereando los demás fields que componen tu nodo.

No estoy seguro de darme a entender bien, así que si tienes alguna duda hazla saber.

Saludos.

módulos

ceaucari's picture

con EVA pueses hacerlo también http://drupal.org/project/eva
o este otro http://drupal.org/project/views_field_view
o este http://drupal.org/project/viewfield
o con panels y page manager, puedes modificar todo el contenido y el orden en que aparecen los campos de tu nodo aqui un video (un poco largo) que explica page manager
http://www.youtube.com/watch?v=gV0xs89mIOY&feature=related

Saludos

Solucionado, viewfield es lo que necesitaba

antoniomanco's picture

Encontré la solución con http://drupal.org/project/viewfield, lo que hace este módulo es imprimir una vista como si fuera un campo, así de simple, para ordenar la distribución de los campos usé http://drupal.org/project/field_group, en una misma linea puse el body, artículos relacionados y botones sociales, luego los ordené editando la CSS.

Gracias