Ukládání do Session … začátečnický dotaz

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

Ahoj,
s Nette začínám. Rád bych v pár případech v aplikaci využil ukládání proměnné do session, zatím se mi ji nepodařilo ani po delším studio dokumentace a fóra zprovoznit. Mohl byste mi prosím někdo zkontrolovat tento kód? Do jaké míry je vhodné řešit lokalizaci tímto způsobem ponechme stranou…

Kód v presenteru:

	protected function createComponentZmenJazyk()
	{
	    $form = new Form();
	    $form->addSelect('jazyk', 'Jazyk', array(
			'CZ' => 'CZ',
			'EN' => 'EN'
			));
		$form['jazyk']->setDefaultValue('CZ');


	    $form->addSubmit('submit', 'Zvolit');
	    $form->onSuccess[] = callback($this, 'zmenJazykSubmitted');

		return $form;
	}

	public function zmenJazykSubmitted(Form $form)
	{

if($form['submit']->isSubmittedBy())
		{

    $values = $form->getValues();

			$jazyk = $form['jazyk']->value;
			$container = $this->context;
			$session = $container->session;
			if ($container->session->exists()) {
			$session = $container->session->start();
			}


			$section = $this->session->getSection('jazyk');

			$section->jazyk = $jazyk;
		//	$section['jazyk'] = $jazyk;


		//	$section['jazyk'] = $jazyk;
		//	$this->redirect('Stranka:bio');

}


	}

Šablona:

{block #content}


{* <h1>{if $section['jazyk']="CZ"}O mně{else}About me{/if}</h1> *}
   <h1>{if $section->jazyk="CZ"}O mně{else}About me{/if}</h1>
22
Člen | 1478
+
0
-

nebudu se vyjadřovat k ostatnímu. ale například tahle podmínka, kde používáš operátor přiřazení místo porovnání, určitě nebude pracovat, jak si představuješ:

{if $section->jazyk="CZ"} //přiřadí do proměnné hodnotu a vrátí bool hodnotu
{if $section->jazyk === "CZ"} //porovná 2 hodnoty
Jan Endel
Člen | 1016
+
0
-

Předáváš section do šablony? Změnils podmínku jak udává 22? Potažmo si něco zkus nastudovat o Lokalizaci poněvadž takhle by ses vážně upsal.

Editoval pilec (11. 2. 2012 12:17)

Stevie
Člen | 18
+
0
-

Podmínka – jasný, díky. Proměnnou section do šablony nepředávám jelikož jsem zatím úplně nevykoumal jak. S tou lokalizací – rozhodně odmítám jakýkoli strojový překlad. Ale chystám se to prostudovat.

Jan Endel
Člen | 1016
+
0
-

To není strojový předklad, takhle si zaneřádíš akorát šablony samými ošklivými ify. A section do šablony předáš jednoduše:

public function renderFoo()
{
	$this->template->section = $this->session->getSection('jazyk');
}
Tomáš Votruba
Moderator | 1114
+
0
-

Jestli to chápu dobře, chceš uložit zvolený jazyk a podle něj vykreslovat příslušnou lokalizaci.
Nemusíš vytvářet cache či session, bohatě na to stačí identita, kterou má i nepřihlášený uživatel (jako guest).

Identita

Identita ($user->identity) je vlastně session. Je všude přístupná a hodí se právě pro přenos informací o daném uživateli.

public function changeLanguage(Form $form)
{
	$values = $form->getValues(TRUE);

	// přiřadíš odeslaný jazyk proměnné $lang
	$this->user->identity->lang = $values["lang"];
}

V presenteru pak používáš:

// inicializace
$lang = "cs"; // defaultní jazyk
if($this->user->identity->lang) { // pokud je jazyk nastaven v identitě, přiřadíme ho
	$lang = $this->user->identity->lang;
}
else { // jinak identitě nastavíme deafultní, aby nám to šlapalo v šabloně (viz níže)
	$this->user->identity->lang = $lang;
}

V šabloně pak:

{if $user->identity->lang == "cs"}
	Vítejte na mé stránce.
{elseif $user->identity->lang == "en"} <!-- pokud máš jen 2 jazyky, stačí else -->
	Welcome to my page.
{/if}

<!-- což je otrava, že? s NetteTranslatorem to bude vypadat takto -->
{_"Vítejte na mé stránce."}

Překlady

Doporučuji použít nastavení jazyka do identity + NetteTranslator.

Návod je v Kuchařce (včetně odkazů na důležité témata), takže je to fakt hračka :)

Editoval Schmutzka (11. 2. 2012 14:06)

iguana007
Člen | 970
+
0
-

ještě bych dodal k těm překladům … toto je sebevražda … teď ti to třeba vyhovuje, ale co když za půl roku bude třeba přidat další jazyk? :) To by ses pak zbláznil :)
Běž radši do toho Translatoru, jak ti psal Schmutzka…

Stevie
Člen | 18
+
0
-

Díky moc všem, všechno projdu. Automatické překlady ale pro tentokrát nechci, nikdy to nefunguje stoprocentně (rozhodně ne na jakékoli delší texty, samozřejmě záleží na charekteru stránek, pro názvy formulářových polí apod. je to asi v pohodě). Ale určitě si ten Translator někde vyzkouším.

Ty session si ale potřebuju vyzkoušet i pro jiné případy. Do šablony jsem si ji tedy předal, nicméně se mi momentálně nedaří změnit její hodnotu, v $section->jazyk zůstalo po prvním odeslání formuláře trvale „CZ“ (kód formuláře a submitu formuláře víceméně stejný jako nahoře). Stále nevím kde může být problém?

Stevie
Člen | 18
+
0
-

Ok, už to mám vyřešeno. Díky všem.

Jan Endel
Člen | 1016
+
0
-

Pořád mám pocit, že si myslíš, že Translator dělá strojový překlad (přes translate.google nebo něco podobného). Není tomu tak. V podstatě jde o to, že mu předáš dva (ke každému jazyku 1) textové soubory kde to přeložíš ručně a už se to tahá jak ty potřebuješ.

Stevie
Člen | 18
+
0
-

Aha. Tak to jo, určitě to teda vyzkouším. Díky moc za tip.

Tomáš Votruba
Moderator | 1114
+
0
-

Stevie napsal(a):

Aha. Tak to jo, určitě to teda vyzkouším. Díky moc za tip.

Super, pak se pochlub, jak jsi dopadl. Zajímá mne, jak moc je to pochopitelné.