CheckboxList vypisu v emailu pouze „Array“

Jan Kadlec
Člen | 4
+
0
-

Dobry den,
omlouvam se, ale nemohu prijit kde delam chybu. Pri odeslani formulare prijde pouze „Array“ misto vypisu co clovek vybral pomoci Checkboxu.

Tady je samotny presenter:

<?php
use Nette\Application\UI;
use Nette\Mail\Message;
use Nette\Environment;
use Nette\Mail\SendmailMailer;

class ColorsPresenter extends BasePresenter
{

	public function renderDefault()
	{

	}
	protected function createComponentColorsForm()
    {
      $form = new UI\Form;

      $colors = array(
      	'r' => 'red',
      	'g' => 'green',
      	'b' => 'blue'
      );
      $form->addCheckboxList('colors', '', $colors);

      $form->addText('name')
      ->getControlPrototype()->setClass('form-control');

      $form->addText('email')
      ->addRule(UI\Form::FILLED, 'Vyplňte prosím svůj e-mail.')
      ->addRule(UI\Form::EMAIL, 'Vyplňte prosím email ve správném tvaru.')
      ->getControlPrototype()->setClass('form-control');

      $form->addText('phone')
      ->getControlPrototype()->setClass('form-control');

      $form->addTextArea('note')
      ->setAttribute('rows', 6)
      ->getControlPrototype()->setClass('form-control');

      $form->addSubmit('submit', 'Odeslat')
      ->getControlPrototype()->setClass('btn')
      ->onClick = "javascript: if (typeof dataLayer === 'object') { dataLayer.push({event:'formColors',action:'submit'});}";

      $form->onSuccess[] = callback($this, 'ColorsFormSubmitted');
      return $form;
    }

    public function ColorsFormSubmitted(UI\Form $form)
    {
  		$values = $form->getValues();

  		$template = $this->createTemplate();
  		$template->setFile(__DIR__ . '/../templates/Emails/colors.latte');

  		$template->name = $values['name'];
  		$template->email = $values['email'];
  		$template->phone = $values['phone'];
  		$template->note = $values['note'];
  		$template->colors = $values['colors'];

  		$mail = new Message;
        foreach (Environment::getConfig()->formTo as $email) {
            $mail->addTo($email);
        }
        foreach (Environment::getConfig()->formBcc as $email) {
            $mail->addBcc($email);
        }
  		$mail->setFrom(Environment::getConfig()->formFrom)
  			->setSubject('form: Colors')
  			->setHtmlBody($template);

  		$mailer = new SendmailMailer;
  		$mailer->send($mail);

      $this->flashMessage('Děkujeme za odeslání formuláře.');
      $this->redirect('default');
    }
}
?>

A tady je vypis prijateho formulare:

------------------------------------------------------
Jméno a příjmení: Jan Novak
E-mail: test@seznam.cz
Telefon: +420123456789
Váš dotaz:
test1
Colors:
Array
------------------------------------------------------

Editoval Jan Kadlec (20. 2. 2023 1:01)

Marek Bartoš
Nette Blogger | 1172
+
+1
-

Jak vypadá šablona? Na vypsání pole ti nestačí prosté {$colors}, musíš použít foreach a hodnoty si vypsat sám

Btw, používej prosím formátování kódu https://forum.nette.org/…v-tomto-foru#…

Editoval Marek Bartoš (19. 2. 2023 22:28)

Jan Kadlec
Člen | 4
+
0
-

omlouvam se, upravil jsem puvodni prispevek/presenter do PHP zobrazeni.

Jinak, sablona pro vypis formulare vypisuje bez problemu:

{form colorsForm}
	{input name}
	{input email}
	{input phone}
	{input note}
	{input colors}
	{input submit}
{/form}

a tak vypada sablona emailu:

{layout '@layout.latte'}

{block content}
<p>------------------------------------------------------</p>

<p><strong>Jméno a příjmení:</strong> {$name}<br />
<strong>E-mail:</strong> {$email}<br />
<strong>Telefon:</strong> {$phone}<br />
<strong>Váš dotaz:</strong><br />{$note}<br />
<strong>Colors:</strong><br />{$colors}</p>

<p>------------------------------------------------------</p>
{/block}

Editoval Jan Kadlec (20. 2. 2023 12:37)

MajklNajt
Člen | 471
+
+2
-

@JanKadlec predsa ti Marek napísal jasné riešenie „Na vypsání pole ti nestačí prosté {$colors}, musíš použít foreach a hodnoty si vypsat sám“

Jan Kadlec
Člen | 4
+
0
-

Dobry den, dekuji za napovedu, problem je, ze jsem uplne zacatecnik, takze nevim jak mam propsat hodnoty do „foreach“, mohu vas poprosit o priklad? bude stacit pouze jedna hodnota a ostatni jiz doplnim.

Marek Bartoš
Nette Blogger | 1172
+
+2
-

Je to prakticky totéž co php foreach https://latte.nette.org/cs/tags#…

{* vypíše proměnnou do Tracy baru, abys viděl, jakou přesně má $colors strukturu, můj example předpokládá array<string> *}
{dump $colors}

{foreach $colors as $color}
	{$color}
{/foreach}

Btw, do .latte souborů <?php nepatří.
Pro zvýraznění tady na fóru code block nadepiš pomocí koncovky souboru (latte místo php) a zvýrazní se ti správně :)

Jan Kadlec
Člen | 4
+
0
-

Dobry den Marku, moooc vam dekuji, vse funguje na jednicku :-) jeste jednou velky diiikkk :-))))

GEpic
Člen | 562
+
0
-

@MarekBartoš použil bych:

{=implode(', ', $colors}