Nos, mára teljesen mást szántam, de úgy szeretném írni a postokat, hogy tényleg a legérthetőbb legyen bárki számára, ezért kénytelen vagyok egy kis kitérőt tenni, hogy a következő írások is emészthetők legyenek.
Mik azok a views template-ek, és mihez kezdjünk velük?
A views tulajdonképpen egy SQL lekérdezésből HTML kimenetet generál. A HTML kimenetbe tudunk több szinten belenyúlni. Ezek a szintek a következők:
- A teljes nézet
- A nézetben alkalmazott stílus
- Sorok megjelenése (nem minden stílusban..)
- Mezők megjelenése
Ha a views szerkesztésekor rákattintasz a Theme: Information-ra, megjelennek azok a tpl file-ok, amiket az adott nézet használ.
A Display outputnál (views-view.tpl.php) lévő tpl a nézet alapvető szerkezetéért felelős. Ő írja ki az admin linket, ez teszi helyére a felfedett szűrőket, fejlécet, láblécet, amiket beállítgattunk a views szerkeztésekor.
A Style output (views-view-stílusamithasználunk.tpl.php) tartalmazza a stílusspecifikus beállításokat, tehát ha pl táblázat megjelenést választottunk, ő készíti a táblázat fejlécét, a sorok, oszlopok formázását.
Row style output: (views-view-fields.tpl.php) Ez nincs minden esetben (pl táblázatoknál sem) . Ő már egyesével dolgozik a mezőkon, kiírja a címkét, a tartalmat a nézet beállításai szerint, gyakorlatilag egy mező html szerkezetét készíti el.
Field mezőneve: (views-view-field.tpl.php) Ezek alapesetben már csak kiírják a mező tartalmát, egyes feladatoknál viszont jó velük dolgozni, mint azt később láthatjuk majd.
Ezek bármelyikét szerkeszthetjük, de csak óvatosan! Az ezekben a file-okban végzett módosítások az össze nézetet érintik, amiket használunk.
Amikor bármilyen tpl file-al dolgozunk, sosem az eredetit írjuk felül, hanem másolatot készítünk róla a sminkünk könyvtárában. Így módosítsunk tpl-t:
A felsorolt tpl-ek közül válasszuk ki azt a szintet, amivel dolgozni szeretnénk. A szintre rákattintva betöltődik az a file, amit aktuálisan használ a views.
Egy egyszerű szövegszerkesztőbe másoljuk be a tartalmát. és végezzük el a kívánt módosításokat, majd mentsük el a saját sminkünk könyvtárába. Ezutén tölsük fel, majd kattintsunk a Rescan Templates gombra. Voila, félkövérrel máris a mi most feltöltött tplünk lesz kiemelve. Ilyen egy tpl szerkezete:
<?php // $Id: views-view-field.tpl.php,v 1.1 2008/05/16 22:22:32 merlinofchaos Exp $ /** * This template is used to print a single field in a view. It is not * actually used in default Views, as this is registered as a theme * function which has better performance. For single overrides, the * template is perfectly okay. * * Variables available: * - $view: The view object * - $field: The field handler object that can process the input * - $row: The raw SQL result that can be used * - $output: The processed output that will normally be used. * * When fetching output from the $row, this construct should be used: * $data = $row->{$field->field_alias} * * The above will guarantee that you'll always get the correct data, * regardless of any changes in the aliasing that might happen if * the view is modified. */ ?> <?php print $output; ?>
És ami itt fontos: Ami a megjegyzésben az első <?php ?> tag között van szvsz ne töröljük ki! Azt nem hiszem, hogy az oldal funkcionalitásába beleszól (ha jól tudom, a drupal.org verziókezeléséhez kapcsolódó információkat (is) tartalmaz), viszont az ott leírt instrukciók még segítségül szolgálhatnak, ha a későbbiekben variálni kell. Én még pluszban igyekszem kitölteni saját megjegyzésekkel is, hogy képben legyek, miért babráltam..
A mentés viszont egy furfangos dolog.. Attól függően, hogy milyen néven mentjük el a tpl-t, meghatározza a hatókörét, vagyis hogy mely nézetekre lesz érvényes, és már egy órája azon agyalok, hogy hogyan lehet ezt normálisan elmagyarázni..
Szóval-szóval.. A tpl elnevezése minden esetben az alapfile-al kezdődik: views-view/ views-view-unformatted/ views-view-fields/ views-view-field Ezzel azt áruljuk el a drupalnak, hogy a fentebb felsorolt szintek közül melyikkel dolgozunk.
A szűkítéshez kettő darab kötőjelet használunk. Összesen négy szűkítési lehetőségünk van:
- Nézet neve szerint
- Alnézet típusa (block/page)
- Nézet létrehozásakor megadott tag (felül a view settingsnél látható érték)
- Alnézet típusa sorszámozva
Részletesebben:
A views-view--alnezet_tipusa.tpl.php (pl default - ez tuti van mindenkinek, vagy block/page) Ez az összes nézet azonos típusú alnézetére lesz érvényes.
Használhatjuk a Nézet nevét is: views-view--nezet_neve.tpl.php - ez elég egyértelmű.
Szűkíthetünk továbbá tag-re, ha azt a nézet létrehozásakor megadtuk: views-view--comment.tpl.php. Figyelem! Én a tageket meglehetősen szabadon használom, vagyis magyar ékezetekkel, vesszőkkel. Ha tagek szerint akarsz célozni, csak az angol abc kisbetűs karaktereit használd, különben kutyabetyár zöldséget kapsz vissza!
Menjünk tovább: megcélozhatunk alnézeteket sorszám szerint is: views-view--page-1. Itt láthatjuk, hogy a sorszám megadásához mindössze egy kötőjel szükséges.
És most ugrik a majom a vízbe! Ha eddig megértetted amit írtam, akkor talán feltűnt, hogy így biza nem tudunk konkrétan 1 azaz egy darab alnézetet belőni. Hiszen ha még mondjuk block-1-re célzunk, más nézetünkben is lehet ugyanolyan block-1.
Szóval a lényeg, hogy ezeket a paramétereket kombinálhatjuk is, szintén két kötőjellel elválasztva: views-view--nezet_neve--block-1.tpl.php. Így már tényleg az adott nézetünk egy darab alnézetét túrjuk, és semmi másra nem lesz hatással.
És még egy utolsó kitérő: A Field típusú template-ek. A mezőkre ugyanazok vonatkoznak, mint az összes többire, egyetlen kivétellel: Ha az általunk szépen, pontosan, nekünk megfelelően belőtt nézet végére két kötőjel után odabiggyesszük az (ID:) után szereplő értéket, akkor ez csakis és kizárólag arra a mezőre fog vonatkozni.
Tehát ha a kutyak_nezete harmadikként létrehozott page típusú alnézetének "tistutyafile'" nevű mezőjét szeretnénk célozni, akkor az így fog kinézni: views-view-field--kutyak_nezete--page-3--tistutyafile.tpl.php
Bármennyire is hosszúnak, és bonyolultnak tűnik ez a rizsa, igazából nincs nehéz dolgunk a nézet nevének kiválasztásakor, hiszen a Themes: Information alatt rengeteg lehetőséget felsorol ajánlásként a rendszer. Ez az írás arra hivatott, hogy segítsen megkönnyíteni, hogy melyiket is válasszuk a sok közül - remélem érthetően sikerült összeszedni..
Hozzászólások
@KZolti: Sosem foglalkoztam
@KZolti: Sosem foglalkoztam még multisite-tal, de valahogy nem úgy működik, hogy sites/all/themes-ben lévő sminkeket minden aloldal eléri?
Ha ez így van, akkor az aloldalak sminkjét úgy kell beállítani, hogy a base theme sites/all/themes témád legyen, és akkor egy helyről kezelheted a tpl-eket.
Sőt, ha ez így van, akkor tulajdonképpen semmi mást nem kell csinálni, csak mondjuk egy sites/all/themes/base könyvtárban létrehozni egy base.info file-t ennyi tartalommal:
name = base
description = base theme közös template könyvtárnak
core = 6.x
engine = phptemplate
Az aloldalak sminkneve.infoba pedig be kell rakni ezt a sort:
base theme = base
Innentől a base könyvtárába pakolhatod a tpl-eket.
(Lehet, hogy van jobb megoldás..)
Multisite-os rendszerben
Multisite-os rendszerben azonos wievs nézetekkel de különböző témákkal, hova lehetne berakni a tpl.php fájlokat, hogy mindegyik site-on használja a views ?
Jó lenne csak egy helyen karbantartani ezeket, de nem jövök rá a nyitjára.
Köszi ez nagyon hasznos volt
Köszi ez nagyon hasznos volt számomra.
Hozzászólás