Formázott menülista views segítségével?

HF leon képe

Azon gondolkodom, megoldható-e, hogy amikor kigenerálok a views modullal egy menülistát (egy lista blokkot), akkor a generáláshoz felhasznált tartalomtípusok egyes mezőitől függően automatikusan hozzá tudnék-e rendelni a linkekhez különböző css osztályokat.

Például az egyszerűség kedvéért legyenek különféle tartalomtípusokban különféle termékek, amelyeknek legyen mondjuk egy mezőben három jelzője: kifutott, aktuális, jövendőbeli.

Magár a menü generálást különféle opciók szerint mindig kigenerálódna egy menü lista. Amelynél az elavult listaelemek szürke az aktuálisak zöld az eljövendő elemek pedig narancs színt kapnának. Megoldható ez views segítségével?

Valamint, még egy kérdés: Az views menünél van lehetőség az éppen aktív tartalomhoz tartozó menüelemet egy új css osztállyal ellátni, amely segítségével mondjuk a háttérszínét megváltoztathatnám?

Van erre a két esetre a drupal 8-as views-ban megoldás, illetve lehetőség?

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
nevergone képe

Preprocess függvénnyel tuningolnám meg a nézetet, abban eléred az egyes elemek jellemzőit is és plusz CSS osztályokat is tudsz tenni az elemekre. Már ha jól értem a kérdésed.
Mondjuk ez elsőre jó is lehet neked: https://api.drupal.org/api/drupal/core%21modules%21views%21views.theme.i...

1
0
HF leon képe

Egy kérdésem lenne, még, hogy a definiált views mezőit, hogyan kérhetem ilyenkor le?

Ezen a téren, még van tanulni valóm. Például egy tartalomtípusban definiált számlista mező szöveges értékeit, hogy tudnám elérni? Vagyis magát a mező összes lehetséges szövegét? (pl a field-xy= 1:sárga, 2:zöld, 3:lila, itt, miként tudnám a témafájlban lekérni a sárga, zöld, lila tömböt?)

0
0
nevergone képe

Szia!

Ha nem kapsz használható segítséget, akkor a napokban mutatok egyet, csak egy kis türelmedet kérem.
Érdekes és jó a kérdésed, szeretem az ilyeneket. :)

0
0
HF leon képe

Köszönöm!

Én a webfelületen tudok egy megoldást a rejtett mezők használata, majd egy sima text mezőben az értékek felhasználása. Ez a rész jól megy.

Viszont a különféle mezőkhöz való hozzáférést, még nem egészen értem. Legyen szó egy modulról, vagy a .theme fájlról. Itt nem egészen tiszta, mikor hogy érhetem el a különféle eltárolt mezőket.

Sajnos erről a részről nem találtam eddig jó leírást. A témafájlban jól tudok a különféle .twig fájlokhoz plusz változókat hozzáadni.

Viszont a különféle eltárolt adatok lekérdezése csak a google közreműködésével ment eddig. Ha ebben tudnál segíteni, annak nagyon örülnék! Jó lenne megértenem a logikáját :).

  1. $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
  2. $language_name = \Drupal::languageManager()->getCurrentLanguage()->getName();
  3. $sitename = \Drupal::config('system.site')->get('name');

Például a fenti kódban a nyelvet a nyelv nevét és a szájt nevét kérem le.
Ilyen esetben lenne jó tudnom, hogy például az adott nézet mezőit hogyan érhetném el, vagy például egy korábban definiált számlista mező összes társított név értékeit miként kérhetném le.

(Most egyszerűen beleírtam a twig fájlba a számlista mező értékeit, amit az adott tartalomnál a rögzített értékekkel együtt használok fel a kívánt megjelenítéshez. Viszont, mi van , ha a lista később bővül, ekkor újra a twig fájlt is szerkesztenem kéne, ami nem elegáns. Ezért lenne jó lekérnem a mező összes lehetséges értékét és ezt átadnom a twig fájlnak.)

0
0
nevergone képe

Szia!

Elmondnád, hogy pontosan mi a feladat?

Köszi!

0
0
HF leon képe

No és kezdjük, hátulról a második kérdésemmel.

Tehát:
Legyen egy tartalomtip tartalomtípusom. definiáljunk ebben egy szám lista mezőt mondjuk field-list néven. A listában több mező is választható, de ez most lényegtelen a kérdés szempontjából.

A számlista mező értékei legyenek az alábbiak:
1|kék
2|piros
3|zöld
4|narancs

Nyilván, ha a mezőnek létrehozok egy egyedi twig fájlt, akkor az adott node-ban (tartalomban) megadott értékeket ezen keresztül szabadon formázhatom.

Viszont én ebben a twig fájlban a megjelenéshez szeretném az összes választható értéket felhasználni. Ezt leképezéskor nyilván nem kapja meg a mező, csak a tartalomhoz bejelölt mezőértékeket.

A .theme fájl segítségével felvehetnék egy új változót ehhez a twig fájlhoz, amely egy tömb lenne, ami a számlista összes lehetséges elnevezését tartalmazná. Vagyis jelen esetben a kék, piros, zöld, narancs értékeket.

Igen ám azonban ehhez le kellene tudnom kérdezni a drupal8-tól a field-list mező összes lehetséges elnevezését. Hiszen, ha ez megvan, akkor, már könnyedén átadhatom az értékeket. (A views-os esetben is hasonló a kérdés, csak ott az adott nézethez tartozó mezők értékeit szeretném lekérni, de most maradjunk az előző kérdésnél.)

Most úgy oldottam meg, hogy beleírtam a lehetséges értékeket a twig fájlba. Viszont, ha később a számlistát bővíteni kell, akkor az adott mező twig fájljában is frissítenem kell az értékeket az újonnan bekerülő elemekkel (például, ha a lista bővülne egy 5|lila értékkel.

Viszont, ha le tudnám kérdezni ezeket az értékeket, akkor a webws felületen végrehajtott változás azonnal átkerülne a megjelenítésbe is.

A megjelenést képzeljük el úgy, hogy kiíródnak a színek mind és az adott tartalomnál kiválasztottak előtt lenne egy x. Ettől függetlenül a látogató láthatná az összes lehetséges színt is, viszont tudná, hogy jelenleg melyek elérhetők ezekből.

Amikor a webes felületen a lista bővülne egy színnel az így azonnal megjelenhetne a mező megjelenítésében is.

0
0
HF leon képe

Sajnos hiába keresem szorgalmasan a második kérdésemre sehol nem lelek választ. Mármint, hogy egy listamező értékeit, vagyis magát a listát miként érhetném el, kérhetném le a .theme fájlban.

Az elsőre sikerült némi támpontot kapnom:
Drupal 8 Preprocess Views View Field

Ha valaki tudna a listamező elérésére választ adni annak nagyon örülnék.

0
0
nevergone képe

„egy listamező értékeit, vagyis magát a listát miként érhetném el, kérhetném le a .theme fájlban”

Ezt raktam össze neked, a tesztoldalamon működni látszik. Biztosan lehetne szebben is.

  1. /**
  2.  * Implements template_preprocess_views_view_field().
  3.  */
  4. function mytheme_preprocess_views_view_field(&$vars) {
  5. /** @var \Drupal\views\ViewExecutable $view */
  6. $view = $vars['view'];
  7. /** @var \Drupal\views\Plugin\views\field\EntityField $field */
  8. $field = $vars['field'];
  9. /** @var \Drupal\views\ResultRow $row */
  10. $row = $vars['row'];
  11. $field_name = $field->field;
  12. if ($field_name == 'field_test_list') {
  13. $entity = $row->_entity;
  14. // mező lehetséges értékei
  15. $allowed_values = FieldConfig::loadByName($entity->getEntityTypeId(), $entity->getType(), $field_name)->getSetting('allowed_values');
  16. }
  17. }
1
0
HF leon képe

Köszönöm ez alapján sikerült megoldanom, amit szerettem volna.

Egy kérdés, még felmerült bennem. A getSetting('allowed_values') a számokhoz társított értékeket kéri le. Arra is van lehetőség, hogy magát a számlista nyers értékeit lekérjem?

0
0
nevergone képe

A fenti példában az $allowed_values egy asszociatív tömb lesz, ami tartalmazza a mező lehetséges értékeit és azokhoz tartozó szöveges címkéket is. Bejárhatod egy ciklussal a következő módon:

  1. foreach ($allowed_values as $key => $value) {
  2. // foobar
  3. }

Ha csak a kulcsok kellenek, akkor az array_keys(), ha pedig csak az értékek, akkor az array_values() függvény segít.

1
0
HF leon képe

Reméltem egyszerűen lekérhető. Azt észrevettem, hogy asszociatív tömb, már a tesztelés közben :). Egyébként igazad van marad ez a megoldás, ami természetesen teljesen megfelelő.

Köszönöm szépen a segítséget!

0
0