Autor Zpráva
Uaz
Profil *
Zdravím. Zkouším vytvořit šablonovací systém, který by z předaného objektu vytáhl vlastnosti, které požaduje šablona.

Chtěl bych, aby systém zvládal i situaci kdy např. mám objekt category a jedna z jeho vlastností firstImage je objekt image, který má další vlastnosti (path, text atd.).

V šabloně mám tag {firstImage->path}. Bohužel zápis $object.'->'.$match(obsahuje string firstImage->path) nefunguje. Pokud ale přímo do kódu napíši $object.'->firstImage->path' cesta se v pořádku zobrazí.

Nevíte jak tohle řešit? Díky
Uaz
Profil *
Přidávám ještě kód funkce. Asi mi nezbyde nic jiného než podívat se do zdrojáku Smarty.

public function pasteObject($tag,$object){
  $tags_array=array('images'=>'<img src="{path}" alt="{image}" />',
  'sub_category'=>'<a href="?folder={name}"><img src="{firstImage->path}"></a>');
  $tag_old=$tags_array[$tag];
  if(is_array($object)){
    $tags='';
    preg_match_all('~\{(.+?)\}~',$tag_old,$match);
    $matchs=$match[1];
    foreach($object as $value){
      $tag=$tag_old;
      foreach($matchs as $match){
        if(trim($value->$match)!=''){
         $tag=str_replace('{'.$match.'}',$value->$match,$tag);
        } 
      }
      $tags.=$tag;
    }
    echo $tags;
  }else{
  
  }
}
Jan Tvrdík
Profil
Uaz:
V prvé řadě doporučuji použít nějaký existující šablonovací systém (viz např. vkládání meta tagů pomoci php).

Nevíte jak tohle řešit?
Většina šablonovacích systémů funguje tak, že se „kompiluje“ do čistého PHP, takže konstrukce jako {firstImage->path} se přeloží na <?php echo $firstImage->path; ?>. To, co ty zřejmě (architektura toho tvého systému mi není moc zřejmá) potřebuješ, je napsat si kus interpretu PHP v PHP =). Tedy pokud $match obsahuje řetězec firstImage->path, tak ho potřebuješ rozřezat (třeba pomocí explode) na části firstImage a path a jednotlivé části postupně v cyklu aplikovat.

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: