Nette 2.1 + Texy zprovoznění

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

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

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}
enumag
Člen | 2118
+
0
-

V případě texy bych výstupy raději cachoval.

MartinitCZ
Člen | 580
+
0
-

enumag napsal(a):

V případě texy bych výstupy raději cachoval.

Napsal bys prosím, jak na to?

motorcb
Člen | 552
+
0
-

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

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

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

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

@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>