Šablonovací systém – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Šablonovací systém – PHP – Fórum – Programujte.comŠablonovací systém – PHP – Fórum – Programujte.com

 

Yohaku0
Návštěvník
7. 11. 2012   #1
-
0
-

Zdravím,

vytvářím si šablonovací systém, abych oddělil aplikační logiku od HTML. Zatím to umí jen vypsat šablony tímto způsobem:

<h2>{title}</h2>

Já bych potřebovat zaimplantovat takzvané helpery. Například, že každé písmeno bude velké, tak bych normálně použit v php strtoupper($title);, ale v šabloně bych to chtěl mít takto:

<h2>{title|upper}</h2>

Nevíte jak na to? (Samozřejmě chápu, že na to bude potřeba regulárním výrazům, ale nevím jejich obsah.)

Toto je na to funkce:

  public function output()
  {
    if(!file_exists($this->file))
    {
      return "Chyba při načítání šablony. ($this->file)";
    } else
    {
      $output = file_get_contents($this->file);
      
      foreach($this->values as $key => $value)
      { 
          $tagToReplace = "{".$key."}";
          $val = $value;          
          $output = str_replace($tagToReplace, $val, $output);                            
      }                 
      echo $output;      
    }
  }
Nahlásit jako SPAM
IP: 46.107.247.–
V těch nejtěžších chvílích se otoč za sluncem a všechny stíny padnou za tebe. - John Lenon
CZechBoY+4
Věrný člen
8. 11. 2012   #2
-
0
-

#1 Yohaku
no zkontroluješ, jestli v $key není roura, kdyžtak zkontroluješ jestli ti existuje taková funkce a když existuje tak ji prostě zavoláš :)

 doufám, že to je takhle správně

public function output()
  {
    if(!file_exists($this->file))
    {
      return "Chyba při načítání šablony. ($this->file)";
    } else
    {
      $output = file_get_contents($this->file);
      
      foreach($this->values as $key => $value)
      { 
          $tagToReplace = "{".$key."}";
          $val = $value;
	  if($start=strpos($key,'|')!==false) {
	    $func=substr($key,$start);
	      if(function_exists($func))
		$val=$func."(".$value.")";
	  }
          $output = str_replace($tagToReplace, $val, $output);                            
      }                 
      echo $output;      
    }
  }
Nahlásit jako SPAM
IP: 94.112.108.–
Yohaku0
Návštěvník
8. 11. 2012   #3
-
0
-

#2 CZechBoY
A jak zjistím co je to za helper a jakou bude mít funkci?

Nebude lepší když každý helper udělám takto?:

foreach($this->values as $key => $value)
      { 
          $tagToReplace = "{".$key."}";
          $val = $value;          
          $output = str_replace($tagToReplace, $val, $output);                            
      }
      
      foreach($this->values as $key => $value)
      {
        $tagToReplace = "{".$key."|upper}";
        $val = strtoupper($value);
        $output = str_replace($tagToReplace, $val, $output); 
      }
      
      foreach($this->values as $key => $value)
      {
        $tagToReplace = "{".$key."|lower}";
        $val = strtolower($value);
        $output = str_replace($tagToReplace, $val, $output); 
      }
...
Nahlásit jako SPAM
IP: 46.107.247.–
V těch nejtěžších chvílích se otoč za sluncem a všechny stíny padnou za tebe. - John Lenon
Nefaritus
~ Redaktor
+2
Posthunter
8. 11. 2012   #4
-
0
-

#3 Yohaku
Však to, co ti napsal CZechBoY ti pro {title|upper} vrátí upper($value). Tobě stačí napsat funkci

public function upper($val)
{
	return strtoupper($val);
}

a nebo si udělat pole fcí a jejich zkratek a zaměnit ten název přímo v té původní funkci.

 
Nahlásit jako SPAM
IP: 194.228.11.–
Yohaku0
Návštěvník
8. 11. 2012   #5
-
0
-

Všem děkuji, už jsem to vyřešil. Ještě bych potřeboval (abych nezakládal zbytečně nové téma), jak vytvořit cykly v šabloně.

Nahlásit jako SPAM
IP: 46.107.247.–
V těch nejtěžších chvílích se otoč za sluncem a všechny stíny padnou za tebe. - John Lenon
CZechBoY+4
Věrný člen
8. 11. 2012   #6
-
0
-

#5 Yohaku
cyklus? třeba for?
v Nette Latte to je nějak {for $i=0; $i<10; $i++}...{/for}

http://doc.nette.org/…fault-macros

pak se to převede na čistý php a kešuje

to nahrazování přes foreach je blbost, při 20 funkcích budeš mít 20 cyklů, bude to hodně pomalý a nepřehledný

Nahlásit jako SPAM
IP: 213.192.10.–
Farrell0
Newbie
14. 11. 2012   #7
-
0
-

doporučuju regexp, je to jednodušší... něco jako (netestoval jsem)

/\{(.+)(\|(.+))?\}/

z toho vytáhneš název, pak si třeba uděláš třídu s funkcema a zjistíš, jestli to za | je nějaká funkce. Jestli ne tak vyhodíš exception, nebo to prostě neprovedeš.

Nahlásit jako SPAM
IP: 89.103.190.–
www.farpc.eu
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 29 hostů

Podobná vlákna

Csrf sablonovaci system — založil str

System() v C++ — založil

System("??????"); — založil dragon124

Os.system — založil Priwi

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý