# Calculated Callback kiegészítő

> Számtani műveletek a Dynamic Field widgetben a Calculated Callback kiegészítővel: százalékos növelés és csökkentés, összeg, különbség, szorzás, egyéni visszahívás.

A Calculated Callback kiegészítő a Dynamic Field widgethez ad számítási visszahívásokat, így a megjelenített számmező értékén közvetlenül műveleteket végezhetsz.

Előfeltételek: Elementor (az ingyenes is elég) vagy a blokkszerkesztő; aktív JetEngine, és egy egyedi bejegyzéstípushoz létrehozott listázási sablon. A kiegészítő **Szám** típusú metamezőkkel működik, ezért vegyél fel ilyen mezőt a típushoz, és töltsd ki néhány bejegyzésnél.

## A kiegészítő telepítése

A kiegészítő külön bővítményként települ.

1. Töltsd le a Calculated Callback kiegészítőt a JetEngine fejlesztői eszközök oldaláról, zip fájlként.
2. Nyisd meg a **Bővítmények → Új hozzáadása** oldalt, és kattints a **Bővítmény feltöltése** gombra.
3. Válaszd ki a zip fájlt (vagy húzd a jelölt területre), majd kattints a **Telepítés most** gombra.
4. A telepítés után kattints a **Bővítmény aktiválása** gombra.

## Használat

1. Nyisd meg azt a sablont, ahová a számított értéket szeretnéd tenni: listázási elemet, egyedi bejegyzés- vagy archívumsablont.
2. Add hozzá a **Dynamic Field** widgetet. A **Forrás** legyen **Metaadat**, a **Meta mező** pedig a számmező (például a napi ár). Ennek **Szám** típusúnak kell lennie, hiszen számtani műveletet végzel vele.
3. Kapcsold be az **A mező kimenetének szűrése** kapcsolót.
4. A **Visszahívás** listában válaszd a **Calculated field** értéket.
5. A **Calculated callbacks** listában válaszd ki a kívánt műveletet. A további beállítás az **Additional arguments** mezőben van.

A számított visszahívások:

| Visszahívás | Működés |
| --- | --- |
| Növelés százalékkal | Az **Additional arguments** mezőbe írt százalékkal megnöveli az értéket, az eredményt azonnal kiírja. |
| Csökkentés százalékkal | Az **Additional arguments** mezőbe írt százalékkal csökkenti az értéket. |
| Mezők összege | Az **Additional arguments** mezőbe annak a metamezőnek a kulcsát írd, amelyet a forrásmező értékéhez adni szeretnél. |
| Mezők különbsége | Az **Additional arguments** mezőbe annak a mezőnek a kulcsát írd, amelynek értékét kivonod a forrásmezőéből. |
| Mezők szorzata | Az **Additional arguments** mezőbe a második tényezőként használt metamező kulcsát írd. Ha a második mező értéke 8, az alapár nyolcszorosa jelenik meg. |
| Egyéni visszahívás | Saját PHP-függvény (lásd lent). |

## Egyéni visszahívás

Mielőtt a kódot a sablonba másolod, készíts biztonsági mentést, vagy próbáld ki egy tesztoldalon, hogy hiba esetén vissza tudd állítani a webhelyet.

1. A kiegészítő példakódját illeszd be az aktív sablon `functions.php` fájljába (például a **Megjelenés → Témafájl-szerkesztő** oldalon).
2. A `custom_callback` név helyére írd a saját visszahívásod nevét.
3. A `guests-number` helyére a mező kulcsát írd, amelyet további számtani értékként használni akarsz. A példában az eredmény a vendégek számától függ: ha 5 és 10 közötti vendég van, más a képlet, mint 10 vagy több vendégnél. Tetszőleges feltételt átírhatsz.
4. Kattints a **Fájl frissítése** gombra.

A példában ez a képletrész dolgozik 5 és 10 vendég között:

```php
elseif ( 5 <= $additional_field_value && $additional_field_value < 10 ) {
	$result = $field_value * $additional_field_value - $field_value * $additional_field_value * 0.1;
```

Ezután a sablonban a **A mező kimenetének szűrése** bekapcsolása mellett a **Calculated field** visszahívásnál a **Calculated callbacks** listában megjelenik az új visszahívás. Válaszd ki.

Az **A mező kimenetének testreszabása** beállításnál a `%s` jel elé vagy mögé szöveget írhatsz (például pénznemet).

Mentsd a sablont, és helyezd el az oldalon a **Listing Grid** widgetet a létrehozott listázással. A frontenden az ár a vendégek száma, a megadott ár és a kódba illesztett képlet alapján számolva jelenik meg.

## Példa: életkor vagy tapasztalat években

A kiegészítővel két év különbségét is kiszámíthatod, így egy felhasználó életkorát vagy szolgálati idejét űrlap és külön mező nélkül, egy **Dátum** mező értékéből jelenítheted meg. Szükséges: a Profilkészítő modul bekapcsolva és a Calculated Callback kiegészítő aktiválva.

1. **Metabox felhasználóknak:** a **JetEngine → Metaboxok** oldalon kattints az **Új hozzáadása** gombra. Add meg a címet („Felhasználói mezők”), a **Metabox ehhez** legyen **Felhasználó**, a **Láthatósági feltételek** részben a **Látható itt** értéke legyen **Felhasználó és profil szerkesztése**.
2. A **Metamezők** részben vegyél fel egy **Dátum** típusú mezőt (például „Munkaviszony kezdete”), és kapcsold be az **Mentés időbélyegként** kapcsolót. Mentsd a metaboxot.
3. A **Felhasználók → Összes felhasználó** oldalon szerkeszd a felhasználót, töltsd ki a dátumot, és kattints a **Profil frissítése** gombra.
4. A kiegészítő letöltése és aktiválása a fentiek szerint történik.
5. A **Megjelenés → Sablonszerkesztő** oldalon illeszd be a kódot az aktív sablon `functions.php` fájljának végére, majd kattints a **Fájl frissítése** gombra. A `DOB` kulcs a visszahívás neve, ezt átírhatod:

```php
add_filter( 'jet-engine-calculated-callback/config', function( $callbacks = array() ) {
	$callbacks['DOB'] = function( $field_value ) {
		$dob = getdate( $field_value );
		$today = getdate();
		$year_diff = $today['year'] - $dob['year'];
		if ( $today['mon'] > $dob['mon'] || ( $today['mon'] == $dob['mon'] && $today['mday'] >= $dob['mday'] ) ) {
			return $year_diff;
		}
		return $year_diff - 1;
	};
	return $callbacks;
} );
```

6. A **JetEngine → Listázások/komponensek** oldalon vegyél fel új elemet, a **Listázás forrása** legyen **Felhasználók**, add meg a nevet, és a megjelenítési módot válaszd **Elementor**-ra.
7. Tegyél be egy **Dynamic Field** widgetet, kapcsold be a **A mező kimenetének szűrése** kapcsolót, a visszahívás legyen **Calculated field**, a **Calculated callbacks** listában válaszd a `DOB` visszahívást.
8. Kapcsold be az **A mező kimenetének testreszabása** kapcsolót, és a **Mező formátuma** mezőbe írd be a kívánt szöveget.
9. Tedd közzé a listázást.

A kód két év különbségét számolja, ezért életkorra és tapasztalatra is használható. Ha azokat a felhasználókat szeretnéd listázni, akiknek ebben a hónapban, a mai naptól kezdve van a születésnapjuk, ahhoz SQL-lekérdezés kell, nem ez a kód.
