- január 2012 (1)
- július 2011 (1)
- május 2011 (1)
- február 2011 (1)
- január 2011 (3)
- december 2010 (2)
- november 2010 (2)
- október 2010 (3)
- szeptember 2010 (2)
- július 2009 (1)
- 1 / 2
- ››
Egy ideje nem volt időm foglalkozni a blogommal, de most már összeszedtem magam és dedikáltam időt erre is.
A téma amiről írni szeretnék számomra éppen aktuális, ugyanis a közelmúltban vágtam bele egy új projektbe, aminek a célja az, hogy egy olyan webáruházat készítsek ami prémium kategóriás Drupal sminkeket árul. Ennek hozománya, hogy első körben a drupal.org-ról letölthető ingyenes témák (Gordon, Ellington) készültek el, ezeket pedig elérhetővé tettem 6-os és 7-es verzióban is.
Mindezek fényében igazából elég végigmenni az egyik smink 6-os és 7-es verzióján és megnézni a különbségeket, de úgy gondolom hasznos lehet, ha pár, szerintem lényeges elemet kiemelek a kódkavalkádból.
A Drupal 6 óta a sminkeknek is van info fájlja nem csak a moduloknak, ebben definiáljuk a smink lényeges tulajdonságait (pl core verzió), a betöltendő JavaScript és css fájlokat stb.
A core-t be kell állítani 7.x-re, azonban vannak ennél fontosabb változások is:
Két új régióval bővült az alaprendszer:
és a left és right sidebar immár sidebar_first és sidebar_second elnevezést kapta.
A features listából kihúzták a mission-t és a search-öt, valamint a primary/seconday_links új neve main- és secondary_menu.
Az info fájl felépítéséről és lehetőségeiről itt olvashattok.
Ha ránézünk a page.tpl.php fájlra akkor egyből szembetűnik egy lényeges különbség: a header és body definíciók nincsenek benne, valóban csak az oldal vázat tartalmazza.
A régiók lerenderelt tartalma nincsenek kirakva külön változóba, hanem a $page tömb kulcsaiként elérhetőek:
<?php if ($page['sidebar_first']): ?> <div id="sidebar-left" class="sidebar"> <?php print render($page['sidebar_first']); ?> </div> <!-- /sidebar-left --> <?php endif; ?>
A két menü elnevezése megváltozott $main_menu és $secondary_menu-re és a legeneráláshoz, nem a Drupal 6-ban megszokott theme('links') hívásra van szükségünk, hanem a:
<?php if (!empty($main_menu)): ?> <div id="primary"> <?php print theme('links__system_main_menu', array('links' => $main_menu, 'attributes' => array('id' => 'main-menu', 'class' => array('links', 'inline', 'primary-links')))); ?> </div> <?php endif; ?>
és a:
<?php if (!empty($secondary_menu)): ?> <div id="secondary"> <?php print theme('links__system_secondary_menu', array('links' => $secondary_menu, 'attributes' => array('id' => 'secondary-menu', 'class' => array('links', 'inline', 'secondary-links')))); ?> </div> <?php endif; ?>
Látható, hogy megváltozott a class definiálása is, ugyanis nem egy string-ként hanem tömbként kell átadni. A theme_links() fgv paraméterezése is módosult, érdemes megnézni, mert sűrűn használják sminkkészítéskor.
Szintén érdemes kiemelni a $title_prefix és $title_suffix tömböket, amelyeket a $title kiíratása előtt és után kell meghívni a reder() fgv segítségével.
A page.tpl.php elérhető változóiról itt olvashattok.
Hamár itt tartunk felmerül a kérdés, hogy hol van a body, ami eddig a page.tpl.php-ban volt? Létrejött egy új template fájl:
Sok változó átjött Drupal 6-ból:
Az eddigi $body_classes most már $classes és behozták a következő változókat is:
A html.tpl.php elérhető változóiról itt olvashattok.
Úgy gondolom itt érdemes megemlíteni, hogy a template fájlok elnevezési formulája megváltozott és két kötőjelre cserélődött. Így most már ha azt akarjuk, hogy a nyitólapon más page.tpl.php fusson le, vagy hogy egyedi blokk megjelenést kapjon a user login block akkor
fájlokat kell létrehoznunk.
Kiemelném, hogy a delta az eddigi integerről string-re változott, így most már érthetőbb hogy melyik blokkot is módosítjuk template szinten.
Bővebben az elnevezésekről itt olvashattok.
Ezt a két fájlt összevontam, mert a comment.tpl.php fájl módosításai gyakorlatilag megegyeznek a node.tpl.php fájlban találtakkal, ezért elegendő megmutatni a node.tpl.php változásait.
Még Drupal 6-ban manuálisan állítottuk össze a node osztályait attól függően, hogy kiemelt, publikus stb, ezt most már nem nekünk kell megtenni, ugyanis it is, mint a többi templage fájlban elérhető a $classes és az $attributes változó, emelyek segítségével testreszabhatjuk a megjelenést.
Akárcsak a page.tpl.php-ban, itt is elárhetőek a $title_prefix és $title_sufix tömbök amiket a reder() fgv-nyel kell megjeleníttetni, viszont bevezettek két fontos változót is ezeken kívül:
<?php print render($title_prefix); ?> <?php if (!$page): ?> <h2<?php print $title_attributes; ?>><a href="<?php print $node_url; ?>"><?php print $title; ?></a></h2> <?php endif; ?> <?php print render($title_suffix); ?> <div class="content"<?php print $content_attributes; ?>> ... </div>
Fontos változás, hogy a $content, most már nem egy legenerált html-t tartalmazó string, hanem egy asszociatív tömb, amelynek az elemeit egyesével is renderelhetjük. Így pl. ha a $content-ből külön szeretném választani a liknekeket és a hozzászólásokat, akkor azt a kettőt először elrejtem a hide() fgv segítségével, majd amikor szükségem van rá, lerenderelem azokat is.
<?php // We hide the comments and links now so that we can render them later. hide($content['comments']); hide($content['links']); print render($content); ?>
A node.tpl.php és a comment.tpl.php elérehtő változóiról itt és itt ovlashattok.
Ebben a template fájlban is történt néhány módosítás. Szerintem két legfontosabb:
A tepmplate.php-ban van két nagyon fontos változás a 6-os verzióhoz képest
Itt lényegi változás az, hogy eltűnt a themehook_settings() és helyette a hook_form_system_theme_settings_alter()-t kell implementálni ahhoz, hogy a sminkünknek saját beállítási felülete legyen. Az alapértlemezett érték megadásához az info fájlba kell megadnunk egy sort:
settings[theme_setting_name] = default_value
Nagyon jó leírás, ez alapján
Nagyon jó leírás, ez alapján már el fogok tudni indulni a saját sablonom portolásával is.
Egy apró hiba:
"Az eddigi $blody_classes most már $classes és behozták a következő változókat is:"
A valtozo neve $body_classes volt.
page--front-tpl.php
Nagyon hasznos írás!
Talán ez is hibás, úgy gondolnám, hogy page--front.tpl.php lenne a helyes (page--front-tpl.php helyett):
a page-front.tpl.php helyett a page--front-tpl.php
és a block-user-0.tpl.php helyett a block--user--login.tpl.php
Köszönöm szépen, a két
Köszönöm szépen, a két helyesírási hibát javítottam.