Extended flashes js sweetalert
- mimacala
- Člen | 113
Ahojte,
má někdo podobné řešení ? -
https://github.com/…endedFlashes
Bohužel jeho rozšíření podporuje pouze php 7.1 což je již
zastaralé.
Mohl by mě někdo prosím navést jak zaměnit klasícké flash za sweetalert
?
Děkuji
- Marek Bartoš
- Nette Blogger | 1280
Stejně jako píše autor balíku. Řešil jen jak předat do flash message
objekt a to už teď jde.
Takže jen upravíš výpis v šabloně podle toho co je v $flashes, jinak
můžeš použít jeho návod.
Btw, podporuje 7.1–7.4., viz https://getcomposer.org/…/versions.md#…-
Editoval Marek Bartoš (21. 7. 2022 21:58)
- Lumeriol
- Generous Backer | 64
mimacala napsal(a):
Prosím, zkus více laicky na mě :),
v dokumentaci nette naleznu upravu flashes ?
Děkuji
Chtěl tím říci, že dříve jsi do Flash message mohl přidat jen string a typ zprávy, ale dnes už tam můžeš předat celý objekt.
Takže zatímco původně bylo možné mít jen něco ve stylu
$this->flashMessage('Chyba: ' . $throwable->getMessage(), 'error');
a tudíž jsi musel použít doplněk, pokud sis to chtěl rozšířit, tak dnes už můžeš vytvořit
$data = new \stdClass();
$data->error = $throwable->getMessage();
$data->prefixText = 'Chyba:';
$data->type = 'error';
...
$data->xyz = 'abc';
$this->flashMessage($data);
A ve výpisu flash zpráviček jen kontrolovat, zda je is_string($flash->message) a vypsat si jí postaru, a nebo už si zpracuješ objekt podle svých představ. Jen je třeba pamatovat na to, že v případě předání objektu se ignoruje původní $type.
- mimacala
- Člen | 113
Aha, takže to vlastně mohu použít nějak takhle ?
$msg = echo("<script>Swal.fire(
'Good job!',
'You clicked the button!',
'success'
)</script>");
$data = new \stdClass();
$data->error = $msg;
$data->prefixText = 'Chyba:';
$data->type = 'error';
...
$data->xyz = 'abc';
$this->flashMessage($data);
Děkuji
- Domm
- Člen | 4
mimacala napsal(a):
Aha, takže to vlastně mohu použít nějak takhle ?
$msg = echo("<script>Swal.fire( 'Good job!', 'You clicked the button!', 'success' )</script>"); $data = new \stdClass(); $data->error = $msg; $data->prefixText = 'Chyba:'; $data->type = 'error'; ... $data->xyz = 'abc'; $this->flashMessage($data);
Děkuji
Jako teoreticky můžeš, jen by jsi neměl kombinovat backend s frontendem.
Někde v lattečkách budeš mít určitě nějaký foreach na vypsání flashmessages, tzn. kód se scriptem jednoduše přidej tam.
Bude to pak v latte vypadat asi nějak takto:
{snippet flashes}
{foreach $flashes as $flash}
<script>
Swal.fire({
{$flash->prefixText},
{$flash->message},
{$flash->type}
});
</script>
{/foreach}
{/snippet}
- Jan Tvrdík
- Nette guru | 2595
Nebo jde taky napsat
<script>
for (const flash of {$flashes}) {
Swal.fire(flash.prefixText, flash.message, flash.type)
}
</script>
EDIT: Nebo víc flexibilní
// v presenteru
$this->flashMessage((object) [
'icon' => 'error',
'title' => 'Oops...',
'text' => 'Something went wrong!',
'footer' => '<a href="">Why do I have this issue?</a>',
]);
<script>
for (const flash of {$flashes}) {
Swal.fire(flash)
}
</script>
Editoval Jan Tvrdík (25. 7. 2022 17:37)