# Fejlesztőknek: a szerkesztő bővítése

> Egyéni vezérlők hozzáadása a mezőkhöz és a mezőcsoportokhoz, a feldolgozott beállítások módosítása.

Ez a fejezet fejlesztőknek szól. Ha saját megoldást írsz a Meta Boxhoz, szükséged lehet arra, hogy a mezőkhöz saját beállítást adj. Az MB Builder ehhez kampókat (hookokat) kínál, amelyekkel saját vezérlőket helyezhetsz a szerkesztőbe.

## Vezérlők hozzáadása a mezőkhöz

A mezők beállításaihoz az `mbb_field_controls` szűrővel adsz vezérlőt:

```php
add_filter( 'mbb_field_controls', 'your_prefix_add_field_controls', 10, 2 );

function your_prefix_add_field_controls( $controls, $type ) {
    $controls[] = \MBB\Control::Checkbox( 'custom_layout', __( 'Custom layout', 'your-text-domain' ) );

    $controls[] = \MBB\Control::Select(
        'layout',
        [
            'label'      => __( 'Layout', 'your-text-domain' ),
            'tooltip'    => __( 'Select the layout for the field', 'your-text-domain' ),
            'options'    => [
                'one-third'  => __( 'One-third', 'your-text-domain' ),
                'one-half'   => __( 'One-half', 'your-text-domain' ),
                'two-third'  => __( 'Two-third', 'your-text-domain' ),
                'full-width' => __( 'Full-width', 'your-text-domain' ),
            ],
            'dependency' => 'custom_layout:true',
        ],
        'one-half',
        'general'
    );

    return $controls;
}
```

A szűrő két paramétert kap:

- `$controls`: a vezérlők tömbje.
- `$type`: a mező típusa. Akkor hasznos, ha a vezérlőt csak bizonyos mezőtípusokhoz akarod hozzáadni.

Minden vezérlőnek típusa van (a fenti példában `\MBB\Control::Select`, egy legördülő lista), és a következő paramétereket fogadja, ebben a sorrendben:

1. A beállítás neve.
2. A vezérlő tulajdonságai (tömb):
   - `label`: a vezérlő felirata.
   - `tooltip`: a súgóbuborék szövege, ha el akarod magyarázni, mire való a vezérlő.
   - `options`: a legördülő lista opciói `'érték' => 'felirat'` formában.
   - `dependency`: ha a vezérlőt csak akkor akarod megmutatni, amikor egy másik vezérlő adott értéket vesz fel. Formátuma `{másik_vezérlő_beállítása}:{érték}`. Nem kötelező.
3. Alapérték. Nem kötelező.
4. A beállítások füle: `general` (alapértelmezett) vagy `advanced`. Nem kötelező.

Ha a vezérlőnek csak felirata van, a második paraméter lehet egyszerű szöveg is (mint a fenti példa jelölőnégyzeténél).

### Támogatott vezérlőtípusok

| Név | Leírás |
|---|---|
| `MBB\Control::Checkbox` | Jelölőnégyzet. |
| `MBB\Control::Input` | Szövegbeviteli mező. A `'type' => 'number'` tulajdonsággal csak számot fogad. |
| `MBB\Control::Select` | Legördülő lista, egy érték választható. Az `options` tulajdonságot be kell állítani. |
| `MBB\Control::ReactSelect` | Legördülő lista, több érték is választható. Az `options` tulajdonság kell hozzá, az alapértéknek tömbnek kell lennie. |
| `MBB\Control::Textarea` | Többsoros szövegmező. |

## Vezérlők hozzáadása a mezőcsoportokhoz

A mezőcsoport beállításaihoz hasonlóan adhatsz vezérlőt az `mbb_settings_controls` szűrővel. A példa az MB Tabs kiegészítő beállításait mutatja:

```php
add_filter( 'mbb_settings_controls', 'your_prefix_add_settings_controls' );

function your_prefix_add_settings_controls( $controls ) {
    $controls[] = \MBB\Control::Select( 'tab_style', [
        'label'   => __( 'Tab style', 'meta-box-builder' ),
        'tooltip' => __( 'Change how look and feel of tabs in MB Tabs', 'meta-box-builder' ),
        'options' => [
            'default' => __( 'Default', 'meta-box-builder' ),
            'box'     => __( 'Box', 'meta-box-builder' ),
            'left'    => __( 'Left', 'meta-box-builder' ),
        ],
    ] );

    $controls[] = \MBB\Control::Input( 'tab_default_active', __( 'Default active tab ID', 'meta-box-builder' ) );

    return $controls;
}
```

A szűrő egyetlen paramétert kap, a vezérlők tömbjét. A vezérlőket ugyanúgy írod le, mint a mezőknél.

## A feldolgozott beállítások módosítása

A legtöbb esetben az új vezérlő vagy az új mezőtípus beállításai helyesen mentődnek. A mentett beállításokat a bővítmény PHP-tömbbé dolgozza fel, ezt használja a Meta Box és a kiegészítők, és a PHP-kód készítésénél is ez a feldolgozott eredmény kerül a kódba.

Ha a vezérlőben megadott érték helyett egyedi értéket szeretnél a mezőhöz, ezeket a szűrőket használhatod:

```php
$field_settings       = apply_filters( 'mbb_field_settings', $field_settings );
$field_settings       = apply_filters( "mbb_field_settings_{$field_type}", $field_settings );
$field_group_settings = apply_filters( 'mbb_meta_box_settings', $field_group_settings );
```

Például két vezérlőt hoztál létre a mezőkhöz: a `custom_layout` (jelölőnégyzet) és a `layout` (legördülő lista) vezérlőt. A feldolgozáskor nem akarod, hogy a `custom_layout` értéke `true` legyen, ha a `layout`-nak van értéke, mert ez felesleges. Ezt így érheted el:

```php
add_filter( 'mbb_field_settings', 'your_prefix_parse_field_settings' );

function your_prefix_parse_field_settings( $field_settings ) {
    if ( ! empty( $field_settings['layout'] ) ) {
        unset( $field_settings['custom_layout'] );
    }

    return $field_settings;
}
```
