Ochrana emailu {helper} – prebrana funkce ze Smarty
- Felix
- Nette Core | 1247
Zdravim!
Jestli nekdo pouzivate krom latte i Smarty, tak Smarty disponuje funkci pro ochranu emailu .
Pouziti:
{mailto address="me@example.com" encode="javascript"}
<script type="text/javascript" language="javascript">
eval(unescape('%64%6f% ... snipped ...%61%3e%27%29%3b'))
</script>
Trochu jsem upravil tuto funkci a implementoval ji jako helper pro latte. Treba se to nekomu bude hodit.
Pouziti:
Presenter:
public function beforeRender(){
$this->template->registerHelper('email', 'SmartyMailto::helper');
}
Latte:
{var $mail = "my@email.net"}
{!$mail|email:"javascript"}
{!$mail|email:"javascript_charcode"}
{!$mail|email:"hex"}
{!$mail|email:"javascript":"link to my email here"}
Git: Smarty:Mailto
Editoval Felix (18. 1. 2012 15:12)
- Patrik Votoček
- Člen | 2221
Nelíbí se mě závislost na JavaScriptu.
Raději bych šel Texy! cestou.
$template->registerHelper('email', function($s) {
return str_replace('@', '<!-- ANTISPAM -->@<!-- ANTISPAM -->', $s);
});
{var $mail = "test@example.com"}
{!$mail|email}
- Lawondyss
- Člen | 106
Patrik Votoček napsal(a):
Nelíbí se mě závislost na JavaScriptu.
Raději bych šel Texy! cestou.
$template->registerHelper('email', function($s) { return str_replace('@', '<!-- ANTISPAM -->@<!-- ANTISPAM -->', $s); });
{var $mail = "test@example.com"} {!$mail|email}
Dobrý nápad, ale neřeší to výpis do odkazu za mailto:
.
- Felix
- Nette Core | 1247
Lawondyss napsal(a):
Patrik Votoček napsal(a):
Nelíbí se mě závislost na JavaScriptu.
Raději bych šel Texy! cestou.
$template->registerHelper('email', function($s) { return str_replace('@', '<!-- ANTISPAM -->@<!-- ANTISPAM -->', $s); });
{var $mail = "test@example.com"} {!$mail|email}
Dobrý nápad, ale neřeší to výpis do odkazu za
mailto:
.
Uz jsem to implementoval. Staci mrknout na muj git.
- Felix
- Nette Core | 1247
motorcb napsal(a):
Jak zprovozním ten příklad z Gittu?
Stáhnu soubor SmartyMailto.php – kam ho uložím?
Vlozit to staci treba do slozky libs/
a pote zaregistrovat jako
helper v presenteru.
public function beforeRender(){
$this->template->registerHelper('email', 'SmartyMailto::helper');
}
- Vojtěch Dobeš
- Gold Partner | 1316
motorcb V jaké šabloně ten helper používáš, když ti to chybu vyhazuje?
- motorcb
- Člen | 552
I když dám do HomepagePresenter.php:
public function beforeRender(){
$this->template->registerHelper('email', 'SmartyMailto::helper');
}
a v templates/default.latte nechám vypsat:
{var $mail = "my@email.net"}
{!$mail|email:"javascript"}
{!$mail|email:"javascript_charcode"}
{!$mail|email:"hex"}
{!$mail|email:"javascript":"link to my email here"}
Skončí to chybou:
Nette\InvalidStateException
Callback ‚SmartyMailto::helper‘ is not callable.
- Vojtěch Dobeš
- Gold Partner | 1316
To jsem si myslel. Používáš to v komponentě, ta si tvoří jinou
instanci šablony, která beforeRender
vůbec neprojde (tato metoda
ji nemůže ovlivnit). Tzn. si tu registraci zkopíruj do svojí komponenty, a
to konkrétně do:
protected function createTemplate($class = NULL)
{
$template = parent::createTemplate($class);
// zde
return $template;
}
To s tím smarty not callable je taky zajímavý, ale asi neposloužím.
- motorcb
- Člen | 552
vojtech.dobes:
Používám Nette 2 a v komponentě mám toto:
use Nette\Application\UI,
Nette\Database\Table\Selection;
class TaskList extends UI\Control
{
/** @var \Nette\Database\Table\Selection */
private $tasks;
public function __construct(Selection $tasks)
{
parent::__construct(); // vždy je potřeba volat rodičovský konstruktor
$this->tasks = $tasks;
}
public function render()
{
$this->template->setFile(__DIR__ . '/TaskList.latte');
$this->template->tasks = $this->tasks;
$this->template->render();
}
}
Kam to tam umístím?
- Vojtěch Dobeš
- Gold Partner | 1316
Kdekoliv jako další metodu. Anebo se nemusíš patlat (ale je to takové
hezčí) s createTemplate
, a můžeš tu registraci helperu hodit
rovnou do render
metody.
- motorcb
- Člen | 552
vojtech.dobes:
public function render()
{
$this->template->setFile(__DIR__ . '/TaskList.latte');
$this->template->tasks = $this->tasks;
$this->template->registerHelper('email', 'SmartyMailto::helper');
$this->template->render();
}
Hlásí chybu:
Nette\InvalidStateException
Callback 'SmartyMailto::helper' is not callable.
- Vojtěch Dobeš
- Gold Partner | 1316
To s tím smarty not callable je taky zajímavý, ale asi neposloužím.