# Egyedi hozzászólásrendszer CCT-vel

> Testre szabható hozzászólásrendszer: CCT a hozzászólásoknak, listázási sablon, kapcsolat a bejegyzéssel, lekérdezés, JetFormBuilder-űrlap és láthatósági szabály a vendégeknek.

Ez az útmutató egy teljesen testre szabható hozzászólásrendszert épít: a hozzászólások elrendezését a JetEngine CCT-je adja, a beküldő űrlapot a JetFormBuilder. Nemcsak bejegyzésekhez, hanem felhasználókhoz és kifejezésekhez is adhatsz hozzászólást.

Előfeltételek:

- Elementor (az ingyenes is elég), blokkszerkesztő vagy Bricks;
- aktív JetEngine egyéni bejegyzéstípussal, bekapcsolt **Egyedi tartalomtípusok** és **Dynamic Visibility** modullal;
- aktív JetFormBuilder.

## A hozzászólások megjelenítése

### CCT a hozzászólásoknak

1. A **JetEngine → Egyedi tartalomtípusok** oldalon kattints az **Új hozzáadása** gombra.
2. A CCT hasonlít az egyéni bejegyzéstípushoz, de két fő különbség van: a CCT-elemeknek nincs önálló oldaluk, és az adattárolás módja más. Emiatt a hozzászólások tárolására ideális: az új hozzászólások nem lassítják a webhelyet.
3. A **Mezők** fülön vegyél fel egy **Text** mezőt a hozzászólás címének és egy **WYSIWYG** mezőt a tartalmának.
4. Mentsd a CCT-t (az **Egyedi tartalomtípus hozzáadása** gombbal).

### Mintahozzászólás

A bal oldali menüben nyisd meg az új CCT-t, kattints az **Új hozzáadása** gombra, töltsd ki a mezőket, és kattints a **Hozzáadás** gombra.

### Listázási sablon a hozzászólásokhoz

1. A **JetEngine → Listázások/komponensek** oldalon kattints az **Új elem hozzáadása** gombra, és készíts Listing Item sablont a CCT-hez (a **Lista forrása** „Custom Content Type”).
2. A hozzászólás adatait **Dynamic Field** widgettel (vagy blokkal) jelenítsd meg: a **Source** „Post/Term/User/Object Data”, az **Object Field** listából a CCT megfelelő mezője. A beállítás blokkszerkesztőben is ugyanez.
3. A szerző adatai: tegyél be újabb **Dynamic Field** widgetet, a **Source** „Post/Term/User/Object Data”, az **Object Field** listából válassz felhasználói adatot (például „Nickname”), a **Context** legördülőben pedig a „Current CCT item author” legyen. Így a felhasználói adatot a hozzászólás szerzője szerint kérdezi le.
4. A szerző profilképét a **Dynamic Image** widget (blokkszerkesztőben a **Dynamic Image** blokk) jeleníti meg.
5. Nem vagy korlátozva a WordPress alap felhasználói mezőire: ha felhasználói metaboxot hoztál létre, annak mezői a **Meta Data** forrással megjeleníthetők.
6. A sablont a **Frissítés** gombbal mentsd.

### Kapcsolat a bejegyzés és a hozzászólás között

A **JetEngine → Kapcsolatok** oldalon kattints az **Új hozzáadása** gombra. A kapcsolat köti a hozzászólást ahhoz a bejegyzéshez, amelyhez írták. A hozzászólás a **Child object** (gyermekobjektum), az egyéni bejegyzéstípus (amelynek a bejegyzései megkapják a hozzászólásrendszert) a **Parent object** (szülőobjektum). A **Relation type** legyen „One to many”, mert egy bejegyzéshez több hozzászólás tartozik. Mentsd a **Kapcsolat hozzáadása** gombbal.

### Egyéni lekérdezés a Related Items makróval

Hogy a bejegyzés alatt csak a hozzá tartozó hozzászólások látsszanak:

1. A **JetEngine → Lekérdezéskészítő** oldalon kattints az **Új hozzáadása** gombra. Adj nevet, a lekérdezés típusa legyen „Custom Content Type Query”.
2. A **From Content Type** mezőben válaszd ki a CCT-t, a **Status** legyen „Publish”, hogy csak a közzétett hozzászólások látsszanak.
3. Az **Order & Order By** részben az **Add new sorting parameter** gombbal rendezz dátum szerint: az **Order By** „Created Date”, az **Order** „From lowest to highest values (1, 2, 3; a, b, c)”, a **Type** „Date”.
4. A **Query** részben az **Új hozzáadása** gombbal kérdezd le a hozzászólásokat a kapcsolt bejegyzés szerint: a **Field** „Item ID”, a **Compare** „In the List”, a **Value** mezőben a „Related Items” makró. A **From Relation** a létrehozott kapcsolat, a **From Object** „Child Object” (a gyermek hozzászólások listájához), az **Initial Object ID From** marad „Current Object ID” (az aktuális bejegyzés azonosítója). Kattints az **Apply** gombra, a **Type** legyen „Char”.
5. Kattints a **Lekérdezés hozzáadása** gombra.

### A hozzászólások megjelenítése a bejegyzés oldalán

1. Egyéni bejegyzéstípusnál nyisd meg az egyedi bejegyzés sablonját (vagy egyetlen bejegyzés szerkesztőjét) Elementorral vagy blokkszerkesztővel. Tedd a **Listing Grid** widgetet (blokkot) abba a részbe, ahol a hozzászólások lesznek.
2. Válaszd ki a listázási sablont, a **Columns Number** legyen 1, hogy minden hozzászólás új sorba kerüljön.
3. A **Content** fül **Custom Query** részén kapcsold be a **Use Custom Query** kapcsolót, és válaszd ki az elkészített lekérdezést.
4. A „No data was found” üzenet addig normális, amíg nincs hozzászólás; a szövegét a **General** fülön módosíthatod.
5. Kattints a **Közzététel** gombra. Blokkszerkesztőben ugyanez a **Custom Query** beállítás a blokknál.

## Beküldő űrlap a hozzászólásokhoz

### Az űrlap elrendezése a JetFormBuilderben

A **JetFormBuilder → Forms → Add New Form** oldalon kezdd az űrlapot. Az űrlap egy új CCT-elemet (hozzászólást) vesz fel, és a kapcsolattal az aktuális bejegyzéshez köti. Az űrlapba tegyél:

- **Text Field** a hozzászólás címének;
- **WYSIWYG Field** a szövegének;
- **Hidden Field** az aktuális bejegyzés azonosítójának („post_id”, a **Field Value** „Current Post ID”).

Ha az űrlapban látni szeretnéd a bejelentkezett felhasználó profilképét, tegyél be egy **Dynamic Image** blokkot, válaszd ki a felhasználói mezőt, és a **Context** legyen „Current User (global)”.

### Az Insert/Update Custom Content Type Item művelet

A **Post Submit Actions** között add hozzá az „Insert/Update Custom Content Type Item” műveletet:

- **CONTENT TYPE**: a hozzászólás-CCT;
- **ITEM STATUS**: „Publish” vagy „Draft”; ha kézzel akarod jóváhagyni a hozzászólásokat, a „Draft” a jó;
- **FIELDS MAP**: kösd az űrlapmezőket a CCT-metamezőkhöz. A „post_id” mező melletti legördülő maradjon üresen.

Kattints az **Update** gombra. Az adminisztrátor értesítéséhez adj hozzá „Send Email” műveletet.

### A Connect Relation Items művelet

Adj hozzá egy újabb műveletet, a „Connect Relation Items” műveletet, és a ceruza ikonnal nyisd meg:

- **RELATION**: a korábban létrehozott kapcsolat;
- **PARENT ITEM ID**: a „post_id” űrlapmező (a „Current Post ID” értékű mező miatt az aktuális bejegyzés lesz a szülő);
- **CHILD ITEM ID**: az „inserted_cct_slug” elem, itt a példában „inserted_cct_comments_list”; nálad a saját CCT slugja szerepel;
- **UPDATE CONTEXT**: „We updating children items for the parent object”;
- **HOW TO STORE NEW ITEMS**: „Append new items to already existing related items”.

Kattints az **Update** gombra. A jobb oldali sávban nyisd meg a **JetForm** fület, a **Form Settings** alatt a **SUBMIT TYPE** legyen „Page Reload”, majd **Save**.

### Az űrlap elhelyezése

Nyisd meg az egyedi bejegyzés sablonját (vagy egy bejegyzést) Elementorral vagy blokkszerkesztővel, és tedd a **JetForm** widgetet (blokkot) a hozzászólások részébe. Válaszd ki az űrlapot, a **Submit Type** legyen „Page Reload”. A **Style** részen szabhatod a megjelenést. Közzététel.

### Dynamic Visibility a vendégeknek

Hogy az űrlap ne látsszon a nem bejelentkezett látogatóknak:

- Elementorban válaszd ki a **JetForm** widgetet, nyisd meg az **Advanced** fület, nyisd le a **Dynamic Visibility** szakaszt, és kapcsold be. A feltételtípus „Show element if condition met”, az új feltételnél válaszd a **User** szakaszból a „User logged in” értéket.
- Blokkszerkesztőben jelöld ki a **JetForm** blokkot, kattints a blokkeszköztár szem alakú ikonjára, és állítsd be ugyanezt: **VISIBILITY CONDITION TYPE** „Show element if condition met”, feltétel „User logged in”.

Mentsd, ezután az űrlap csak bejelentkezett felhasználóknak látszik.

## Ellenőrzés

Nyisd meg a bejegyzést a nyilvános oldalon, és küldj be egy hozzászólást. A beküldés után az oldal újratöltődik, és az új hozzászólás megjelenik. Kijelentkezés után ugyanazon az oldalon a hozzászólások látszanak, de az űrlap nem.
