Extended flashes js sweetalert

mimacala
Člen | 113
+
0
-

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 | 1146
+
0
-

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)

mimacala
Člen | 113
+
0
-

Prosím, zkus více laicky na mě :),
v dokumentaci nette naleznu upravu flashes ?
Děkuji

Lumeriol
Generous Backer | 56
+
+4
-

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
+
-1
-

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
+
+5
-

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
+
+5
-

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)

mimacala
Člen | 113
+
0
-

Aha
toto

<script>
  for (const flash of {$flashes}) {
    Swal.fire(flash.prefixText, flash.message, flash.type)
  }
</script>

mi vyřešilo problém, všem moc děkuji za skvělou pomoc.
Mám se teď tedy co učit :)