preprocess_node-ban body buherálása

aranyozottpatkoszeg képe

A sminkemben a node törzsét (body) szeretném módosítani valahol a preprocess-ben.
Valahol a $vars-ban benne van minden, de nem találom... (Drupal 7.x)

Pontosan hogyan érhetem el a body tartalmát?

template.php-ba

function PROBA_preprocess_node(&$vars) {
  if ($vars['page'] == TRUE) {
       $vars['body']['hu'][0]['value'] = "MMM";
  }
}

(Sminkem neve jelen esetben PROBA. Ezzel nincs gond, mert pl. ha létrehozom a $vars['uzenjnekem']-t, akkor a node.tpl.php-ban remekül elréhető a $uzenjenekem.)
Drupal verzió: 
Fórum: 
aranyozottpatkoszeg képe

Sőt, még nagyobb a gondom: hogyan lehet bármely field értékét módosítani?
A template.php-ban a $vars['field_{fieldnév}'] elérhető és a $vars['field_{fieldnév}'][0]['value'] meg is adja a megfelelő értéket, de hiába módosítom, mert pl. a node.tpl.php-ban továbbra is a változtatás előtti értéket írja ki.

0
0
aranyozottpatkoszeg képe

template.php:

function PROBA_preprocess_node(&$vars) {
       $vars['modositott_{fieldname}'] = "MODOSITOM".$vars['field_{fieldname}']['hu'][0]['value'];
}

note.tpl.php:
 print render($modositott_{fieldname});

Ez így remekül működik. Annyi kell még, hogy a field egyébként "hidden" legyen. (Különben kétszer is megjenne.) Pl. itt lehet ilyet álíltani: admin/structure/types/manage/blog/display

0
-1
aboros képe

minden így módosított mezőt akkor hiddenre kell állítanod mindig. amivel használhatatlanná teszed a node display uit. (mert ugyis mindig minden hidden lesz, hiszen kodbol variálod)

a mezőnek ugyan úgy van előfeldolgozója, mint a nodenak.
devel_themer modul segít.

minden aminek van .tpl.php -ja, van előfeldolgozója is. ha a mezőt akarod variálni, a mező előfeldolgozójában tegyed, ne a nodeban.

0
-1

-
clear: both;

aboros képe

ha megnézed a node.tpl.php -t, ilyen van benne, hogy render($content)..
ami a $vars['content'] alatt van, azt variáljad és minden sztár lesz.

kb:

function PROBA_preprocess_node(&$vars) {
  $vars['content']['body'][0]['#markup'] = '<strong>Yahoo, it works!</strong>';
}

ez minden node 'body' mezőjét mindig yahoo it works -re cseréli. tplhez nem nyúltunk.

0
0

-
clear: both;

aranyozottpatkoszeg képe

köszi. de bocs, ha láma vagyok: valahol le van szépen írva (akár angolul), hogy mi micsoda a $vars['content']-ben?

Mert a print_r($vars['content']); szép hosszú, és többször előjön benne a body teljes szövege.

0
0
aboros képe

nézd meg a core node.tpl.php -t, amit a modules/node alatt találsz, ott van változólista magyarázattal. amiket ott ír változókat, azok a preprocessben a "vars" tömbben a legfelső szint. persze a "varsba" bárki beleturkálhat út közben (és pont ez a lényeg:) úgyhogy az afféle iránymutatás, de kezdetnek jó lesz.
a vars 'content' be meg az kerül, amit a modulok odapakolásznak a maguk ilyen-olyan hurkaiban, mert azt szeretnék hogy az a node contentjeként jelenjen meg. (neszesemmi fogmegjól:) egy idő után ráérzel.

0
0

-
clear: both;