Melyik a jobb megoldás?
Kedves régi "motorosok"! Szerintetek, melyik a jobb megoldás arra, ha mezőket szeretnék egyedi elrendezésbe formázni?
A mezők egyazon tartalomtípusban vannak.
Használhatnék teljesen egyedi sablont a mezők értékeinek egyedi bekérésével a content-ből. Ekkor minden mezőt egyedileg kéne elhelyeznem és egy új mező hozzáadásánál az addig nem jelenne meg, míg nem frissítem a sminket.
Tehát csak egy bizonyos mennyiségű mezőt kéne egyedileg elrendeznem. Ehhez létezik egy field group modul, ahol különféle blokkokba szervezhetem a mezőket.
Ugyanakkor úgy vélem, talán jobb megoldás lenne a content|without szűrővel kivennem azt a négy-öt mezőt, amit szeretnék a content-ből. Így a maradék content a hagyományos módon kerülne megjelenítésre. A kiszűrt mezőket pedig kedvem szerint jeleníthetném meg az adott tartalomtípus sminkjében.
Szóval szerintetek, melyik a jobb megoldás? Esetleg van olyan, amire nem gondoltam?
Én még ajánlanám
hogy nézd meg a display suite modul-t. https://www.drupal.org/project/ds
Itt sokkal flexibilisebb layout kezelést is eltudsz érni és akár egymás mellé is tudod rendezni a tartalmakat.
Drupal developer at Cheppers
Köszönöm! Lenne, még egy kérdésem, ha nem gond!
A display suite remek eszköz, bár, még nem ismertem ki minden lehetőségét. Van, még mit tanulnom, hogy miket is lehet megvalósítani vele.
Esetemben a kiszűrt mezőket kellene, listába, vagy táblázatba rendezni. A rendezés egyik esete egy kétoszlopos táblázat. A th elemek adottak, azt a drupal fordító rendszerén át is megoldhatom. A második oszlopban az első sor egy mezőt, míg a második három mezőt (vesszővel elválasztva) az utolsó pedig egy mezőt tartalmaz.
Az egyedi részek mindig a tartalom elején vannak ezért tűnt jó ötletnek a szűrős megoldás. Így, ha a tartalom további mezőkkel bővül, akkor a sminket nem kell változtatni, míg magát a kiemelt részt nem érinti a változás.
Kérdés:
Amikor elkezdtem foglalkozni a drupal 8-cal, akkor feltűnt, hogy a mezők twig kódjában nem lehet rész html elemeket elhelyezni. Akkoriban arra gondoltam, ha úgy is tudom a mezők sorrendjét, akkor egy táblázatot úgy is elkészíthetnék, hogy a megfelelő html részelemeket a megfelelő mezők twig sminkjébe írnám.
Amikor egy táblázat összes alkotóeleme benne van egy twig fájlban, akkor kirajzolódik, ám, ha a táblázat csak egy része szerepel, akkor egyszerűen törődnek a tr, th, td elemek és sima szövegként jelenik meg a közéjük írt érték.
Miért van ez így? Illetve ki lehet ezt iktatni, vagy nem?
Ugyebár, ha nem tiltaná a részelemeket a drupal 8, akkor, ahogy megjelenítődnek a mezők a teljes struktúra is kialakulna és létrejönne például a táblázat. Mivel van lehetőség tartalomtípushoz
Hogy érted pontosan
ezt a "rész html elemeket elhelyezni" ? Én mindképp a táblázat teljes html vázát egy twig fájlba tenném és csak az egyes mezők kimenetét bíznám field twig fájlokra.
De ha ilyen komplex a layout, akkor esetleg átgondolnám magát az adattárolást is(a vesszővel alválasztott mezők mért külön field-ek?).
Álltalában az ilyen komplex stuktúráknál a különböző megjelenítési szinteket kombinálva kell használni(field formatter - field display, group és display suite).
A legnagyobb flexibilitást amúgy a panels + panelizer + mini panel megoldás adja, de azért ennek használata és átlátása időt és gyakorlást igényel. (nehezebb mint a display suite).
Drupal developer at Cheppers
Úgy értem, hogy nincs a teljes struktúra egy mező twig-ben.
Amikor a content a node.html.twig-ben kirajzolódik, akkor ott a drupal a beállítások alapján a content-et maga generálja ki. Itt hozzáférhető minden mező. A mezők twig fájljánál csak az adott mezőbe bekerülő változók érhetők el a teljes tartalom nem (kivéve persze, ha a .theme fájlon át be nem fűzőm őket az adott mező változói közé).
Viszont tudom milyen sorrendben generálódik ki a content. Ekkor, ha több mezőből egy táblázatot szeretnék, akkor az egyes mezőkhöz hozzáfűzhetem a táblázatot alkotó html elemeket, de nyilván nem mindet, hisz a táblázatot az adott táblázatba tartozó mezők fogják kirajzolni.
Példa:
Van 6 mező. Legyen ez egy két soros, három oszlopos táblázat. (A fent említett esetek nem ilyenek, de jól érzékelteti, hogy mire gondoltam rész html esetén.)
Tehát az első mezőbe bekerül mondjuk a táblázat fejléce és az első mező értéke, mint tartalom. Így az alábbi html elemeket tartalmazza (az egyszerűség kedvéért a thead, tbody most lényegtelen):
Első mező twig-jében szereplő html elemek:
table
tr
th-/th, th-/th, th-/th
/tr
tr
td (ide jön at első mező értéke) /td
Második mező:
td (második mező értéke) /td
Harmadik mező:
td (harmadik mező értéke) /td
/tr
Negyedik mező:
tr
td (negyedik mező értéke) /td
Ötödik mező:
td (ötödik mező értéke) /td
Hatodik mező:
td (hatodik mező értéke) /td
/tr
/table
Ilyenkor, mivel az első mező twig fájljában nincs befejezve a táblázat, ezért minden a táblázathoz kapcsolódó html elemet töröl a drupal és a megjelenítésnél, már nem lesznek ott. Ugyanígy jár a többi mező is, mivel hiányos html elemeket tartalmaz, ezért azok nem jelenítődnek meg. Ez olyannyira így van, hogy, ha a table - /table elem hiányzik, akkor is törlődik minden tr, th és td elem. Nyilván tudja a drupal, vagy inkább a twig, hogy ezek csak egy table elemen belül működnének ezért kiveszi őket. Azt sajnos, már nem tudja, hogy ha a hat mezőt egymás után a rész html elemekkel kigenerálná, akkor a végeredményben, már ott lenne a hibátlan teljes táblázat.
Lehet butaság volt ez az elgondolás, de elsőre logikusnak tűnt.
(A vesszővel elválasztott mezők eredetileg külön kategóriákba tartoznak, de az oldaleleji összefoglalóban egy táblázat sorba kerülnek a rokon kategóriák.)
Panels-t, még nem használtam eddig. Nézegettem, már, de komolyabban, még nem alkalmaztam. A drupal igazi mélységeivel, most a 8-as verzióban kezdtem el ismerkedni. A 7-es kapcsán sokan dicsérték a panels és a köré épülő modulok funkcióit, de sajnos, még nem ismerkedtem meg vele komolyabban.