CCK mező megjelenítése saját modulom page_callback függvényében

aboros képe

Egy saját készítésű modulommal egy bizonyos nodetípus megjelenítéséhez a hook_menu hurokkal MENU_LOCAL_TASK típusú menüpontot adok hozzá, ahol a nodeban cckval tárolt filefield mezőket (csv fileok) jelenítem meg a page_callback -ben, theme('table'.. módon. (ezért is érdemes dugra járni ugye;)

Az ilyen típusú nodeokban van egy field_fokep nevű mező, ezt szeretném megjeleníteni.

'Viszonylag' sikerült is, így:
menüpontom page_callback függvényében ez:

..
$output .= theme('imagefield_item', $node->field_fokep[0]);
..

Igenám, de ez úgy rakja ki a képet, hogy nem veszi figyelembe, hogy mit állítottam be a tartalomtípusom mezőinek megjelenítési beállításainál.

Azt olvastam, hogy:

The 'view' operation (handled by the Content module) constructs the $node in a way that you can use drupal_render() to display the formatted output for an individual field.

i.e. print drupal_render($node->field_foo);

de ha ezt csinálom:

$output .= drupal_render($node->field_fokep);

akkor eltörik az oldal, a következő hibával:

Fatal error: Unsupported operand types in /home/aboros/public_html/renault/includes/common.inc on line 2827

Kérdésem az lenne, hogyan tudnám elérni, hogy a képem úgy jelenjen meg, ahogy a cckban beállítottam, tehát pl ilyen-olyan imagecache sablon + lightbox mondjuk? Hogyan tudom "lerenderelni" ezt a mezőt? Vagy bármelyiket?

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
Illyés Edit képe

A szerver logban mi van? Vagy: a "Fatal error: Unsupported operand types" után lekért oldalra mit ír ki? Elvileg ott ki kell tennie a figyelmeztetéseket, hogy pontosan miért nem eszi meg a drupal_render() az átadott tömböt.

0
0
aboros képe

site5 pilótafülke adminfelületén még nem sikerült olyan logra lelnem, amiben szerepelne ez a hiba.. :)

viszont ha a node.tpl.php -ban hívom így, hogy

print drupal_render($node->field_fokep);

akkor is ugyan azt a hibát kapom. :(
nyomozok vadul tovább, találtam már a lightboxban olyan sminkfüggvényt, ami visszaadná szépen a képemet, de annak meg kéne mondanom, hogy melyik imagecache presetet használja és az pedig nincsen benne a mező tömbjében sajnos.

valami majd lesz, olyan még nem volt, hogy nem lett valami, csak úgy megörültem, hogy ez ilyen egyszerű, hogy drupal_render, aztán hoppá, mégse. :(

0
0

-
clear: both;

Illyés Edit képe

Ha beállítod, hogy a képernyőre is írja a hibákat, akkor a törött oldal után elsőként lekért oldalra mit ír ki? (Szép hosszú rózsaszín warningnak kellene megjelennie.) Egyébként mi van a tömbben? print_r($node->field_fokep)?

0
0
aboros képe

ez van benne:

Array (
[0] => Array (
  [fid] => 43
  [list] => 1
  [data] => Array ( )
  [uid] => 1
  [filename] => Galerie_photos2.jpg
  [filepath] => sites/default/files/renault_modellek/fokepek/Galerie_photos2.jpg
  [filemime] => image/jpeg
  [filesize] => 88087
  [status] => 1
  [timestamp] => 1229685583
  )
) 

a képernyőre írt hibajelentés szerint rossz argumentumot kap egy foreach:

warning: Invalid argument supplied for foreach() in /home/aboros/public_html/renault/includes/common.inc on line 2814.

az a bajom, hogy a modulom szintjén a mező tömbjében nincs meg a 'view' érték, ahogy mondjuk node.tpl.php szintjén már megvan. nem szeretném a modulban megadni, hogy melyik imagecache sablonnal jelenjen meg a kép, az lenne az igazi, ha azzal a formatterrel jelenne meg, amit a cckban beállítok. az a fura, hogy a d.o -s doksi szerint (cck/developer.txt -ben volt a link) ezt a drupal_render -el tudom megcsinálni, de mégse. vagy csak én nem értek valamit rendesen.

0
0

-
clear: both;

tolmi képe

Nem itt lehet a gond, mert ha megnézed mi van a common.inc:2814-en, akkor ezt leled (drupal_render egyébként):

  // Make any final changes to the element before it is rendered. This means 
  // that the $element or the children can be altered or corrected before the
  // element is rendered into the final text. 
  if (isset($elements['#pre_render'])) { 
    foreach ($elements['#pre_render'] as $function) { 
      if (function_exists($function)) { 
        $elements = $function($elements); 
      } 
    } 
  }

Tehát alacsony szinten a gondja hogy a '#pre_render' az nem array(). Ezek után az a kérdés hogy honnan gondolja hogy a $node->field_fokep-ben (amit beküldtél) van '#pre_render'? :)

Ui.: Ajánlom figyelmedbe az XDebug-ot vagy hasonló finomságot, azzal lehet léptetni a kódot.
Ui2.: Lehet ám hogy ez a pre_render dolog nem a te drupal_render() hívásodból jön.

0
0

--
Tolmács Márk
Drupal bandita