# Beágyazott ismétlőhöz hasonló szerkezet kapcsolatokkal

> Háromszintű kapcsolatlánc (felhasználó, szerep, projekt) és beágyazott listázás a beágyazott ismétlő helyett.

Ha a beágyazott ismétlő mező nem elég, vagy nem használható, ugyanazt a szerkezetet a **Kapcsolatok** funkcióval is felépítheted. A kapcsolat bejegyzések, CCT-elemek, taxonómiatagok és felhasználók között is létrehozható, és három szintű (nagyszülő, szülő, gyerek) lánc is kialakítható. A kapcsolt elemeket **beágyazott listázással** jeleníted meg az oldalon.

A példában egy cég munkatársainak több szerepe van, és minden szerephez több projekt tartozik. Beágyazott ismétlővel ez egy külső ismétlő (szerepek) és egy belső ismétlő (projektek) lenne. Itt helyette ez a lánc készül:

**Felhasználók → Csapatszerepek → Csapatprojektek**

A **Csapatszerepek** bejegyzéstípus a külső, a **Csapatprojektek** a belső „ismétlő”.

Szükséges: Elementor (ingyenes), blokkszerkesztő vagy Bricks, és az aktív JetEngine.

![A Kapcsolatok listája a JetEngine menüben](./kepek/meta-mezok-4-kapcsolatok-lista.webp)

*A Kapcsolatok listája a JetEngine menüben* (https://minta-bolt.hu/wp-admin/admin.php?page=jet-engine-relations)

A kép a **JetEngine → Kapcsolatok** oldalt mutatja: itt hozod létre a két kapcsolatot.

## 1. A két bejegyzéstípus

1. Menj a **JetEngine → Bejegyzéstípusok** oldalra, és kattints az **Új hozzáadása** gombra.
2. Add meg a nevet (például „Csapatszerepek”). A slug magától kitöltődik. Ha kell, vegyél fel metamezőket.
3. Mentsd a bejegyzéstípust.
4. Ismételd meg a „Csapatprojektek” típussal. Mezőnek vedd fel például a **Projektképek** nevű **Galéria** típusú mezőt, és a **Projekt állapota** mezőt a „Nincs elkezdve”, „Folyamatban”, „Szünetel” és „Befejezett” opciókkal.

## 2. Nagyszülő és szülő közötti kapcsolat

1. Nyisd meg a **JetEngine → Kapcsolatok** oldalt, és kattints az **Új hozzáadása** gombra.
2. Add meg a nevet: „Felhasználók > Csapatszerepek”.
3. Szülő objektumnak válaszd a **Felhasználók**, gyerek objektumnak a „Csapatszerepek” bejegyzéstípust.
4. A kapcsolat típusa legyen **Sok a sokhoz**.
5. Kapcsold be a gyerekek létrehozását és törlését a szülő szerkesztőjéből lehetővé tevő két kapcsolót, hogy a felhasználó szerkesztőoldaláról is felvehesd a szerepeket.
6. Görgess lejjebb, és vedd fel a kapcsolat metamezőit, például „Felhasználói feladatok” és „Szakértelem szintje”.
7. Mentsd a kapcsolatot.

## 3. Szülő és gyerek közötti kapcsolat

1. Hozz létre egy újabb kapcsolatot „Csapatszerepek > Csapatprojektek” névvel.
2. Szülő objektum a „Csapatszerepek”, gyerek objektum a „Csapatprojektek”, a típus **Sok a sokhoz**.
3. Szülő kapcsolatnak add meg az előbb létrehozott „Felhasználók > Csapatszerepek” kapcsolatot. Ettől lesz belőle háromszintű lánc.
4. Kapcsold be a gyerekek létrehozását és törlését mindkét irányból.
5. A kapcsolat metamezői lehetnek például: **Kezdő dátum** és **Záró dátum** (**Dátum** típus), valamint **Kiosztott feladatok**, **Projekt haladási jegyzetei** és **Visszajelzés** (**Szövegterület** típus).
6. Mentsd a kapcsolatot.

## 4. Adatok felvitele

1. Nyisd meg egy felhasználó szerkesztőoldalát, és a lap alján a gyerek szerepek blokkban kattints az új elem felvételére. Írd be a címet (például „Frontend fejlesztő”), mentsd, majd a felugró ablakban töltsd ki a kapcsolat metamezőit, és mentsd az adatokat.
2. Vedd fel ugyanígy a második szerepet („UX tervező”). A szerepek bejegyzésként is létrejönnek a **Csapatszerepek** listában.
3. Nyisd meg egy szerepet. A **Szülő felhasználó** részben a felhasználó már hozzá van kapcsolva. A **Gyerek csapatprojektek** részben vegyél fel projekteket (cím és egyedi mezők), például „Webáruház” vagy „Mobilbanki alkalmazás”.
4. Ugyanígy töltsd ki a többi szerepet is.

## 5. Lekérdezések

Két lekérdezés kell: egy a projektekhez (a szerepek gyerekei), egy a szerepekhez (a felhasználók gyerekei).

![A Lekérdezéskészítő lekérdezéseinek listája](./kepek/meta-mezok-4-lekerdezesek-lista.webp)

*A Lekérdezéskészítő lekérdezéseinek listája* (https://minta-bolt.hu/wp-admin/admin.php?page=jet-engine-query)

A kép a **JetEngine → Lekérdezéskészítő** oldalt mutatja, ahol a két lekérdezés elkészül.

1. Menj a **JetEngine → Lekérdezéskészítő** oldalra, és kattints az **Új hozzáadása** gombra.
2. Add meg a nevet („Projektek a szerepekhez”). A lekérdezés típusa maradjon a **Bejegyzések lekérdezése**.
3. Az általános részben válaszd ki a gyerek bejegyzéstípust („Csapatprojektek”).
4. A **Bejegyzés és oldal** részben kattints az adatbázis ikonra a **Post In** mező mellett, és válaszd a **Kapcsolódó elemek** makrót.
5. A **From Relation** mezőben válaszd a „Csapatszerepek > Csapatprojektek” kapcsolatot, a **From Object** mezőben a **Child Object** értéket, az **Initial Object ID From** mezőben a **Current Object ID** értéket. Kattints az **Alkalmaz** gombra.
6. Mentsd a lekérdezést.
7. Hozd létre a második lekérdezést („Szerepek a felhasználókhoz”) ugyanígy: gyerek bejegyzéstípus a „Csapatszerepek”, kapcsolat a „Felhasználók > Csapatszerepek”, a többi beállítás ugyanaz.

## 6. Listázás a projektekhez

1. Menj a **JetEngine → Listázások/komponensek** oldalra, és vegyél fel új elemet.
2. A **Listázás forrása** legyen a **Lekérdezéskészítő**, válaszd ki az első lekérdezést („Projektek a szerepekhez”), add meg a nevet („Projektek listázása”), és válaszd a megjelenítési módot (Blokkok, Bricks, Timber/Twig vagy Elementor).
3. Hozd létre a listázási elemet.
4. A bejegyzés adatait (cím, egyedi mezők) a dinamikus widgetekkel jelenítsd meg, ahogy szoktad.
5. A kapcsolat metaadatainak megjelenítéséhez tegyél be egy **Dynamic Field** elemet, a **Forrás** legyen **Kapcsolat metaadatai**, a **Metamező** listából válaszd a „Csapatszerepek > Csapatprojektek” kapcsolat mezőjét.
6. A **Kontextus** listában válaszd a **Kapcsolódó elemek innen: …** értéket a kapcsolat nevével.
7. Hasznos beállítások: **Elrejtés, ha az érték üres**; **A mező kimenetének szűrése** a **Dátum formázása** visszahívással a dátummezőhöz, szöveges mezőnél a **Szöveg vágása karakterek vagy szavak szerint** visszahívással. Az utóbbi akkor érhető el, ha a **JetEngine → JetEngine → Modulok → Külső modulok** lapon bekapcsoltad a szövegvágás visszahívást.
8. Tedd közzé a listázást. Az előnézet addig nem teljes, amíg az összes lépést el nem végezted.

## 7. A beágyazott listázás

1. Vegyél fel új listázást a **Listázások/komponensek** oldalon, forrásnak a **Lekérdezéskészítő**, lekérdezésnek a második („Szerepek a felhasználókhoz”), névnek „Szerepek listázása”.
2. A szerep adatait és a kapcsolat metamezőit itt is dinamikus mezőkkel jelenítsd meg.
3. Húzd be a **Listing Grid** elemet, és válaszd ki benne az előző, „Projektek listázása” listázást. Ettől lesz beágyazott a listázás. Ebben a szerkesztőben az előnézet nem érhető el.
4. Mentsd a változtatásokat.

## 8. Elhelyezés és eredmény

A Listing Grid elemet a nagyszülő objektum, jelen esetben a felhasználó egyedi oldalán helyezed el. A példában a Profilkészítő felhasználói profiloldalának adatokat megjelenítő aloldal-sablonjába kerül: nyisd meg a sablont a szerkesztőben, tedd be a **Listing Grid** elemet, válaszd ki a „Szerepek listázása” listázást, és mentsd.

A weboldalon nyisd meg a felhasználó profiloldalát: a szerepek és a hozzájuk tartozó projektek a beágyazott listázásban, csoportosítva jelennek meg.
