Nette 2.1 + Texy zprovoznění
- motorcb
- Člen | 552
Zdravím,
chtěl bych zprovoznit Nette 2.1 + texy:
composer:
"require": {
"php": ">= 5.3.0",
"nette/nette": "@dev",
"dg/texy": "dev-master"
},
composer mi stáhne texy(do slozky vendor), to je OK.
Ale jak mám nyní texy používat v Nette? Existuje nějaký helper, který mi převede uložený text v DB (který je napsaný v Texy) do HTML?
Díky za rady
- Badaboom
- Člen | 33
Vytvoř si vlastní helper.
Texy si zaregistruj jako službu, předej do presenteru a přepiš metodu createTemplate (asi nejlépe v některém BasePresenteru)
protected function createTemplate($class = NULL)
{
$template = parent::createTemplate($class);
$template->registerHelper('texy', callback($this->texy, 'process'));
return $template;
}
V latte pak
{$texyContent|texy}
- MartinitCZ
- Člen | 580
enumag napsal(a):
V případě texy bych výstupy raději cachoval.
Napsal bys prosím, jak na to?
- motorcb
- Člen | 552
@Badaboom: díky, super nakopnutí :-)
jen:
{$texyContent|texy}
mi vygeneruje kod:
<p>TODO</p> <ul> <li>test1</li> <li>test2</li> <li>test3</li> <li>test4</li> </ul> <!-- by Texy2! -->
ale nenaformatuje ho do HTML. Proč všude je za textem to <!-- by Texy2! -->? Jde to vypnout?
{!$texyContent|texy}
mi text naformátuje, ovšem je to bezpečné?
- David Matějka
- Moderator | 6445
@motorcb: nejlepsi je pouzivat pro html obsah
Nette\Utils\Html::el()->setHtml('<strong>foo</strong>');
takze si udelej nejakej wrapper okolo texy, ktery bude vracet ten Html + se bude starat o cachovani
- Badaboom
- Člen | 33
Na vykřičník jsem zapomněl :)
Bezpečné to je, pokud správně nastavíš Texy. Texy v defaultním nastavení umožňuje vypnout escapování. To nemusí být problém, pokud k inputu nemá přístup útočník (administrace). Na místech ke kterým přístup má (např. komentáře) je dobré použít safe mode.
Editoval Badaboom (9. 9. 2013 12:17)
- NiNu
- Člen | 31
Zdravím,
vďaka tomuto ale aj iným vláknám sa mi podarilo v pohode a na prvýkrát
rozbehať texy na Nette 2.0.12 nasledovne:
Stiahol som Texy zo domovskej stránky, rozbalil a src/Texy adresár som si
nakopíroval do app/components.
Následne na to som v config.neon zaregistroval službu:
services:
texy: Texy
A do BasePresenteru som injectol službu a prepísal createTemplate:
public $texy;
public function injectTexy(\Texy $texy) {
$this->texy = $texy;
}
protected function createTemplate($class = NULL) {
$template = parent::createTemplate($class);
$template->registerHelper('texy', callback($this->texy, 'process'));
return $template;
}
Následne stačí v šablóne použiť už len filter napr. :
<p>{!$singleNews->body|texy}</p>
Toto funguje, ale chcel by som sa spýtať na ďalšiu konfiguráciu Texy,
ako sa vykonáva a kam sa zapisuje. Pozeral som dokumentáciu Texy a tam sa
robí konfigurácia pri vytvorení nového objektu Texy, avšak ja som len
zaregistroval filter.
Konkrétne by som chcel napr. zakázať h1, alebo by ma zaujímalo ako zapnúť
len na niektorých stránkach napr. FrontModule safeMode.
Ďakujem za odpovede.
- buffus
- Člen | 101
@Ninu: Ohledně úrovně nejvyššího titulku funguje toto:
HomepagePresenter.php
class HomepagePresenter extends BasePresenter
{
public function renderDefault()
{
require_once dirname(__DIR__). '/../libs/Texy/texy.php';
$texy = new Texy();
$text = file_get_contents(__DIR__ . '/../templates/Homepage/homepage.texy');
$texy->headingModule->top = 2; // set headings top limit
$this->template->homepage_texy = $texy->process($text); // Texy to html
}
}
homepage.texy
Hlavní titulek
**************
Podtitulek
==========
default.latte
{block content}
{!$homepage_texy}
Html výstup:
<h2>Hlavní titulek</h2>
<h3>Podtitulek</h3>