Drupal (7) - "first-time" blokk formázása

A címbeli tevékenységgel küzdöttem. Már a végén falat kapartam, egyszerüen nem találtam semmilyen olyan hook-ot, változót, semmit, ami alapján ezt a szerencsétlen cuccot értelmesen beformázhattam volna, ha már a Drupal van olyan szíves ezt a föoldalra kiböfögni. (Gy.k.: ebben szokott az lenni, hogy "Még nem lett létrehozva címlapra kerülő tartalom.").

A hajtás után megtudod, mit raktam össze.

Nos, egy átmeneti megoldást találtam. Olyan átmeneti, mint az átmeneti kabát: átmenet a megoldás meg a gányolás között. Na, szóval a kövi van:

Létre kell hozni egy új template-t, block--system--main.tpl.php néven, majd:


<?php if(strstr($content, '<div id="first-time">')) : ?>
<!-- ide jön a formázás. Ez egy blokk, aminek nincs címe, 
     így adok neki egyet, mert a HTML oldalszerkezet ezt itt megköveteli -->
<div id="node-first-time" class="node">
  <div class="nodehead autoheight">
    <h2><?php print drupal_get_title(); ?></h2>
  </div>
  <div class="nodebody">
    <?php print $content; ?>
  </div>
</div>
<!-- No, akkor ez nem az volt, megyünk tovább, mintha semmi nem lenne itt -->
<?php else : print $content; endif; ?>

Kis magyarázat: az if-et nem mondom el, az nyilvánvaló, viszont mivel ez a blokk rendereli le az összes többi cuccost is, tehát például a föoldalon a cikklistát is, így mindenképpen le kell kezelni azt az esetet, amikor az oldal már normálisan müködik.

Ha valakinek van ennél még kevésbé gányolás szagú megoldása, ne tartsa magában. Alapvetően ezt a strstr() hívást kellene körbedolgozni, de nem tudom ennél atomibb szintre lebontani ezt a blokkot.

Update:

Megtaláltam az ideális megoldást.

template.php:


function TEMANEVE_preprocess_page(&$vars) {
    // Ez itt csak akkor igaz, ha van listazando / kiirando node.
    $vars['has_nodes'] = isset($vars['page']['content']['system_main']['nodes']);
}

page.tpl.php


<?php if($has_nodes) : ?>
<?php print $content ?>
<?php else : ?>
<!-- ide jön a formázás. Ez egy olyan oldal, aminek nincsenek node-jai, 
     így kiírom a címet, mert a HTML oldalszerkezet ezt itt megköveteli -->
<div iclass="node">
  <div class="nodehead autoheight">
    <h2><?php print $title ?></h2>
  </div>
  <div class="nodebody">
    <?php print $content; ?>
  </div>
</div>
<?php endif; ?>

Ez utobbi kicsit szofisztikaltabb, es le lehet vele kezelni az olyan oldalakat is, amin pl. űrlapok vannak.

Hozzászólások

Kerdeztem a #drupal.hu -n is, es azt mondtak, hogy akkor rakjam bele a page.tpl.php -be a cimet, es szedjem ki, ahol nem kell megjeleniteni. A gond alapvetoen az, hogy meg mindig nem ismerem a drupalt annyira, hogy tudjam, mely helyek (mar nem merek oldalt mondani) lesznek azok, ahol nekem erre nem lesz szuksegem.

A 2. megoldas azert tud mukodni, mert nekem alapvetoen az kellett, hogy ahol egy vagy tobb node van, oda nekem nem kell cim, mert azt reszben elintezi a node.tpl.php, reszben pedig oda ugyis tok mas markup jon.
Viszont, mivel nekem a page.tpl.php -ban nincs olyan pont, ahol ki tudnam iratni a $title valtozot, igy azok az oldalak, melyek nem mennek at a node.tpl.php-n, cim es mindenfele stilusozas nelkul nyersben jottek volna ki, ami nem jo, mert igy nem lesz szep az oldal.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal