Autor Zpráva
Shigei
Profil
Potřebuju udělat cykly (např.: while, for, foreach) ve svých šablonách. Tady je nynější funkce na vypsání proměnných:

  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;      
    }
  }
Jan Tvrdík
Profil
Shigei:
Obvykle se to kvůli výkonu řeší tak, že se šablona zkompiluje do PHP a to se pak spustí.
Shigei
Profil
Jan Tvrdík:
A jak bych to měl zkompilovat do PHP?
Str4wberry
Profil
Že se vezme soubor šablony, {proměnná} se nahradí za <?php echo $proměnná ?> a uloží se to jako PHP soubor, který se potom vkládá do stránky po naplnění jeho proměnných.
Shigei
Profil
A jestli se nemýlím, tak se na to používají regulární výrazy?
Nox
Profil
Tak můžeš použít cokoli, čím dosáhneš žádanýho výsledku, reguláry, řetězcové funkce ... (nejčistší by byl komplet kompilátor s parserem, ale to je v tvém případě přehnané)
Shigei
Profil
Nox:
Nešlo by to prosím konkrétněji? Chci říct, že jsem v PHP začátečník.
Norman
Profil
Shigei

Nebylo by lepší využít již hotových?

Kupříkladu velmi jednoduchý a hezký šablonovací systém je zde :) viz jakub
Jinak Smarty, Latte a další ..
Shigei
Profil
Norman:
Možná, že i jo. Už jsem asi z poloviny přišel na atributy.:

Tady je funkce "truncate", potřebný jeden parametr. Zápis v šabloně: " {promenna|truncate:40} ".

      foreach($this->values as $key => $value)
      {
        $tagToReplace = "{".$key."|truncate}";
        $val = substr($value, 0, $kde_vzit_tuto_promennou);
        $output = str_replace($tagToReplace, $val, $output); 
      }   

A nevím, jak získat to číslo 40 z šablony.
Norman
Profil
Tak pro toto je jednoduché řešení, aneb explode("|", $tagToReplace) první parametr bude klíč druhý truncate :)

Nicméně jak jsem řekl, proč tvořit něco takového když lepší už existuje :)
Shigei
Profil
Norman
Ano, jenže já potřebuji zjistit, kolik písmen chce uživatel zobrazit. V tomto případě 40. A když nic nenapíše, aby se zasadila defaultní hodnota, třeba 10.
Tori
Profil
Shigei:
jenže já potřebuji zjistit, kolik písmen chce uživatel zobrazit
Postupovala bych spíš opačně, tj. pomocí preg_replace_callback najít všechny řetězce ve složených závorkách, dosadit hodnotu z nějakého pole hodnot, a pokud je zadaný jeden nebo více helperů (např. truncate) tak jim předat hodnotu + zadané parametry. Muselo by k tomu být nějaké pole pro překlad [název helperu] => [callback], výchozí hodnoty by se určovaly v té callback funkci/metodě.

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: