jak vypnout layout v nette 0.9.2? zdá se mi to nebo je tam chyba?
- mcmatak
- Člen | 504
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
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
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
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
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)
- Honza Kuchař
- Člen | 1662
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}
- redhead
- Člen | 1313
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)
- Honza Kuchař
- Člen | 1662
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
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)
- Honza Kuchař
- Člen | 1662
jsou takové 2 podobné direktivy:
- oldModuleMode = nastavuje novou/starou adresářovou strukturu pro moduly
- oldLayoutMode = nastavuje nové/staré šablony. ($oldLayoutMode=false – nové šablony)
- Honza Kuchař
- Člen | 1662
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?…