+ Letöltés |
Drupal 7.12 Fordítás Drupal 6.24 Fordítás |
Adott egy reklam tartalomtípus, benne egy field_hatter kötelező, single-value imagefielddel. Feladat: a tartalom hátterének beállítani ezt a képet anélkül, hogy sminkhez nyúlnánk (azaz sminkváltás után is ugyanúgy működjön a dolog). IRC-n kaptam vagy öt embertől segítséget, aminek a lényege a következő:
node.tpl.php-ja helyett a saját node-foo.tpl.php-mat szeretném használni:modules/node/node.tpl.php fájlt.node-foo.tpl.php fájlt, és teleraktam debug szeméttel (hogy azonnal lássam, amint használatba kerül).{system} táblában kézzel átírva - ha majd végre működni fog, berakom az .install fájlba is).node-foo.tpl.php fájlom.Miért? Mit szúrok el, vagy hagyok ki?
hook_theme_registry_alter
<?php
function sajatmodulom_theme_registry_alter(&$theme_registry) {
$theme_registry['node']['theme paths'][] = drupal_get_path('module', 'sajatmodulom');
}
?>
És ettől fogva simán a node.tpl.php-t használhatod és ezt fogja a Drupal felnyalni mert ez van "legelől" a keresési listában. Ide aztán node-type.tpl.php-t is használhatod, vagy a page_preprocessben adhatsz hozzá saját node-foo.tpl.php suggestion-t és akkor azt nyalja be a Drupal.
pp
(jár a sör?)
Palócz István
http://palocz.hu | http://integralvision.hu
ez az egyik megoldás
Mivel egy saját tartalom típusról van szó, amit típus szerint sminkelünk, elég az is, ha a hurokban megadjuk az útvonalat.
Innentől kezdve elég, ha a modul mappájában ott a
node-reklam.tpl.php, areklamtípusú tartalmakhoz azt fogja használni, ha a smink mappájában nincs ilyen. Az olvasottakból kiindulva nyílván nem lesz.Legyen a „szokásos” pálinka. ;)
Legyen a „szokásos” pálinka. ;)
Btw snufkin++: eredetileg ő is ezt favorizálta, de csak most sikerült eljutnia a dolognak a tudatomig.
Hanem a template hinting valamiért nem akar összejönni - ellenben a következő (nem tudom, mennyire gurány, de) működik, és így tartalomtípustól függetlenül is meg tudom oldani a dolgot:
<?php
function mymodule_theme_registry_alter(&$data) {
$data['node']['path'] = drupal_get_path('module', 'mymodule');
$data['node']['template'] = 'node-mymodule';
}
?>