jak vypnout layout v nette 0.9.2? zdá se mi to nebo je tam chyba?

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

Presenter.php

řádek 457

<?php
	/**
	 * Changes or disables layout.
	 * @param  string|FALSE
	 * @return Presenter  provides a fluent interface
	 */
	public function setLayout($layout)
	{
		$this->layout = (string) $layout;
		return $this;
	}
?>

řádek 470

<?php

	/**
	 * @return void
	 * @throws BadRequestException if no template found
	 * @throws AbortException
	 */
	public function sendTemplate()
	{

...
řádek 492

			if ($this->layout !== FALSE) {

...
?>

jak ze stringu vymáčknu

$this->layout === FALSE

??

Honza Kuchař
Člen | 1662
+
0
-

Mno, vidim to na chybu. :(

redhead
Člen | 1313
+
0
-

zajímavé, bylo to už dokonce ve verzi 0.8

Honza Kuchař
Člen | 1662
+
0
-

Tak jsem to otestoval a když si zavolám setLayout(null); tak se opravdu layout přestane používat. Takže tam asi chyba není.

EDIT: nebo setLayout(false);

Editoval honzakuchar (27. 9. 2009 12:51)

redhead
Člen | 1313
+
0
-

To je ovšem velmi zajímavé chování u php, ne?

Když bych to bral logicky, tak parametrem zadám FALSE, což se přetypuje na string „FALSE“ a výsledek podmínky striktně typového porovnání (!== FALSE) by snad vždy byl true, ne?? Uniká mi něco?

Editoval redhead (27. 9. 2009 12:59)

Honza Kuchař
Člen | 1662
+
0
-

Neuniká, já si to taky myslel. Do zdrojáku jsem se sice nedíval. Jenom jsem to prostě zkusil. A ono to funguje. Já už bych do starých šablon nerýpal. (i když toto je takové jakési wtf? ) A rači bych se zabýval těmi novými.

Majkl578
Moderator | 1364
+
0
-

redhead napsal(a):

To je ovšem velmi zajímavé chování u php, ne?

Když bych to bral logicky, tak parametrem zadám FALSE, což se přetypuje na string „FALSE“ a výsledek podmínky striktně typového porovnání (!== FALSE) by snad vždy byl true, ne?? Uniká mi něco?

A odkdy prosímtě? false == '', false se přetypuje na prázdný řetězec. Co je na tom divného?
http://cz2.php.net/….boolean.php#…

Editoval Majkl578 (27. 9. 2009 13:08)

redhead
Člen | 1313
+
0
-

Trochu jsem pátral a záhada vyřešena:

přetypování (string)FALSE ⇒ "" (empty string)

a výsledek podmínky ("" === FALSE) je TRUE (prázdný string == FALSE)

To mi už u PHP připadá logické :)

Majkl578
Moderator | 1364
+
0
-

redhead napsal(a):

Trochu jsem pátral a záhada vyřešena:

přetypování (string)FALSE ⇒ "" (empty string)

a výsledek podmínky ("" === FALSE) je TRUE (prázdný string == FALSE)

To mi už u PHP připadá logické :)

A opět chyba. "" === FALSE je false, ne true.

redhead
Člen | 1313
+
0
-

Majkl578 napsal(a):
A odkdy prosímtě? false == '', false se pretypuje na prazdny retezec

Už to vím a chápu, ale celkem mě to překvapilo a to jsem si myslel, že phpku rozumím :D

Člověk se furt učí.. :)

redhead
Člen | 1313
+
0
-

V tom případě ale ta podmínka v té metodě vyjde vždycky TRUE, ne?

"" 	!== FALSE //TRUE
"abc" 	!== FALSE //TRUE
mcmatak
Člen | 504
+
0
-

mě teda ve verzi nette 0.9.2 vypnout layout nefunguje

Majkl578
Moderator | 1364
+
0
-

redhead napsal(a):

V tom případě ale ta podmínka v té metodě vyjde vždycky TRUE, ne?

"" 	!== FALSE //TRUE
"abc" 	!== FALSE //TRUE

Pokud se vždy liší typy, tak ano.

redhead
Člen | 1313
+
0
-

Takže chyba v Nette, ovšem v 0.9.1 je to opraveno na if($this->layout).

V 0.9.1 mi to funguje.

Honza Kuchař
Člen | 1662
+
0
-

Já jsem to testoval na poslední revizi z gitu?! A fungovalo mi to.

mcmatak
Člen | 504
+
0
-

takže vypneš layout jako $this->setLayout(FALSE);

??

to mě nefunguje, stejně se pokusí layout načíst

Honza Kuchař
Člen | 1662
+
0
-

http://projekty.mujserver.net/…chOffLayout/

Je tam převedený skeleton na starý šablony. Upravy:

abstract class BasePresenter extends Presenter
{
	public $oldLayoutMode = TRUE; // tady

}

class HomepagePresenter extends BasePresenter
{

	public function renderDefault()
	{
		$this->template->title = 'It works!';
                $this->layout = false; // tady
	}

}

@layout.phtml

	{include $content} <!-- místo # $ -->

Homepage/default.phtml

  • odstraněn {block #content}
mcmatak
Člen | 504
+
0
-

no to máš pravdu :) :)

ale k tomu by se měla používat fce setLayout ne????

ktera ti nic takového nedovolí!

nevím jestli to bylo myšleno jako účel, ale moc mi to nesedí, pokud mám obcházet fci setLayout, tak snad by měla vzniknout fce disableLayout nebo tak

Honza Kuchař
Člen | 1662
+
0
-

$this->layout = false; // tady
=
$this->setLayout(false);

viz https://doc.nette.org/…/smartobject#…

mcmatak
Člen | 504
+
0
-

tady není moc co dohadovat nette 0.9.2, koukni do kodu

<?php

        public function setLayout($layout)
        {
                $this->layout = (string) $layout;
                return $this;
        }

?>

pokud zavoláš tuhle funkci je jasné, že (string) provede přetypování a tak false nebude fungovat a opravdu mi to nefunguje

redhead
Člen | 1313
+
0
-

Nejde o to že se to přetypuje na string, problém je v té podmínce v metodě sendTemplate. Musí se změnit:

if($this->layout != FALSE)
//nebo
if($this->layout) 		//která v 0.9.1 byla

//protože tohleto skončí vždycky TRUE
if($this->layout !== FALSE)

Editoval redhead (27. 9. 2009 21:54)

mcmatak
Člen | 504
+
0
-

j to je to co tvrdím, tedy poslat na dgx, chtěl sem jen vědět jestli jde opravdu o chybu, samozřejmě by to řešila i fce disableLayout, která by nastavila false a pak sendTemplate může zůstat jak je

Honza Kuchař
Člen | 1662
+
0
-

Tak se omlouvám, je to BUG! Mám tu nějak moc projektů a pomíchali se mi tu revize nette.

P.S.: Nchceš raději přejít na nové šablony?

Honza Kuchař
Člen | 1662
+
0
-

Takže pro Davida bug report: http://projekty.mujserver.net/…chOffLayout/

Edit: Změna nastala v commitu 9285b836f9aa556d7dc02134d11eac95195b7c10

Editoval honzakuchar (27. 9. 2009 22:28)

mcmatak
Člen | 504
+
0
-

používám nové šablony, ale to přece nemá vliv, resp. použivám oldModuleMode=false, nebo nevím co přesně myslíš, možná to není ono

Honza Kuchař
Člen | 1662
+
0
-

jsou takové 2 podobné direktivy:

  • oldModuleMode = nastavuje novou/starou adresářovou strukturu pro moduly
  • oldLayoutMode = nastavuje nové/staré šablony. ($oldLayoutMode=false – nové šablony)
mcmatak
Člen | 504
+
0
-

ale nové šablony mi zatím nic neříkají, ty využívají jen ty blocky ne? nebo je tam něco víc? je tady nějaký příspěvek o tom? a hlavně sem někde četl, že jsou zatím hodně chybové

kravčo
Člen | 721
+
0
-

mcmatak napsal(a):

… a hlavně sem někde četl, že jsou zatím hodně chybové

Ja osobne som žiadne chyby nezaznamenal, možno si čítal nepresné informácie, daj odkaz, aby som ich prípadne mohol upraviť a nečítali ich i ostatní…

Honza Kuchař
Člen | 1662
+
0
-

Už je používám dlouho a žádné chyby jsem také nezaznamenal. Akorát se musíš naučit jak používat zavináče. (pokud tedy chceš používat ajax) I když možná ne, protože David chystá něco nového. (říkal za ~14dní)

https://doc.nette.org/…late-filters#…
https://forum.nette.org/…pomoci-ajaxu?…

bug s else už je vyřešen: https://forum.nette.org/…iewtopic.php?…