Regions felhasználásával a node.tpl.php elhelyezni blokkot hogyan kell?

vikicica22 képe

Hello mindenki!

Most ismerkedek a Drupal 7-el és nem tudtam rájönni miért nem sikerül "regions" felhasználásával a node.tpl.php elhelyezni blokkot.
Drupal 6 alatt működik ott sikerült megoldanom (template.php) de Drupal 7-ben nem.
Utána néztem és kipróbáltam lehetőségeket, de valamiért nekem ez nem sikerült :(
"Bartik" sminket használok abba szeretnem ezt valahogyan bele tenni.

Valaki tudna nekem segíteni ebben, hogyan kell ezt megoldani?
Előre is köszönöm a segítségeket.

Taxonomy upgrade extras: 
Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
Fórum: 
aruna képe

1
0
Sk8erPeter képe

"miért nem sikerül "regions" felhasználásával a node.tpl.php elhelyezni blokkot"

Lehet, hogy az én készülékemben van a hiba, de nem értem a kérdést. Meg tudnád fogalmazni őő másképp?

0
0
vikicica22 képe

Lehet nem jól fogalmaztam meg :( elnézést kérek.
Én ilyet szeretnék:

----
bartik.info
regions[content_bottom] = Content Bottom
-
template.php

function bartik_preprocess_node(&$vars, $hook) {
 $vars['content_bottom'] = theme('blocks', 'content_bottom');
}

-
node.tpl.php
<?php print $content_bottom; ?>
----

ez van most Drupal 6-ban.

Nekem hasonló kellene Drupal 7–hez.

Találtam ilyet 7-eshez , de mindig template.php hibát irt ki :(

0
0
Sk8erPeter képe

"Találtam ilyet 7-eshez , de mindig template.php hibát irt ki :("

És az titok, hogy mit találtál, és milyen hibát ír ki? :D

0
0
Sk8erPeter képe

Röviden:

.info fájl módosítása, CSS, page.tpl.php-ben régió létrehozása.

Bővebben:

Én egy Zen alsminkben (remélem, Te is alsminkben próbálkozol!!) így hoztam létre saját régiót, itt a "banner" nevű a sajátom:

  1. zenalsminkemneve.info

    1. ; ...............
    2.  
    3. regions[header] = Header
    4. ; Pete - own custom region
    5. ; @see http://www.westsideweb.com.au/blog/93-drupal/375-add-new-regions-to-your-zen-base-theme
    6. ; @see http://yuriybabenko.com/blog/creating-new-drupal-regions
    7. ; @see http://mydrupalblog.lhmdesign.com/creating-custom-regions-drupal-6-themes)
    8. regions[banner] = Banner
    9. regions[navigation] = Navigation bar
    10. regions[highlighted] = Highlighted
    11. regions[help] = Help
    12. regions[content] = Content
    13. regions[sidebar_first] = First sidebar
    14. regions[sidebar_second] = Second sidebar
    15. regions[footer] = Footer
    16. regions[bottom] = Page bottom
    17.  
    18. ; ...............

    (a pontok azt jelzik, hogy van előtte-utána még tartalom, de az most nem lényeges)
    A lényeg tehát ez:
    regions[banner]         = Banner
  2. bannernek beállítottam CSS-ben némi stílust, ezt ne hagyd ki
  3. page.tpl.php fájlba (tehát nem a node.tpl.php-be!!!)
    közvetlenül a <header> tag alá raktam be, mert ott volt rá szükség:

    1. <div id="banner">
    2. <div class="section clearfix">
    3. <?php
    4. // Pete own region
    5. if(!empty($page['banner'])){
    6. print render($page['banner']);
    7. }
    8. ?>
    9. </div><!-- /.section -->
    10. </div><!-- /#banner (Pete) -->
    11.  
    12. <!-- ezután jön a div id="main" és a többi -->
  4. Ezután engedélyezd a sminket, vagy ha már engedélyezve volt előtte, törölj cache-t.

Mindössze ennyi.

1
0
vikicica22 képe

Ez is egy megoldás de a node.tpl.php azért jobb bele tenni mert utána könnyebben lehet sminkelni az adott node--valami.tpl.php -t.

Az én elképzelésem (ami eddig a drupal 6-osban működik) itt van:

- címkék
- szövegtörzs
+ blokk tartalma
- képek

míg a te megoldásodban csak így lehet:

- címkék
- szövegtörzs
- képek
+ blokk tartalma

vagy

+ blokk tartalma
- címkék
- szövegtörzs
- képek

a még jobb sminkelés miatt kellene ez a megoldás.

0
0
drgyz képe

Insert Block
Én nem próbáltam ki.

0
0
Sk8erPeter képe

Szerintem ez nem jó, mert ez csak a konkrét node body-jába pakol be egy blokkot, gondolom a megfelelő filter segítségével:

sometimes you want to include or embed that stuff into the body of your node

Amúgy a leírása kicsit furcsa:

[block:name of module=delta of block]

...will insert the contents of a rendered sidebar block into the body of your node. If no delta is specified, the default block for that module will be displayed.

Nem vágom, miért írja kifejezetten a sidebar blokkot, miért ne lehetne akármilyen blokk. :) Az meg végképp nem tudom, mit jelent, hogy "default block". (??) Mivel egy modul akárhány blokkot is meghatározhat....

0
0
zionduc képe

Szerintem ez segít abban, amit szeretnél:
http://drupal.stackexchange.com/a/20059

Ha smink preprocesseket írsz, akkor használd a Devel Themer modult, és pl. egy kpr($vars); segítségével nézd meg, hogy létezik-e egyáltalán, amit keresel (persze csak ha még nem használtad eddig).

0
0

Írj rám, ha érdekel a Győri Drupal Használói Találkozó.

Sk8erPeter képe

Szerintem ez önmagában jó ötlet, de felesleges minden egyes régiót, minden egyes blokkot újból lekérni, még ha egyes tömbök referenciával is adódnak át, mégis túl sok az overhead, és igazából a legtöbb régió és blokk esetében feleslegesen, mert valószínűleg itt csak egy-két régióról van szó, aminek a megjelenítését a node.tpl.php-ban szeretnénk megjeleníteni.
Tehát szerintem értelmesebb lenne egy komplett foreach és sok-sok függvényhívás helyett inkább csak a tényleg szükséges régiókat és blokkokat lekérni, és annyi.
De mondom, önmagában a megközelítés jó, csak a megvalósítás pazarló.

0
0
zionduc képe

Ezzel egyetértek abszolút. Kicsit félve is tettem be ezt a megoldási javaslatot pont emiatt :) viszont kipróbálás után gyors volt az oldal betöltés.

Kíváncsi vagyok arra a megoldásra is, amit aruna linkelt, de azt még nem volt időm tanulmányozni.

1
0

Írj rám, ha érdekel a Győri Drupal Használói Találkozó.

vikicica22 képe

Köszönöm mindenkinek a segítséget.
Ezeket tudtam hasznosítani:

/* Print custom block content */
$block = module_invoke('block','block_view','1');
print render($block['content']);
 
/* Print the whole custom block (with divs, title etc.) */
$block = block_load('block','1');
print drupal_render(_block_get_renderable_array(_block_render_blocks(array($block))));
 
/* Print a views block */
$block = module_invoke('views','block_view','print_block_test_view-block');
print render($block);
2
0