Autor Zpráva
lopikol
Profil
Zajímalo by mne, proč to v druhém příkladě nefunguje správně.? Jak to upravit, aby právě druhý příklad fungoval jak má? Děkuji.
$auto = 'auto';
$znak = '==';
$moto = 'moto'; 

if($auto == $moto){ 
 echo 'TRUE<br />';
}else{
 echo 'FALSE<br />';
}

if($auto . $znak . $moto){ 
 echo 'TRUE<br />';
}else{
 echo 'FALSE<br />';
}
zdenek
Profil
lopikol:

na co potřebuješ, aby to bylo takhle?

EDIT: přijde mi to nesmyslné.
Louka
Profil
Druhý případ je totiž nesmysl. Podmínka není text, ale podmínka :)...

Jestli to nutně potřebuješ a myslíš si, že není zbytí, zkus eval().
lopikol
Profil
Jde o to, že odděluji html od php a používám nahrazování přes preg_replace_callback();

V šabloně mám:
{IF auto == moto}FALSE{/IF}


Díky tomu mám z:
auto == moto

toto:
$matches[2] . $matches[3] . $matches[4]


Vůbec nevim, jak na toto napasovat eval();
Dokonce si myslim, že tahle funkce mi moc nepomůže.
ShiraNai7
Profil
lopikol:

Takhle nejak.. a muzes tam timto zpusobem doplnit i ostatni srovnavaci operatory:

switch($matches[3]) {

  // rovnost
  case '==':
  $vysledek = ($matches[2] == $matches[4]);
  break;
  
  // vetsi nebo rovno
  case '>=':
  $vysledek = ($matches[2] >= $matches[4]);
  break;
  
  // a tak dale..

}

if($vysledek) echo 'TRUE';
else echo 'FALSE';
lopikol
Profil
ShiraNai7:
Díky moc. Jen ještě něco. Dnes si sedim na vedení, ale jakmile to dám do function when($matches){ }, tak to píše Notice: Undefined variable: vysledek. Děkuji moc za radu.
__construct
Profil
lopikol:
Keď si to preložíš - znamená to, že používaš nedefinovanú premennú $vysledek. Stačí ju pred jej použít definovať napr. $vysledek = null;
lopikol
Profil
__construct:
njn, ale to se pak nic nezobrazí.
ShiraNai7
Profil
lopikol:
Tak tam mas asi operator co neexistuje... pridej pred konec switche toto:

default:
throw new InvalidArgumentException(__function__.': Neznamy operator \''.$matches[3].'\'!');
lopikol
Profil
ShiraNai7:
Díky moc. Měl jsem tam problém v mezeře ;)
lopikol
Profil
Potřeboval bych ještě poradit s řešením.
Nyní mám možnost mít v šabloně pouze toto:
{IF auto == 'moto' }FALSE{/IF}

Jak udělat v preg_replace_callback(), aby byla i správnám možnost (vše v jednom a nemusel mít těch funkcní více):
{IF auto == "moto" }FALSE{/IF}
{IF auto=='moto' }FALSE{/IF}
{IF auto=="moto" }FALSE{/IF}


Callback:
'#({IF )(.*) (.*) \'(.*)\'( })(.*)({/IF})#'
Alphard
Profil
Řešení uvedené v [#5] se mi nezdá pro použití v šabloně dost robustní.
V uvdeném příkladě
{IF auto == moto}FALSE{/IF}
by se do cache šablon vygenerovalo
<?php if (auto == moto): { ?>FALSE<? endif; ?>
Takhle to udělá Smarty i Latte.

Šablony se parsují jenom jednou, pak už se bere PHP soubor.
lopikol
Profil
cachování jsem zatim ještě neřešil.
Alphard
Profil
Řešil bych to jinak, ale tak jste to ještě neřešil :-)
Pro popsaný případ smazat bílé znaky, sjednotit uvozovky a apostrofy, vše před tím regulárem.

A doufejte, že nebudete potřebovat {IF auto == 'moto' and kvetina == "ruze"}FALSE{/IF}
lopikol
Profil
Alphard:
Budu rád, když mi budeš tykat. Beztak jsem mladší než ty.

Když se podělíš o tvůj způsob, nápad řešení, tak budu rád :)

Tak takovýto zápis nebude potřeba + se z toho dají udělat dva ;)
panther
Profil
lopikol:
se z toho dají udělat dva
to mi nepřijde moudré. Podmínka na splnění dvou minipodmínek je základ jakékoliv syntaxe.

Když tak pročítám tohle vlákno a přičtu k tomu tvoje znalosti... Proč nepoužiješ nějaké již hotové řešení, např. Smarty?
lopikol
Profil
Smarty?? :D To by bylo jako použít tank na mouchu! Nemluvě o tom, že to je hnus.

panther:
„se z toho dají udělat dva“
to mi nepřijde moudré. Podmínka na splnění dvou minipodmínek je základ jakékoliv syntaxe.
V nette to tak funguje ;)

PS: Co by si doporučil se doučit?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0