> For the complete documentation index, see [llms.txt](https://docs.norrnext.com/norrcompetition/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.norrnext.com/norrcompetition/customisation/events/field.md).

# Custom Field

Custom Field events are dispatched during the lifecycle of NorrCompetition custom fields in the administration backend (`com_competition.field`).

***

### `onFieldBeforeSave`

* **Event Class:** `\NorrNext\Component\Competition\Administrator\Event\Model\BeforeSaveEvent`
* **Context:** `com_competition.field`
* **Triggered In:** `FieldModel::save()` (admin)
* **Cancellable:** Yes (returning `false` aborts the save)

#### Description

Triggered inside the database transaction before the custom field record is saved. Returning `false` aborts the operation and rolls back the transaction.

```php
use NorrNext\Component\Competition\Administrator\Event\Model\BeforeSaveEvent;

public function onFieldBeforeSave(BeforeSaveEvent $event): bool
{
    $table = $event->getItem();  // Field table object
    $isNew = $event->getIsNew(); // bool

    return true;
}
```

***

### `onFieldAfterSave`

* **Event Class:** `\NorrNext\Component\Competition\Administrator\Event\Model\AfterSaveEvent`
* **Context:** `com_competition.field`
* **Triggered In:** `FieldModel::save()` (admin)

#### Description

Triggered after the custom field record is successfully saved to the database.

```php
use NorrNext\Component\Competition\Administrator\Event\Model\AfterSaveEvent;

public function onFieldAfterSave(AfterSaveEvent $event): void
{
    $table = $event->getItem();
    $isNew = $event->getIsNew();
}
```

***

### `onFieldBeforeDelete`

* **Event Class:** `\NorrNext\Component\Competition\Administrator\Event\Model\BeforeDeleteEvent`
* **Context:** `com_competition.field`
* **Triggered In:** `FieldModel::delete()` (admin)
* **Cancellable:** Yes (returning `false` aborts deletion)

#### Description

Triggered before deleting a custom field. Returning `false` cancels the deletion.

```php
use NorrNext\Component\Competition\Administrator\Event\Model\BeforeDeleteEvent;

public function onFieldBeforeDelete(BeforeDeleteEvent $event): bool
{
    $table = $event->getItem();
    return true;
}
```

***

### `onFieldAfterDelete`

* **Event Class:** `\NorrNext\Component\Competition\Administrator\Event\Model\AfterDeleteEvent`
* **Context:** `com_competition.field`
* **Triggered In:** `FieldModel::delete()` (admin)

#### Description

Triggered after the custom field is deleted from the database table.

```php
use NorrNext\Component\Competition\Administrator\Event\Model\AfterDeleteEvent;

public function onFieldAfterDelete(AfterDeleteEvent $event): void
{
    $table = $event->getItem();
}
```

***

### `onFieldChangeState`

* **Context:** `com_competition.field`
* **Triggered In:** `FieldModel::publish()` (admin)

#### Description

Fired after one or more custom fields have their published state changed.

```php
use Joomla\Event\Event;

public function onFieldChangeState(Event $event): void
{
    $context = $event->getArgument('context'); // 'com_competition.field'
    $pks     = $event->getArgument('pks', []);
    $value   = $event->getArgument('value');   // 1 = Published, 0 = Unpublished, -2 = Trashed
}
```
