Zprovoznění filtru texyElements

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

Zdravíčko, chci se zeptat, jestli je už dokončen filtr texyElements a dá se normálně používat ( viz příspěvek ).

U filtru curlyBrackets funguje konstrukce {block texy} ... {/block} normálně, pokud v presenteru předám šabloně Texy:

// $this je např. BasePresenter a jsme  metodě třeba beforeRender()
$this->template->texy = new Texy();

což je logické žejo, ale u filtru texyElements vidím jako problém to, že netuším jak předat třídě TemplateFilters ( nebo statickému registru TemplateFilters:: ) proměnnou s inicializovaným Texy tak, aby to pak při vykonávání metody texyCb() nezařvalo při vykonávání převodu

return self::$texy->process($m[2]);

// toto z prispevku vyse neni zase syntaxycky spravne
return new Texy()->process($m[2]);

Call to a member function process() on a non-object in ...

Zkoušel jsem i z repozitáře /tests/Templates/test.texyElements.php ale taky nic co by mě dovedlo k výsledku.

Zatím jsem si konec metody texyCb() upravil, aby to neřvalo

$texy = new Texy();
return $texy->process($m[2]);

což sice funguje, ale nedá mi to spát :-) protože určitě na to je nějaká fintička jak tam tu proměnnou dostat, takže se ptám jestli někdo neví jak na to a nezodpoví i druhou část tohoto příspěvku.

LM
Člen | 206
+
0
-

V metodě kde registruješ filtry šabloně, nastav taky texy:

TemplateFilters::$texy = new Texy;
romansklenar
Člen | 655
+
0
-

Díky :-) po nějaké chvilce zkoušení jsem se k tomu dopracoval, jak už bývá skoro zvykem když člověk nad něčím stráví nějakou dobu a napíše do fóra, v zápětí je u cíle :-D …

edke
Člen | 198
+
0
-

Hm, nejako skusam vsetko co som nasiel, a neviem v sablone texy rozbehat. Staci rozbehat v startup() ? Alebo este treba texty aj registrovat ?

	public function startup()
	{
		TemplateFilters::$texy = new Texy;
	}
David Grudl
Nette Core | 8218
+
0
-

Tohle je velmi raná verze filtru texyElements, používat jej nedoporučuju.

Oficiální podporovaná cesta je třeba tato:

$texy = new Texy;

$template->registerFilter(/*Nette\Templates\*/'CurlyBracketsFilter::invoke');
$template->registerHelper('texy', array($texy, 'process'));

šablona:

{block |texy}
Vítejte!
--------

Můžete používat syntax Texy!, pokud Vám vyhovuje:
- třeba **tučné** písmo nebo *kurzíva*
- a takto se dělá "odkaz":https://texy.info

[* image.jpg *]
{/block}

Označný blok s modifikátorem texy je pak předhozen helperu texy.

David Grudl
Nette Core | 8218
+
0
-

Pro pochopení: {block} … {/block} vygeneruje něco cca takového:

<?php ob_start() ?>
Vítejte!
--------

Můžete používat syntax Texy!, pokud Vám vyhovuje:
- třeba **tučné** písmo nebo *kurzíva*
- a takto se dělá "odkaz":https://texy.info

[* image.jpg *]
<?php echo $template->texy(ob_get_clean()) ?>

A $template->texy(...) je volání helperu texy, tj. volání callbacku array($texy, 'process').

edke
Člen | 198
+
0
-

David Grudl wrote:

Tohle je velmi raná verze filtru texyElements, používat jej nedoporučuju.

Oficiální podporovaná cesta je třeba tato:

$texy = new Texy;

$template->registerFilter(/*Nette\Templates\*/'CurlyBracketsFilter::invoke');
$template->registerHelper('texy', array($texy, 'process'));

Hm, tomu rozumiem, ked inicializujem takto Texy priamo vo view, ktoreho sablona obsahuje {block | texy}, tak to vsetko pekne funguje.

Len som potom skusal zadefinovat helper v BasePresenter-i v startup() tak, aby som mohol texy uz potom pouzivat kdekolvek a to sa mi nepodarilo. Pri callbacku z TemplateFilters.php $texy->process() nie je dostupne.

David Grudl
Nette Core | 8218
+
0
-

stáhni si uplně poslední verzi

edke
Člen | 198
+
0
-

David Grudl wrote:

stáhni si uplně poslední verzi

Joo, teraz to uz funguje uplne krasne, vdaka.

deric
Člen | 93
+
0
-
$texy = new Texy;

$template->registerFilter(/*Nette\Templates\*/'CurlyBracketsFilter::invoke');
$template->registerHelper('texy', array($texy, 'process'));

ještě bych doplnil předávání php proměnné texy

	<div>{!foo->info |texy}</div>