Filtr cdn nefunguje při použití přes renderToString()

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Mira8
Člen | 36
+
0
-

Ahoj,
nedaří se mi zprovoznit filtr cdn v šablonce thankYouForYourPaymentTrial.latte, vykresluji ji ručně, pro odesílání emailem. Nemám tedy pro ní prosenter. Problém je, že v ní potřebuju includovat header/footer, kde se filtr používá.

Mám takovouto šablonu:

{include 'header.latte'}
	Thank you, ***

    Best Regards,
	***
</p>

{include 'footer.latte'}

Zpracovávám jí:

$message->setFrom($data['emailFrom'])
            ->addTo($data['emailTo'])
            ->setSubject('Thank you for your payment')
            ->setHtmlBody($latte->renderToString(__DIR__ . '/../presenters/templates/components/emails/thankYouForYourPaymentTrial.latte', $params));

Filtr:

class Filters
{
    public static function cdn($sPath = '')
    {
        $cdnUrl = '1683442332436.rsc.org';

        if (\Tracy\Debugger::$productionMode === false) {
            return $sPath;
        }

        if ($sPath == '') {
            return $cdnUrl;
        }

        if ($sPath[0] != '/') {
            $sPath = '/'.$sPath;
        }

        return 'https://'.$cdnUrl.$sPath;
    }
}

Filtr registruju globálně v BasePresenteru, ale dostávám chybu Filter ‚cdn‘ is not defined.

Díky za pomoc!
Míra

David Matějka
Moderator | 6445
+
0
-

jak vytvaris $latte? kde ten filtr registrujes?

Mira8
Člen | 36
+
0
-

David Matějka napsal(a):

jak vytvaris $latte? kde ten filtr registrujes?

$latte vytvářím jako $latte = new Nette\Latte\Engine;
celý kód:

public function thankYouForPayment($data) {
        $latte = new Nette\Latte\Engine;

        $params = array(
            'fullName' => $data['first_name'] . ' ' . $data['last_name'],
        );

        $message = new Nette\Mail\Message();
        $message->setFrom('$data['emailTo']')
            ->addTo($data['emailFrom'])
            ->setSubject('Thank you for your payment')
            ->setHtmlBody($latte->renderToString(__DIR__ . '/../presenters/templates/components/emails/thankYouForYourPaymentTrial.latte', $params));
        $mailer = new SendmailMailer();
        $mailer->send($message);
    }

filtr registruju v BasePresenteru takto:

protected function beforeRender()
  {
      $this->template->addFilter('cdn','Filters::cdn');
  }

ten filtr normálně funguje, jen né při tom posílání emailu..

David Matějka
Moderator | 6445
+
+1
-

Latte nevytvarej rucne, ale nech si pres DI predat factory https://api.nette.org/…Factory.html, pomoci ktere pak latte engine vytvoris

A takhle registrujes filtr pouze pro presentery, kdyz to chces mit globalne pro cele latte, tak muzes pouzit https://play.nette.org/…race-filteru

a btw, mailer taky nevytvarej rucne, ale nech si predat IMailer pres DI

h4kuna
Backer | 740
+
0
-

Je několik doplňků na maily se kterými se ti bude pracovat dobře viz.