# Dinamikus naptár

> A Dynamic Calendar widget beállításai, események naptárba rendezése dátummező szerint, többnapos események, és a naptár Bricksben.

A **Dynamic Calendar** widget bejegyzéseket, felhasználókat, hozzászólásokat, kifejezéseket és egyéni tartalomtípus-elemeket jelenít meg naptárban, kattintható listázási elemként. A naptárban a hely az elem létrehozási dátumától vagy egy egyéni mező dátumától függ.

## Előkészítés

1. Kapcsold be a **Dinamikus naptár** modult a **JetEngine → JetEngine → Modulok → Alapértelmezett modulok** fülön, és mentsd.
2. Hozz létre egy bejegyzéstípust az eseményeknek (például „Események”), és vegyél fel **Dátum** típusú metamezőt.
3. A **Dátum** mezőnél kapcsold be az **Save as timestamp** (mentés időbélyegként) kapcsolót. Nélküle az események nem jelennek meg helyesen a naptárban.
4. Többnapos eseményekhez vegyél fel egy második, „Befejezés dátuma” **Dátum** mezőt is, szintén időbélyeg mentéssel.
5. Ha képet is szeretnél, vegyél fel **Média** mezőt.
6. Mentsd a bejegyzéstípust, és hozz létre néhány eseményt. A többnapos eseménynél töltsd ki a kezdő és a záró dátumot is.

Bricksben ezen kívül a **Bricks → Beállítások** oldalon az **Oldalak** kapcsolónak is bekapcsoltnak kell lennie a bejegyzéstípusoknál.

## Listázási sablon a naptárcellához

1. A **JetEngine → Listázások/komponensek** oldalon kattints az **Új elem hozzáadása** gombra.
2. A forrás **Bejegyzések**, a bejegyzéstípus az eseményeké, add meg a nevet, a nézet legyen az, amelyiket használod (a Bricks példában **Bricks**).
3. Építsd fel a cellát dinamikus elemekkel: **Dynamic Field** a címhez, **Dynamic Image** a képhez, **Dynamic Link** a **Permalink** forrással az esemény oldalára.
4. Mentsd.

## A widget az oldalon

Elementorban a **Dynamic Calendar** widgetet húzd az oldalra (a modulnak bekapcsoltnak kell lennie). Bricksben a **Calendar** elemet add egy szakaszhoz.

### Általános beállítások

| Beállítás | Mit csinál |
|---|---|
| **Listing** | A naptárban megjelenő listázási sablon. Az **Edit Listing** gomb új lapon megnyitja a szerkesztőt. |
| **Group posts by** | A naptárba rendezés alapja, lásd lent. |
| **Allow multi-day events** | Csak a „Date from custom field” esetén. Bekapcsolva megjelenik az **End Date Field Name**, így a naptár az eseményt a kezdő és a záró dátum között is megjeleníti. |
| **Use Custom Post Types** | Több bejegyzéstípus megjelenítése. A típusok metamezőinek nevei egyezzenek, a legjobb egy közös metabox. |
| **Week days format** | A napok neve: **Full** (Hétfő), **Short** (Hét), **Initial letter** (H). |
| **Start from custom month** | A naptár egy általad választott hónappal és évvel nyílik meg, nem a mostanival. |
| **Show posts from nearby month** | A hónap első és utolsó hetében a szomszédos hónapok átlógó napjainak eseményeit is mutatja. |
| **Hide past events** | Csak a jövőbeli eseményeket mutatja. |
| **Allow date select** | Hónap- és évválasztó. A **Min select year** és **Max select year** mezőben fix évet (például 1970), szöveget (például `+3years`, `-1year`, `this year`) vagy JetEngine-makrót is megadhatsz. |
| **Cache Calendar** | Gyorsítótár. A **Cache Timeout** másodpercben (például 60; a -1 korlátlan), a **Maximum Cache Size** a tárolt hónapok maximális száma (például 12): ha több lenne, a legrégebbi hónap törlődik. |

A **Group posts by** lehetőségei:

- **Post publication date**: a közzététel dátuma.
- **Post modification date**: az utolsó módosítás dátuma.
- **Date from custom field**: egy **Dátum** metamező értéke (bejegyzések, felhasználók, hozzászólások, kifejezések, tartalomtípus-elemek). Megjelenik a **Meta field name** mező, ide kell a mező neve.
- **Query Item creation date (depends on used query)**: felhasználók, hozzászólások, tartalomtípus-elemek létrehozási dátuma.
- **Appointment date**: JetAppointment szolgáltatások foglalási dátuma.
- **Booking date**: JetBooking foglalások dátuma, ha a bővítmény aktív.

### Egyéni lekérdezés és régi lekérdezés

A **Custom Query** szakaszban a **Use Custom Query** kapcsolóval és a **Custom Query** listával Lekérdezéskészítő-lekérdezést alkalmazhatsz. A **Posts Query (Legacy)** ugyanúgy működik, mint a Listing Gridnél, de régi megoldás, helyette is lekérdezést érdemes használni.

### Láthatóság és stílus

A **Widget Visibility** szakaszban a **Hide widget if** értéke **Always show** vagy **Query is empty**. A **Style** fülön a felirat, a navigációs nyilak, a napnevek, a napok és a mobilnézet stílusa állítható.

## Az eredmény

A frontenden az események a **Dátum** mező értéke szerint jelennek meg. A többnapos esemény mindkét napon látszik (a példában a hétvégi borkóstoló a kezdő és a záró napon is).

## Naptár a blokkszerkesztőben

A blokkszerkesztőben a **Listing Calendar** blokk használható. A menet ugyanaz: a **JetEngine → JetEngine → Modulok** fülön kapcsold be a **Dinamikus naptár** modult, hozz létre egy bejegyzéstípust az eseményeknek **Dátum** metamezővel (az **Save as timestamp** kapcsoló legyen bekapcsolva), majd készíts hozzá listázási sablont a **Blokkok (Gutenberg)** nézettel.

Az oldalon add hozzá a **Listing Calendar** blokkot. A **General** szakaszban a **Listing** listából válaszd ki az események sablonját, a **Group posts by** értéke legyen **Date from custom field**, a **Meta field name** mezőbe pedig írd a dátum metamező nevét. Az események a naptár megfelelő celláiban jelennek meg.

A blokk beállításai megegyeznek a fenti widgetével: **Allow multi-day events**, **Week days format**, **Start from custom month**, **Show posts from the nearby month**, **Hide past events** és a **Caption Layout** (a „Back” és „Forward” gombok, valamint a hónap és az év elrendezése, négy változatból). A **Post Query** szakaszban a megjelenő bejegyzéseket szűkítheted, a **Block Visibility** szakaszban a **Hide block if** listából a **Query is empty** lehetőséggel elrejtheted a blokkot, ha a lekérdezésnek nincs eredménye.

## Egy bejegyzés több napon

A többnapos esemény (például egy nyolcnapos utazás, tábor, konferencia vagy műhely) a kezdő és a záró dátum között minden napon megjelenik a naptárban. Menete:

1. Az esemény bejegyzésénél töltsd ki a kezdő és a záró dátum metamezőt.
2. Hozz létre listázási sablont az eseményhez, dinamikus widgetekkel.
3. Húzd be az oldalra a **Calendar** widgetet.
4. A **Content → General** szakaszban válaszd ki a sablont, a **Group posts by** legyen **Date from custom field**, és a **Meta field name** mezőbe írd a kezdő dátum mezőjének nevét.
5. Kapcsold be az **Allow multi-day events** kapcsolót, és az **End Date Field Name** mezőbe írd a záró dátum mezőjének nevét.
6. Mentsd az oldalt. A naptárban az esemény a teljes időszakban napról napra látszik.

## Ismétlődő események

Ha az esemény rendszeresen ismétlődik (napi, heti, havi vagy éves gyakorisággal), **Advanced Date** mezőt használj a sima **Dátum** helyett. Ez a típus a **Dinamikus naptár** modul bekapcsolása után jelenik meg.

### Az Advanced Date mező felvétele

1. Hozz létre egy bejegyzéstípust (a példában „Filmek”) a szükséges mezőkkel.
2. A **JetEngine → Metaboxok** oldalon hozz létre új metaboxot. A **Visibility Conditions** (láthatósági feltételek) részben az **Enable For Post Types** listában válaszd ki a bejegyzéstípust, a **Meta fields** részben pedig a **Mező típusa** legyen **Advanced Date**. Mentsd.
3. Nyisd meg a bejegyzéseket, és a mezőben (a példában „Dátumok”) állítsd be:
   - **Start date**: az esemény kezdete;
   - **Has end date**: bekapcsolva megadhatsz záró dátumot a többnapos eseményhez;
   - **Is recurring**: bekapcsolva megjelenik a **Repeat** lista **Daily**, **Weekly**, **Monthly**, **Yearly** értékekkel. Mindegyik a hozzá tartozó mezőket mutatja, például a **Weekly** a hét napjait kiválasztó gombokat;
   - **End**: **After** (hány ismétlés után) vagy **On date** (melyik dátumon) ér véget az ismétlődés.
4. Töltsd ki és tedd közzé a bejegyzéseket.

Az ismétlődő eseményt mindig korlátozni kell: az ismétlések számával vagy záró dátummal.

### Sablon és naptár

1. A **JetEngine → Listázások/komponensek** oldalon hozz létre listázási elemet a bejegyzéstípushoz, és a **Dynamic Field** és **Dynamic Image** widgettel jelenítsd meg a szükséges mezőket. Mentsd az **Update** gombbal.
2. Hozz létre oldalt, és húzd be a **Calendar** widgetet (Elementorban, blokkszerkesztőben). Állítsd be:
   - **Listing**: az elkészült sablon;
   - **Group posts by**: **Date from custom field**;
   - **Meta field name**: az **Advanced Date** mező neve (a példában `dates`);
   - **Allow multi-day events**: bekapcsolva, ha a mezőnél a **Has end date** is be van kapcsolva;
   - az **End date field name** mezőt nem kell kitölteni, mert az érték a forrásmezőből jön.
3. Szükség szerint stílusozd a naptárat, és tedd közzé az oldalt.

A frontenden a naptár az ismétlődő eseményeket a beállított gyakorisággal jeleníti meg.

### Ismétlődő események Bricksben

Bricksben a menet hasonló, de néhány dolog más:

1. A **Bricks → Beállítások → Általános** oldalon kapcsold be a **Listing Items** és a bejegyzéstípus kapcsolóját, és mentsd.
2. A listázási elem **Dynamic Field** elemével a kezdő dátumhoz a **Source** legyen **Meta Data**, a **Meta field** az **Advanced Date** mező. Kapcsold be a **Filter field output** kapcsolót, a **Callback** legyen **Format date**, a **Field Format** mezőbe pedig a kiírandó szöveget írd (például „Kezdete: %s”).
3. A záró dátumhoz a **Source** szintén **Meta Data**, de a **Custom Object Field/Meta field/Repeater key** mezőbe a mező nevét kell írnod `__end_date` utótaggal (például `rec_dates__end_date`). Itt is **Filter field output**, **Format date** callback és szöveg kell.
4. A **Calendar** elem **General** beállításainál válaszd ki a listázást, a **Group by** legyen **Date from custom field**, a **Meta field name** és az **End date field name** is az **Advanced Date** mező neve (például `rec_dates`), kapcsold be az **Allow multi-day events** kapcsolót, a **Use custom post types** bekapcsolása után pedig válaszd ki a bejegyzéstípust.
5. Mentsd a sablont. A jobb felső sarokban a szem alakú ikon az előnézeti módot kapcsolja be.
