Benutzerdefinierte Aktion
Eine Aktion hilft dabei, eine Anfrage für einen CRUD-Eintrag auszuführen. Standardmäßig wird NexoPOS mit den Aktionen „bearbeiten“ und „löschen“ ausgeliefert, die direkt auf die ausgewählte Zeile wirken. So wird gezeigt, wie Sie eine benutzerdefinierte Aktion für einen CRUD-Eintrag erstellen.
Benutzerdefinierten Filter registrieren
<?php
namespace Modules\YourModule\Providers;
use App\Classes\Hook;
use App\Services\CrudEntry;
use App\Crud\OrderCrud;
class ServiceProvider
{
public function register()
{
Hook::addFilter( OrderCrud::method( 'setActions' ), [ $this, 'customAction' ]);
}
}
Lassen Sie uns erklären, was oben passiert. Zuerst registrieren wir unseren Filter beim Service-Provider unseres Moduls. Wir haben 3 Klassen importiert (Hook, CrudEntry und OrderCrud).
In diesem Beispiel versuchen wir, einer CRUD-Eintragung in der Order-Tabelle eine neue Aktion hinzuzufügen. Anschließend fügen wir mit der Methode „addFilter“ einen Filter hinzu, der den Callback an die Methode „setActions“ der Klasse „OrderCrud“ übergibt.
Jedes Mal, wenn die Methode „setActions“ aufgerufen wird, wird der Callback „customAction“ mit als eindeutigem Parameter eine Instanz von „CrudEntry“ ausgelöst.
Fügen Sie eine Aktion zur CrudEntry-Instanz hinzu
Nun werden wir uns auf die Callback-Methode konzentrieren, denn dort werden wir unsere Aktion einfügen. Beachten Sie, dass wir jeweils mehr als eine Aktion gleichzeitig einfügen können. Hier ist, wie wir eine Aktion definieren:
<?php
namespace Modules\YourModule\Providers;
use App\Classes\Hook;
use App\Services\CrudEntry;
use App\Crud\OrderCrud;
class ServiceProvider
{
public function regiser()
{
Hook::addFilter( OrderCrud::method( 'setActions' ), [ $this, 'customAction' ]);
}
public function customAction( CrudEntry $crudEntry )
{
$crudEntry->action(
label: 'Email to Customer',
identifier: 'email',
type: 'GET',
url: url( '/api/your/slug/' . $crudEntry->id )
);
return $entry;
}
}
Beachten Sie, dass unsere Aktion hier die Kennung „email“ und die Bezeichnung „E-Mail an den Kunden“ (für den Benutzer sichtbar) hat. Wenn darauf geklickt wird, wird eine GET-Anfrage (asynchron) an die in dem Parameter „url“ angegebene URL ausgeführt.
Falls Sie möchten, dass der Benutzer seine Aktion bestätigt, können Sie dem Array einen neuen Eintrag mit dem Namen „confirm“ hinzufügen, so wie hier:
<?php
namespace Modules\YourModule\Providers;
use App\Classes\Hook;
use App\Services\CrudEntry;
use App\Crud\OrderCrud;
class ServiceProvider
{
public function regiser()
{
Hook::addFilter( OrderCrud::method( 'setActions' ), [ $this, 'customAction' ]);
}
public function customAction( CrudEntry $crudEntry )
{
$crudEntry->action(
label: 'Email to Customer',
type: 'GET',
url: url( '/api/your/slug/' . $crudEntry->id ),
confirm: [
'message' => 'Would you like to send this as an email?'
]
);
return $entry;
}
}
Für asynchrone Anfragen werden nur „GET“ und „DELETE“ unterstützt. Wenn der Nutzer nach dem Klicken auf die Aktion auf eine andere Seite gelangen soll, verwenden Sie stattdessen den Typ „GOTO“ anstelle von „GET“, so wie hier:
<?php
namespace Modules\YourModule\Providers;
use App\Classes\Hook;
use App\Services\CrudEntry;
use App\Crud\OrderCrud;
class ServiceProvider
{
public function regiser()
{
Hook::addFilter( OrderCrud::method( 'setActions' ), [ $this, 'customAction' ]);
}
public function customAction( CrudEntry $crudEntry )
{
$crudEntry->action(
lable: 'Email to customer',
type: 'GOTO',
url: url( '/api/your/slug/' . $crudEntry->id ),
confirm: [
'message' => 'Would you like to send this as an email?'
]
);
return $entry;
}
}
Durch Klicken auf eine Aktion wird der Nutzer zur Seite weitergeleitet, die im Schlüssel „url“ angegeben ist.
Durchführen asynchroner Anfragen
Standardmäßig führen GET- und DELETE-Anfragen eine asynchrone Anfrage aus. Eine der Anforderungen besteht jedoch darin, eine Bestätigungsmeldung hinzuzufügen. Dadurch wird verhindert, dass der Endbenutzer aus Versehen eine Aktion auslöst.
<?php
namespace Modules\YourModule\Providers;
use App\Classes\Hook;
use App\Services\CrudEntry;
use App\Crud\OrderCrud;
class ServiceProvider
{
public function regiser()
{
Hook::addFilter( OrderCrud::method( 'setActions' ), [ $this, 'customAction' ]);
}
public function customAction( CrudEntry $crudEntry )
{
$crudEntry->action(
label: 'Refresh Product',
type: 'GET',
url: url( '/api/your/slug/' . $crudEntry->id ),
confirm: [
'message' => 'Would you like to refresh the products ?'
]
);
return $entry;
}
}