Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/01/2014, 06:11
JustinKO
 
Fecha de Ingreso: junio-2012
Ubicación: Madrid
Mensajes: 339
Antigüedad: 11 años, 10 meses
Puntos: 47
Duda eterna con arrays, objetos, template, nodo teaser…

Hola a todos,

Hoy traigo una duda que me persigue desde siempre y que en otras ocasiones a base de prueba-error prueba-error conseguí solucionar pero en esta ocasión no lo consigo.

Sé que es algo básico en programación, pero no soy programador y veces estas cosas me pueden. Al grano:

Estoy con un catálogo de productos, que lo he seccionado con taxonomías. El caso es que cuando abro la página de la taxonomía en cuestión, supongamos "aspiradores", me aparecen los campos de la taxonomía y debajo el listado en formato teaser (con el leer más) de productos que contiene esa taxonomía.
Lo que me aparece es un listado con el nombre del producto, el resumen del cuerpo de texto y el leer más. Y lo que necesito es el nombre y la imagen solamente.

Borrar el resumen y el leer más lo he hecho mediante el tpl del node en cuestión (node--producto.tpl.php), he borrado las lineas de código del "leer más" y con hide($content['body']); oculto todo la descripción.

Mis dudas son.
  1. No sé si hay alguna manera de configurar que el teaser te añada otro campo que no añada por defecto, en este caso el de la imagen
  2. En caso de no poderse hacer, estoy trasteando con el tpl y aquí está mi pregunta de programación: ¿cómo obtengo un dato de este array/objeto o lo que sea que nunca lo tengo claro?

Hago un var_dump($content); del teaser y me aparece lo siguiente (he borrado mucho, no hace falta que lo leáis todo):

Código PHP:
Ver original
  1. array(3) {
  2.   ["links"]=>
  3.   array(6) {
  4.    
  5.     // Aquí he borraddo los 6 arrays para simplificar esto
  6.    
  7.   }
  8.   ["body"]=>
  9.   array(17) {
  10.     ["#theme"]=>
  11.     string(5) "field"
  12.     ["#weight"]=>
  13.     int(0)
  14.     ["#title"]=>
  15.     string(12) "Descripción"
  16.     ["#access"]=>
  17.     bool(true)
  18.     ["#label_display"]=>
  19.     string(6) "hidden"
  20.     ["#view_mode"]=>
  21.     string(6) "teaser"
  22.     ["#language"]=>
  23.     string(3) "und"
  24.     ["#field_name"]=>
  25.     string(4) "body"
  26.     ["#field_type"]=>
  27.     string(17) "text_with_summary"
  28.     ["#field_translatable"]=>
  29.     string(1) "0"
  30.     ["#entity_type"]=>
  31.     string(4) "node"
  32.     ["#bundle"]=>
  33.     string(8) "producto"
  34.    ["#object"]=> // ___________Este es el objeto_____________*********
  35.     object(stdClass)#127 (39) {
  36.      ["vid"]=>
  37.       string(1) "9"
  38.       ["uid"]=>
  39.       string(1) "1"
  40.       ["title"]=>
  41.       string(6) "aspiraddorXXFG35"
  42.       ["log"]=>
  43.       string(0) ""
  44.       ["status"]=>
  45.       string(1) "1"
  46.       ["comment"]=>
  47.       string(1) "1"
  48.       ["promote"]=>
  49.       string(1) "0"
  50.       ["sticky"]=>
  51.       string(1) "0"
  52.       ["nid"]=>
  53.       string(1) "9"
  54.       ["type"]=>
  55.       string(8) "producto"
  56.       ["language"]=>
  57.       string(2) "es"
  58.       ["created"]=>
  59.       string(10) "1383678159"
  60.       ["changed"]=>
  61.       string(10) "1389138221"
  62.       ["tnid"]=>
  63.       string(1) "0"
  64.       ["translate"]=>
  65.       string(1) "0"
  66.       ["revision_timestamp"]=>
  67.       string(10) "1389138221"
  68.       ["revision_uid"]=>
  69.       string(1) "1"
  70.       ["body"]=>
  71.       array(1) {
  72.         ["und"]=>
  73.         array(1) {
  74.           [0]=>
  75.           array(5) {
  76.             ["value"]=>
  77.             string(276) "
  78.  
  79. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lorem risus, ultrices eget dictum sit amet, pretium vel mi. Morbi ac facilisis turpis. Nam ut quam at dolor condimentum viverra a et lacus. Sed eu dictum est, ac luctus erat. Sed sollicitudin tincidunt nisi, et ullamcorper quam rutrum non.
  80.  
  81. "
  82.             ["summary"]=>
  83.             string(0) ""
  84.             ["format"]=>
  85.             string(13) "filtered_html"
  86.             ["safe_value"]=>
  87.             string(275) "
  88.  
  89. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam lorem risus, ultrices eget dictum sit amet, pretium vel mi. Morbi ac facilisis turpis. Nam ut quam at dolor condimentum viverra a et lacus. Sed eu dictum est, ac luctus erat. Sed sollicitudin tincidunt nisi, et ullamcorper quam rutrum non.
  90.  
  91. "
  92.             ["safe_summary"]=>
  93.             string(0) ""
  94.           }
  95.         }
  96.       }
  97.      ["field_imagen_principal"]=> // ___________Este es el campo______________****
  98.       array(1) {
  99.         ["und"]=>
  100.         array(1) {
  101.           [0]=>
  102.           array(13) {
  103.             ["fid"]=>
  104.             string(2) "86"
  105.             ["alt"]=>
  106.             string(0) ""
  107.             ["title"]=>
  108.             string(0) ""
  109.             ["width"]=>
  110.             string(3) "255"
  111.             ["height"]=>
  112.             string(3) "264"
  113.             ["uid"]=>
  114.             string(1) "1"
  115.             ["filename"]=>
  116.             string(10) "aspiradorXXFG35.gif"
  117.             ["uri"]=>
  118.             string(47) "public://imagenes_catalogo/productos/aspiradorXXFG35"
  119.             ["filemime"]=>
  120.             string(9) "image/gif"
  121.             ["filesize"]=>
  122.             string(5) "17713"
  123.             ["status"]=>
  124.             string(1) "1"
  125.             ["timestamp"]=>
  126.             string(10) "1385026034"
  127.             ["rdf_mapping"]=>
  128.             array(0) {
  129.             }
  130.           }
  131.         }
  132.       }
  133.      
  134. }


Sé sin problemas obtener datos del primer "nivel" (no se cómo lo llamáis), ejemplo:

Código PHP:
Ver original
  1. print render($content['body']["#title"]);

Y me imprimiría "descripcion". Pero lo que no entiendo cómo se hace y no soy capaz de hacer después de mucho darle vueltas, es hacer un render al campo ["field_imagen_principal"] que está dentro del [#object] que os he marcado con comentarios.

Siempre me da un mensaje de error
Fatal error: Cannot use object of type stdClass as array in ……

Siento la extensión de mi mensaje pero no he podido resumirlo más para explicarme, y de vedad, le he dado muchas, muchas, muchas vueltas antes de preguntar…

Un saludo y muchas gracias