Hogyan dolgozzunk a views template-jeivel?

Kategória: 
Leírás

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

A mező tartalma nem nyilvános.
  • Internal paths in double quotes, written as "internal:node/99", for example, are replaced with the appropriate absolute URL or relative path.
  • Engedélyezett HTML elemek: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <del> <img>
  • A webcímek és email címek automatikusan linkekké alakulnak.
  • A sorokat és bekezdéseket a rendszer automatikusan felismeri.
  • Engedélyezett HTML elemek: <a> <blockquote> <br> <cite> <code> <dd> <del> <div> <dl> <dt> <em> <li> <ol> <p> <span> <strong> <ul>
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <bash>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <mysql>, <php>, <python>, <ruby>, <sql>. The supported tag styles are: <foo>, [foo].
  • Minden email cím át lesz alakítva ember által olvasható módon, vagy (ha a JavaScript engedélyezett) ki lesz cserélve kattintható, de biztonságos hivatkozásra.
By submitting this form, you accept the Mollom privacy policy.