Nittro – novinka pro váš frontend (původně NetteJS)

jahudka
Člen | 71
+
+1
-

@Ages ahoj, problém je v tom, že Nittro nepočítá s tím, že bys title řešil snippetem – očekává, že title dáš do payloadu tak, jak to píše @VáclavKraus – a bohužel je to zatím řešený tak, že se to nedá moc změnit. V Nittru 3 to bude vyřešený a půjde si při buildu nastavit, kterou strategii pro práci s title používáš.

Ages
Člen | 127
+
0
-

@jahudka aplikaci jsem předělal a nemám s tím nejmenším prblém :) nyní to funguje parádně!
Měl bych ještě dotazy ohledně flash messages:

  • V případě že vše jede přes Ajax zpráva po určité době korektně zmizí, ale pokud například otevřu první stránku a ta mi vyhodí flashku není vygenerována Ajaxem a staticky zůstane což by bylo také správně, ale bohužel mi tam tato zpráva zůstává viset i při dalších pohybech v aplikaci dokud neobnovím celou stránku
  • Pokud mám kód <div n:flashes></div> přímo v @layout.latte tam mi flasky normálně mizejí, ale pokud jej přesunu někde do vkládané šablony protože je pokaždé potřebuji generovat jinde, tak zůstávají statické

Díky

jahudka
Člen | 71
+
0
-

Ages napsal(a):

@jahudka aplikaci jsem předělal a nemám s tím nejmenším prblém :) nyní to funguje parádně!
Měl bych ještě dotazy ohledně flash messages:

  • V případě že vše jede přes Ajax zpráva po určité době korektně zmizí, ale pokud například otevřu první stránku a ta mi vyhodí flashku není vygenerována Ajaxem a staticky zůstane což by bylo také správně, ale bohužel mi tam tato zpráva zůstává viset i při dalších pohybech v aplikaci dokud neobnovím celou stránku
  • Pokud mám kód <div n:flashes></div> přímo v @layout.latte tam mi flasky normálně mizejí, ale pokud jej přesunu někde do vkládané šablony protože je pokaždé potřebuji generovat jinde, tak zůstávají statické

Díky

Co myslíš „vkládanou šablonou“, máš na mysli šablonu nějakýho view která extenduje @layout.latte, nebo šablonu vkládanou pomocí {include ...}? Můžeš mrknout jestli je nějakej rozdíl ve vygenerovaným HTML pokud dáš <div n:flashes></div> do layoutu vs. do šablony view? Mám dojem že na to už někdo někdy narazil, jen si nepamatuju, jestli jsme našli nějaký řešení..

Ages
Člen | 127
+
0
-

Myslím šablonu která extenduje @layout.latte

Generování v @layout.latte

<div id="flashes" data-flash-inline="true"><p class="nittro-flash nittro-flash-inline nittro-flash-warning">Pro tuto akci je potřebné přihlášení.</p></div>

Generování v extendované šabloně

<div id="flashes" data-flash-inline="true"><p class="nittro-flash nittro-flash-inline nittro-flash-success">Článek: ToDo byl upraven.</p></div>

Po čase z HTML flashka zmizí

<div id="flashes" data-flash-inline="true"></div>

Ale stále zůstane viditelná na stránce

Editoval Ages (19. 6. 2018 8:52)

jahudka
Člen | 71
+
0
-

Ages napsal(a):

Ale stále zůstane viditelná na stránce

Wut?? :-D to vypadá jako něco hodně divnýho.. můžeš poslat třeba nějaký screeny kde ta flashka zůstala viset, ale v developer tools už v DOM struktuře není? nebo alternativně buď můžem mrknout přes TeamViewer nebo se můžeš stavit na kafe, pokud jsi pražskej :-)

Alsatian
Člen | 164
+
0
-

Ages napsal(a):

Ahoj, nasadil jsem Nittro na svůj projekt a můsím říct že je to vážně supr :) jen jsem narazil na menší zádrhel a to že se mi přepisuje $title na původní hodnotu
Struktura šablon je:

<!-- @layout.latte -->
<html>
<head>
<title n:snippet="title">{ifset $title}{$title|stripHtml} | {/ifset}Super Web</title>
</head>
...
<!-- test.latte -->
{extends '../@layout.latte'}
{var $title = 'Test'}
{block content}
...

Takto mám postavenou celou aplikaci a před nasazením Nittro se mi normálně generovaly správně nadpisy, ale nyní když přejdu jinam se mi nejprve změní title na správnou v tomto případě na Test | Super Web a pak se přepíše zpět na původní hodnotu.
Změna je téměř nepostřehnutelná a ano snippet title mám nasteven pro defaultní překreslování.

Má někdo nápad co by to mohlo způsobovat?

Neví někdo jak vyřešit tag Title při použití Nittro? Generuji je dynamicky v šabloně, multijazyčně, pro přehlednost bych je tam rád nechal.

Při načtení stránky titulek naskočí správně a hned se přepíše na posledně použitý (stránka vygenerovaná přes URL + enter).

Děkuji moc :)

jahudka
Člen | 71
+
0
-

Alsatian napsal(a):

Ages napsal(a):

Ahoj, nasadil jsem Nittro na svůj projekt a můsím říct že je to vážně supr :) jen jsem narazil na menší zádrhel a to že se mi přepisuje $title na původní hodnotu
Struktura šablon je:

<!-- @layout.latte -->
<html>
<head>
<title n:snippet="title">{ifset $title}{$title|stripHtml} | {/ifset}Super Web</title>
</head>
...
<!-- test.latte -->
{extends '../@layout.latte'}
{var $title = 'Test'}
{block content}
...

Takto mám postavenou celou aplikaci a před nasazením Nittro se mi normálně generovaly správně nadpisy, ale nyní když přejdu jinam se mi nejprve změní title na správnou v tomto případě na Test | Super Web a pak se přepíše zpět na původní hodnotu.
Změna je téměř nepostřehnutelná a ano snippet title mám nasteven pro defaultní překreslování.

Má někdo nápad co by to mohlo způsobovat?

Neví někdo jak vyřešit tag Title při použití Nittro? Generuji je dynamicky v šabloně, multijazyčně, pro přehlednost bych je tam rád nechal.

Při načtení stránky titulek naskočí správně a hned se přepíše na posledně použitý (stránka vygenerovaná přes URL + enter).

Děkuji moc :)

Ahoj, to je pořád ten problém co nahoře – Nittro nastavuje title podle proměnné $title z payloadu. Fix přímo v Nittru zatím není, ale můžeš si to fixnout sám, pokud si děláš custom build Nittra – potřebuješ takovejhle skript, třeba soubor assets/js/App/TitleHelper.js:

<script>
_context.invoke(function(HistoryAgent, Strings) {
	HistoryAgent.prototype._handleResponse = function (data, evt) {
		var payload = evt.data.response.getPayload();

        if ('snippets' in payload && 'snippet--title' in payload.snippets) {
			data.title = Strings.escapeHtml(payload.snippets['snippet--title']);
		} else if (payload.title) {
            data.title = payload.title;
        }
	};
}, {
	HistoryAgent: 'Nittro.Page.HistoryAgent',
	Strings: 'Utils.Strings'
});
</script>

Pak si v konfiguraci Nittro builderu přidáš cestu k tomuhle skriptu do libraries / js a máš vyhráno :-) pokud si buildíš Nittro sám pomocí Gulp nebo Grunt pluginu, asi tušíš, jak to tam dát; pokud používáš hotovej build Nittra (ať už Essentials nebo Full), můžeš si nechat jednorázově vygenerovat custom build na webu – výchozí nastavení custom build toolu odpovídá Essentials a když tam doklikáš i všechny ostatní Nittro komponenty, dostaneš Full.

Ages
Člen | 127
+
+1
-

@Alsatian
Já jsem to nakonec předělal a využívám to takto:

	//BasePresenter.php
	    protected function startup() {
	parent::startup();
	$this->getHttpResponse()->addHeader('Access-Control-Allow-Origin', '*');
	$this->getHttpResponse()->addHeader('Access-Control-Allow-Headers', 'X-Requested-With');
	$this->setDefaultSnippets(['title']);
	}

	protected function afterRender() {
	parent::afterRender();
	if ($this->isAjax()) {
	$this->payload->title = $this->title;
	}
	$this->template->title = $this->title;
	}
	//HomepagePresenter.php

	public function renderDefault() {
	$this->title = 'SuperWeb';
		}
<!-- @layout.latte -->

<title n:snippet="title">{$title}</title>
jahudka
Člen | 71
+
+4
-

Ahoj vespolek, jen ať je to nějak všude – Nittro má teď svoje vlastní fórum, takže další dotazy na něj směřujte tam :-)

https://forum.nittro.org

pa j