# Műveletek és függvények

> A képletekben használható műveletek, logikai operátorok, függvények, konstansok és címkék teljes listája példákkal.

A képletek a termékoldalon, a vásárló böngészőjében értékelődnek ki. Futás közben a `{címke}` jelölések az aktuális értékekre cserélődnek. A felsorolt elemeket a képletszerkesztő gombjaiból is beillesztheted.

## Aritmetikai műveletek

| Jel | Jelentés | Példa |
| --- | --- | --- |
| `+` | Összeadás | `{product_price} + 5` |
| `-` | Kivonás | `{product_price} - {field_1}` |
| `*` | Szorzás | `{field_1} * {field_2}` |
| `/` | Osztás | `{field_1} / {quantity}` |
| `%` | Maradék (modulo) | `7 % 3` = 1 |
| `^` | Hatványozás | `2 ^ 3` = 8 |
| `( )` | Zárójel: a benne lévő rész számolódik előbb | `({field_1} + {field_2}) * {field_3}` |

## Címkék

| Címke | Mit ad vissza |
| --- | --- |
| `{quantity}` | A termékhez megadott mennyiség. |
| `{product_price}` | A termék alapára. |
| `{product_weight}`, `{product_length}`, `{product_width}`, `{product_height}` | A termék **Szállítás** fülén megadott súly és méretek. |
| `{variable_1}`, `{variable_2}`, `{variable_3}` | A bővítmény beállításaiban megadott globális változók. |
| `{look_up_table}` | A mező keresési táblázata. Ez legyen a teljes képlet, mással nem kombinálható. Az Advanced Calculations kiegészítő kell hozzá. |

### Más mezőkre hivatkozás

| Címke | Mit ad vissza |
| --- | --- |
| `{field_1234}` | Az 1234-es azonosítójú mező értéke. |
| `{field_1234_field_price}` | Ugyanennek a mezőnek az ára. |
| `{field_1234_option_price}` | A kiválasztott opció ára (kiválasztás, rádiógomb, jelölőnégyzet-csoport, képminta, termékek mező). |
| `{field_1234_option_label}` | A kiválasztott opció **Érték** beállítása. A régebbi `{field_1234_option_value}` is működik. |
| `{field_1234_weight}`, `{field_1234_length}`, `{field_1234_width}`, `{field_1234_height}`, `{field_1234_quantity}` | A kiválasztott altermék adatai (csak **Termékek** és **Termékkategóriák** mezőnél). |
| `{field_1234_number_uploads}`, `{field_1234_pdf_count}` | A feltöltött fájlok száma, illetve a PDF oldalszáma (csak **Feltöltés** mezőnél). |

### Más bővítmények címkéi

A címkék csak akkor jelennek meg, ha a hozzájuk tartozó bővítmény aktív: `{calculated_booking_cost}`, `{num_units_int}` és `{num_bookings}` (Bookings for WooCommerce), `{total_variations}` (WooCommerce Bulk Variations). Részletek: [Attribútumok, ACF és más bővítmények](https://hub.hellowp.io/hu/plugins/product-extras-for-woocommerce/szamitasok-attributumok-acf-integraciok/).

## Logikai operátorok

| Operátor | Jelentés |
| --- | --- |
| `feltétel ? a : b` | Ha a feltétel igaz, az eredmény `a`, különben `b`. Egymásba ágyazva több ágú feltételt kapsz. |
| `and` | Akkor igaz, ha mindkét oldala igaz. |
| `or` | Akkor igaz, ha legalább az egyik oldala igaz. |
| `not` | Megfordítja az igaz/hamis értéket. |
| `==`, `!=` | Egyenlő, nem egyenlő. |
| `<`, `<=`, `>`, `>=` | Kisebb, kisebb vagy egyenlő, nagyobb, nagyobb vagy egyenlő. |

Példák:

```text
{quantity} >= 50 ? 0 : 25
{quantity} >= 100 ? {product_price} * 0.8 : ({quantity} >= 50 ? {product_price} * 0.9 : {product_price})
{field_1} > 2 or {field_2} > 2 ? 30 : 0
{field_1} > 2 and {field_2} > 2 ? 30 : 0
not ({quantity} >= 10) ? 5 : 0
```

Egy logikai kifejezés igaz/hamis értéket ad, nem számot. Ha a teljes képlet ilyen, a mező hibát jelez. Ilyenkor tedd feltételes kifejezésbe:

```text
{field_1} > 10 and {field_2} > 10 ? 1 : 0
```

## Kerekítő függvények

| Függvény | Mit csinál |
| --- | --- |
| `round(x)` | A legközelebbi egész számra kerekít. |
| `round(x, n)` | `n` tizedesjegyre kerekít. |
| `ceil(x)` | Felfelé kerekít. |
| `floor(x)` | Lefelé kerekít. |
| `fix(x)` | Levágja a tizedesjegyeket (a nulla felé kerekít). |
| `abs(x)` | Abszolút érték. |
| `sign(x)` | -1, 0 vagy 1 az előjel szerint. |

```text
ceil({field_1}) * 12
ceil({quantity} / 24)
({quantity} - floor({quantity} / 10)) * {product_price}
round({field_1} * {field_2} * 0.85, 2)
```

A második példa csomagolási egységeket számol: 24 darabonként egy csomag. A harmadik minden tizedik darabot ingyenessé teszi.

## Hatvány, gyök és logaritmus

| Függvény | Mit csinál |
| --- | --- |
| `sqrt(x)` | Négyzetgyök. |
| `cbrt(x)` | Köbgyök. |
| `pow(x, y)` | `x` az `y`-adikon, például `pow(2,3)` = 8. |
| `nthRoot(x, n)` | `n`-edik gyök, például `nthRoot(8,3)` = 2. |
| `exp(x)` | `e` az `x`-edik hatványon. |
| `log(x)` | Természetes logaritmus. |
| `log(x, alap)` | Logaritmus a megadott alappal. |
| `log10(x)` | Tízes alapú logaritmus. |
| `log2(x)` | Kettes alapú logaritmus. |

```text
pow({field_1}, 2) * 0.05
sqrt(pow({field_1}, 2) + pow({field_2}, 2))
cbrt({field_1})
50 + log({quantity}) * 20
```

## Minimum, maximum és statisztika

| Függvény | Mit csinál |
| --- | --- |
| `min(a, b, …)` | A legkisebb érték. |
| `max(a, b, …)` | A legnagyobb érték. |
| `mean(a, b, …)` | Átlag. |
| `median(a, b, …)` | Medián (középső érték). |
| `sum(a, b, …)` | Összeg. |
| `std(a, b, …)` | Szórás. |
| `variance(a, b, …)` | Variancia. |

```text
max({field_1} * 0.5, 10)
min({field_1} * 2, 100)
max({field_1}, {field_2}, {field_3}) * 0.2
sum({field_1}, {field_2}, {field_3}) * {product_price}
mean({field_1}, {field_2}, {field_3})
```

A `max({field_1} * 0.5, 10)` például legalább 10 egységnyi díjat ad (minimális díj).

## Kombinatorika

| Függvény | Mit csinál |
| --- | --- |
| `factorial(x)` vagy `x!` | Faktoriális, például `4!` = 24. |
| `combinations(n, k)` | Hányféleképpen választható ki `k` elem `n` közül, sorrend nélkül. |
| `permutations(n, k)` | Ugyanez, a sorrend számít. |

```text
combinations({field_1}, 2) * 15
permutations({field_1}, 2) * 15
```

## Konstansok

| Név | Érték |
| --- | --- |
| `pi` | 3,14159… |
| `e` | 2,71828… |

```text
pi * pow({field_1} / 2, 2) * 0.08
pi * {field_1} * 0.5
```

Az első példa egy kör alakú termék területéből számol árat, ahol a mező az átmérő.

## Szabályok röviden

- A zárójeleknek párban kell lenniük.
- Csak logikai kifejezésből álló képlet nem adhat számot, ezért tedd `? 1 : 0` alakú feltételbe.
- A `{look_up_table}` egyedül álljon a képletben.
- A szerkesztő gombjait használva kevesebb a gépelési hiba.
