Změna banneru v závislosti na taxonomy
Mám problém se změnou banneru (css) stránky v page.tpl.php.
Potřeboval bych ho měnit na základě toho, v jaké sekci jsem. V node.tpl.php to zjistím jednoduše z proměnné $field_prislusnost_stranky (mnou definované pole), tam problém není. Jenže já potřebuju mít informaci o příslušnosti stránky už při vykreslování page.tpl.php, abych na základě toho mohl nastavit banner. Tam mi ta proměnná nefunguje.
Je nějaký jednoduchý způsob, jak to zjistit? Jak se dostat k taxonomy termínu ještě před vykreslením stránky?
Zatím mě napadly 2 dost blbé způsoby:
-
- udělat si pro různé příslušnosti seznamy nodů
- funkcí arg() zjisti číslo nodu a podle toho použít banner
- banner (css) měnit skriptem až z node.tpl.php
Na to sa pouziva funkcia
Na to sa pouziva funkcia v template.php
nieco ako:
Tu je obsiahlejsi priklad http://robmalon.com/…suggestions/, ty potrebujes vo
$vars['node']zistit taxonomiu a nastavit vblastnu premennu$vars['banner_class'] = $term->name .'-banner';.Nevim, jestli je to optimální
Nevim, jestli je to optimální řešení ale já bych si vytvořil region kam bych pomocí bloku zobrazoval banner. Pro každej banner jinej blok a každýmu z těch bloků nastavit zobrazování podle cesty.
To je zbytocna konfiguracia
To je zbytocna konfiguracia blokov navyse – jemu ide o to aby tam bol na stranke class podla ktoreho nastavi pozadie. Ked nad tym rozmyslam tak premenna
$nodeby mala byt v D7 dostupna aj v page.tpl.php → http://api.drupal.org/…ge.tpl.php/7. Tak som sa docital ze je, cize staci napisat niekde do strankyclass="<?php print $node->field_prislusnost_stranky[0]['value'] ?>".Ja pouzivam blok, ale aj cez
Ja pouzivam blok, ale aj cez template temy sa to da.
/*** _block_info
*/ function topblok_block_info() {
$blocks[0] = array(
‚info‘ ⇒ t(‚Top block‘),
‚cache‘ ⇒ DRUPAL_CACHE_GLOBAL
);
return $blocks; }
/**
* _block_view
*/ function topblok_block_view($delta) {
$block = array();
switch ($delta) {
case 0:
$block[‚subject‘] = t(‚Top block‘);
$block[‚content‘] = topblok_blok();
break;
}
return $block; }
function topblok_blok() {
$path = ‚public://images/default_baner.jpg‘;
if ($node = menu_get_object()) {
$baner = field_get_items(‚node‘, $node, ‚field_baner‘);
if ($baner) {
$path = $baner[0][‚uri‘];
}
}
return theme(‚image_style‘, array(‚style_name‘ ⇒ ‚topblok‘, ‚path‘ ⇒ $path)); }
Díky
Díky za rady :)
Přes mojatema_preproccess_page() jsem viděl pár řešení se zapnutými nice url, což ale nemám. Asi by to šlo i bez nich, ale narazil jsem na problém. Nevím, jak dostat proměnnou z fce preproccess_page (z template.php) do šablony. Když si třeba vytvořím $variables[‚moje_promenna‘], tak se k obsahu proměnné v šabloně nedostanu ani přes $variables[‚moje_promenna‘], ani přes $moje_promenna. Hlavičku fce jsem měl:
function nazevtematu_preprocess_page(&$variables)Řešení s blokem mi nevyhovuje, nastavuju třídu u několika prvků na stránce.
Takže zatím to řeším přes $node v page.tpl.php.
Z article přes
$node->field_prislusnost_novinky[‚und‘][0][‚tid‘],z page přes
$node->field_prislusnost_stranky[‚und‘][0][‚tid‘]Číslo taxonomy termínu si ještě v šabloně „ručně“ převádím na název, protože nevím, jak se dostat k textu, který se pod termínem skrývá. Naštěstí to není věc, co by se měnila každý den, ale moc se mi to nelíbí.
Ak vytvoris preprocess
Ak vytvoris preprocess funkciu je nutne zmazat drupal cache aby sa zaregistrovala. Az potom je premenna $moje_promenna dostupna priamo v stranke. Ja to testujem (ci uz Drupal pozna moju preproccess funkciu) tak ze dam do nej prikaz
die('som tu')a hned viem ci sa ten prikaz zavola alebo nie.Poslat nový komentář