Sziasztok!
Egy viszonylag egyszerű oldalt kell létrehoznom, de sajnos teljesen kezdő vagyok Drupal témában. Közönséges hír jellegű portalról van szó, néhány kivételtől eltekintve (archívum, kezdőoldal, eseménynaptár) a hírek különböző menüpontok alá kell menjenek. Mivel elég sürgős, nem szeretnék rossz irányba elindulni, hogy újból kelljen kezdenem.. :-|
Szóval az elgondolásom:
- taxonomy modulban létrehozom a megfelelő címkéket egyedi URlekkel (cimke-hirek, cimke-magazin, cimke-statisztika, stb.).
- views modullal létrehozom a nézeteket, ami lehet egy nézet több oldalt hozzáadva, URL-ek hozzá (hirek, magazis, statisztika). Ezek a nézetek tulajdonképpen csak annyiban kell különbözzenek, hogy a 'Filter Criteria' szekcióban megadva a 'Has taxonomy term' feltételben más-más, az előzőekben rögzített címkékkel ellátott hírek jelenjenek meg. Ahogy látom a sok nézet használata helyett az egy nézet+több oldal felépítésnek az lehet az előnye, hogy ha egy plusz mezőt kell hozzáadni az összes oldal nézethez, vagy pontosan ugyanúgy kell módosítani (pl tartalomból ne 150, hanem csak 100 karakter jelenjen meg az aloldalon), akkor elég csak egy nézeten elvégezni, és az alkalmazásnál ki lehet választani, hogy 'This page' vagy 'All display'. Ugyanígy fordítva pszeudo egyedivé is lehet tenni a nézet egyik oldalát (lekérdezett adatok szempontjából).
- ezután elvileg a /sites/all/themes/sminknév/templates alatt egyetlen views-view.tpl.php-val le tudom rendezni az összes ilyen jellegű aloldalt. Ha valamelyikbe kell plusz mező (és le is lett kérdezve a views-al), akkor ebben a php-ban csak be kell rakni a vizsgálatot, hogy létezik-ea lekérdezett adatstruktúrában a mező, és ha van, akkor kiírni, ha nincs akkor nem.
A többi oldalnál, amire ezt a sémát nem lehet ráhúzni pedig egyedi nézet kell a views-ban, és külön tpl hozzá.
Ezzel az elgondolással jó irányba indulok?
köszönettel
Érdemes átgondolni, hogy a tartalomípusok
mennyire fedik át egymás.
Pl. ezek: cimke-hirek, cimke-magazin... lehet hogy különböző tartalmakat listáznak, és a hír valamint a magazin tartalomtípus metaadatai nagyon különbözőek lehetnek pl. eltérő mezők kellenek, vagy pl. a látszólag "közös" body mezőre más korlátozások kellenek később.
Ha viszont több tartalomtípus kell, akkor érdemes tartalomtípusonként legalább egy nézetet csinálni. Amúgy egy nézethez több display-t jó ötlet, ha tényleg címkénként némileg eltérő megjelenítés kell.
Hmm.. hát köszönöm, akkor ez
Hmm.. hát köszönöm, akkor ez végülis kb jónak tűnik.
Azt nem tudom még, hogy hogyan tudom megmondani a nézetnek, hogy a találatok pontosan hogyan is jelenjenek meg? Például szeretnék egy olyat, hogy a felsorolás listában bal oldalt egy feltöltött kép, mellette (nem alatta) pedig az összegzés.
A views-view.tpl.php szépen kiírja a sorokat ($rows), ő ezt szépen megkapja a views-view-unformatted.tpl-tól. (ebben az esetben).
Rögzítettem egy image mezőt a cikk tartalomtípushoz, az ő "Programok által használt név" értéke 'field_image'.
Hogyan tudok hivatkozni erre a képre, hogy be tudjam tenni a views-view-unformatted.tpl-be (mondjuk egy közönséges táblába, div-be, akármibe)? A nézetben be van állítva, hogy ezt a mezőt is lekérdezze a nézet használatakor.
var_dump-pal kidumpolom a sorokat, itt már csak "kész" sorként vannak a sorok a $rows tömbben.
Nem kell talán tpl
Ezek a template-s dolgok lehet hogy nem is kellenek.
CSS-el float-old egymás mellé a képet és a szöveget (összegzést).
Vagy egy táblázatos megjelenítéssel esetleg. Ezekhez nem kell egyedi template fájl.
Hát ez remek..
.. De ettől még nem fogom tudni, hogy hol is keressem azt a részt, ami legyártja a sorokat.
"Vagy egy táblázatos megjelenítéssel esetleg. " <- oké, de ehhez is tudni kellene, hogy hol kell ezt melyik fileban kell elvégezni; valamint továbbra sem tudni, hogy a field_image nevű, képet tartalmazó mező értékét honnan lehet megtudni.
Egy ilyen nevetségesen egyszerű dolgot valóban ennyi szenvedés kibányászni Drupalban?
Semmi extrát nem szeretnék, csak:
- egy views-al legyártott lekérdezés rekorjadit formázottan kilistázni; mi hol jelenjen meg.
:-(
Pár link
1. https://drupal.org/project/devel_themer
mutatja a böngészőban a használt és használható template-eket.
2.A views szerkesztésekor: advanced->theme: information link mutatja a használható template-eket.
https://api.drupal.org/api/views/theme!theme.inc/group/views_templates/7
Köszi!
Ez a Theme Developer szuper cucc, köszi!
Az általad adott linken olvasottak szerint a template feldolgozás alapértelmezett filejai:
- views-view.tpl.php (belefirkálok, látszódik, ok)
- views-view-unformatted.tpl.php (belefirkálok, látszódik, ok)
- views-view-fields.tpl.php (belefirkálok, és semmi!)
"Many styles will then farm out the actual display of each row to a row style; the default row style is views-view-fields.tpl.php." <- pontosan erre van nekem szükségem, de hiába írom át (csak beletolok egy var_dump($fields-et), vagy sima szöveget). Próbáltam a /sites/all/themes/xxx/templates/ alatt is, és a /sites/all/modules/views/theme alatt is.
Semmi eredmény :-/ Hát nem tudom ilyenkor mi történik. Cache ürítés volt.
Ugyanakkor
A theme developer azt írja a kis ablakában, hogy:
--------------------------------------
Parents: node < views_view_unformatted < views_view < page < html
Function called:
theme_field()
Candidate function names:
autoszektor_field__body__article() < autoszektor_field__article() < autoszektor_field__body() < autoszektor_field__text_with_summary() < autoszektor_field()
Preprocess functions:
template_preprocess_field + rdf_preprocess_field
Process functions:
template_process_field
--------------------------------------
Azaz szerinte sincs a views-view-fields.tpl.php a 'node' és a 'views_view_unformatted' közt.
meg tudod mutatni ezt a nézetet?
mondjuk az exportját. illetve jó lenne még látni legalább egy móricka ábrát arról, hogy milyen elrendezést szeretnél megvalósítani. valószínűleg azért nincs fields tpl, mert nem mező alapú megjelenítést alkalmaz a nézeted.
"Például szeretnék egy olyat, hogy a felsorolás listában bal oldalt egy feltöltött kép, mellette (nem alatta) pedig az összegzés."
ehhez nincs szükség arra, hogy tplekben turkáljál. szóval mit akarsz pontosan, mi az a szuperbonyolult egyedi elrendezés, amihez neked meg kell változtatni tpleket?
kérlek mutass pár screenshotot legalább a nézetről, hogy néz ki, hogy kéne hogy kinézzen.
-
clear: both;
találtam field.tpl.php-t?
Ilyesmit nem használtam még, de most nézegettem a views setup screenshotot, amit mellékeltem a lenti kommentemben, és észrevettem, hogy pont ott ahol a felesleges class-t adom hozzá, az alatt a rész alatt ott egy checkbox hogy használjon-e field.tpl.php-t (field alapú a view) (meg ugye ott van mellette a beszédes description, hogy mit kell tudni a döntéshez).
Ez nem jelenti azt, hogy a kérdezőnek szüksége lenne rá vagy ilyesmi, csak örömmel fedeztem fel, hogy van ez a checkbox.
Fieldek formázása
EDIT: most nézem sajnos eléggé offtopic lettünk a téma címétől, ejj. Ezt a gúglinak, ha valaki majd ezt keresi: Drupal views formázás.
-----
Gondoltam adok egy másik ötletet a floathoz;
Itt a lényeg annyi, hogy a field-alapú nézetnél (Format: unformatted list (tehát simán divek)) a kép mezejének megmondod, hogy ha nincs a node-nak képe, akkor ne legyen a div-je sem.
Teszel a mező legkülső wrapperére classt, mind a kép-mezőére, mind az utána következő body mezőére, hogy tuti megtaláljad melyikek azok. (Egy valódi website-on ahol jó sok minden van, könnyebb ha van explicite classod énszerintem).
Akkor tudsz írni egy olyan css-t, hogy:
Az eredmény az, hogyha van kép a node-hoz, akkor a mögötte jövő body az ad neki helyet, viszont ha nincs kép, akkor a body megkapja az egész helyet.
(Szerintem szebb így, ha egész mélységében el van tartva a body) (oké, valami stabilabb képstílus az kell azért, mint ami az én példámban van).
Az alábbi mellékleteken látszik, hogy mit próbálok mondani :)
Mellékletek:
vagy mondjuk a példádnál maradva
nem értem mire kell a wrapper, tömve van osztályokkal amúgy is szerencsétlen markup.
simán css:
viszlát.
-
clear: both;
Ez biztosan jó
Hát köszönöm a válaszokat, észben tartom, de igazándiból az a kérdésem, hogy hogyan tudom én szabadon átírni a lekérdezett mezőket, design és tartalom szempontjából egyaránt. Tegyük fel nem kizárólag CSS-el akarom formázni, hanem kell bele némi HTML is, amit CSS-ből nem lehet letrükközni.
"valószínűleg azért nincs fields tpl, mert nem mező alapú megjelenítést alkalmaz a nézeted."
Itt konkrétan mit értesz az alatt, hogy nem mező alapú a lekérdezés? Készítettem egy új nézetet (hírek), a lekérdezés típusa Unformatted List, beállításainál Force using fields be van kapcsolva. Ennek ellenére sem csinál semmit sem a views-view-field.tpl.php, holott már ott van a Theming information közt.
Nem is akárhogyan :)
A teljes Theming Info ablak:
Display output: views-view.tpl.php (File not found, in folder ./), views-view--h-rek.tpl.php, views-view--default.tpl.php, views-view--default.tpl.php, views-view--page.tpl.php, views-view--h-rek--page.tpl.php
Style output: views-view-unformatted.tpl.php (File not found, in folder ./), views-view-unformatted--h-rek.tpl.php, views-view-unformatted--default.tpl.php, views-view-unformatted--default.tpl.php, views-view-unformatted--page.tpl.php, views-view-unformatted--h-rek--page.tpl.php
Row style output: .tpl.php, --h-rek.tpl.php, --default.tpl.php, --default.tpl.php, --page.tpl.php, --h-rek--page.tpl.php
Field Tartalom: Cím (ID: title): views-view-field.tpl.php (File not found, in folder ./), views-view-field--title.tpl.php, views-view-field--h-rek.tpl.php, views-view-field--h-rek--title.tpl.php, views-view-field--page.tpl.php, views-view-field--page--title.tpl.php, views-view-field--h-rek--page.tpl.php, views-view-field--h-rek--page--title.tpl.php
Egyre érdekesebben alakul. Annak ellenére, hogy jönnek a file not found hibaüzenetek, a drupal szerint nem létező views-view.tpl.php tartalma látszik, a nem létező views-view-unformatted.tpl.php is látszik, a drupal szerint szintén nem létező views-view-field.tpl.php-hoz hozzá sem ér.
Pff..
nem tudom a devel themer miért mondja, hogy nincs meg a file
de eleve gyanús, hogy azt mondja, hogy in folder ./
akárhogyis, azt értem az alatt, hogy a nézeted nem mező alapú megjelenítést alkalmaz, hogy nem mező alapú megjelenítést alkalmaz :D lásd magyarázó ábra: https://www.evernote.com/shard/s15/sh/e11c7980-11ef-447b-aaeb-9d0b9d88df...
nekem ez hibátlanul működik. a nézetem 'fields' -re van állítva és nem 'content' -re, egyetlen mezőt jelenítek meg, a 'content: title' (ezt látod is talán a magyarázó ábrán). a sminkembe átmásoltam a views/theme könyvtárból a views-view-field.tpl.php filet, tartalmát erre módosítottam:
eredmény: https://www.evernote.com/shard/s15/sh/e7438659-7066-40e6-8d38-2882c6d61a...
nekem nincs olyan beállítás amire hivatkozol, hogy 'Force using fields'. láttam már ilyet, slideshow típusú nézetben, de unformattedben nekem ilyen nincs. légyszi mutasd a nézet exportját vagy screenshotokat, hogy tovább tudjak segíteni, ha gondolod.
-
clear: both;
Tisztul, tisztul :)
Ahh, na így már sokkal tisztább a kép, köszönöm a magyarázatot. Valóban, Content típusú volt a lekérdezés; akkor viszont azt nem értem, hogy hogyan keveredett a views-view-field.tpl.php a theme infóba :-)
A ./ probléma nem tudom mitől lehet; még csak nem is alkönyvtárba lett telepítve a Drupal, hanem külön virtuális webszerverre.
No mindegy, ha ki tudom dumpolni a $fields tömböt, akkor elvileg nyertem. Sajnos most nem tudom kipróbálni.
Köszi!