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:
és bármely field buherálás
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.
(nem szép) megoldás
template.php:
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
ezzel lefejezed a mező megjelenítéséket
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.
-
clear: both;
a $content kerül renderelésre, a bodyt hiába piszkálod
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:
ez minden node 'body' mezőjét mindig yahoo it works -re cseréli. tplhez nem nyúltunk.
-
clear: both;
yees
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.
hát hirtelen azt mondanám,
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.
-
clear: both;