ugrás a tartalomhoz

smarty: html tag előtt engedélyezni, hogyan?

Kubi · 2013. Jan. 3. (Cs), 10.14
Üdv!

Smarty-val akadt problémám:

A html tag előtti dolgokat a smarty figyelmen kívül hagyja. A templat-et generálom, többször használandó blokkokat capture-val helyezek el benne, külső forrásból. A smarty-n belül változóként van rá szükségem és mivel a blokkok tartalmazhatnak smarty kódot, változókat, csak így lehet megoldani, tudomásom szerint.

Ez a példa nem működik:

{capture "blok1"}blok1{/capture}
<html>
<body>
{$smarty.capture.blok1}
</body>
</html>


így már jó:

<html>
{capture "blok1"}blok1{/capture}
<body>
{$smarty.capture.blok1}
</body>
</html>


Gyors megoldás, hogy a kódot átírom, generálásnál a html tag után helyezze a dolgait, de a szép az lenne, ha maradhatna előtte. Tudtok erre valami megoldást? Googlizok, de semmi releváns infót nem tudtam kicsikarni.

Előre is köszi.
 
1

Infó

Adam87 · 2013. Jan. 3. (Cs), 13.46
Szervusz!

Nem kötekedésből, de mit akarsz rakni a <html> elé?
Azért kérdezem, mert elvileg a böngésző az az utáni résszel foglalkozik.

A másik kérdésem, ami nem feltétlen fontos, de jól jöhet, hogy melyik Smarty verziót használod?
2

Közben kipróbáltam, nálam megy!

Adam87 · 2013. Jan. 3. (Cs), 15.47
Nálam szépen működik a 3.1.12-es verzióval!
Be tudod másolni a kódodat, ahol példányosítod a smarty-t és feldolgozod a template fájlodat?
4

nem veszem kötekedésnek :),

Kubi · 2013. Jan. 3. (Cs), 17.10
nem veszem kötekedésnek :), nem vagyok pistik (remélem)

smarty-s változókat akarok létrehozni amiket majd később elérek saját gyártott plugin-ben.
3

symfony projektről van szó,

Kubi · 2013. Jan. 3. (Cs), 17.07
symfony projektről van szó, smarty 3.0.7, verzió váltás nem megoldható (ég tudja hol okozna hibát).

Pontosítanék, csak a <body> részen belül létrehozott változókat stb. látom.

jó:
<html>
<body>
{assign var="a" value="b"}
{$a}
</body>
</html>


rossz:
<html>
{assign var="a" value="b"}
<body>
{$a}
</body>
</html>


kimásoltam az ide vágó részeket, semmi extra beállítás nincs benne.
  1. class Template extends Smarty  
  2. {  
  3.     public function __construct()  
  4.     {  
  5.         parent::__construct();  
  6.   
  7.         $this->template_dir = sfConfig::get('sf_app_dir').'/templates';  
  8.         $this->compile_dir  = sfConfig::get('sf_cache_dir').'/templates';  
  9.         $this->config_dir   = sfConfig::get('sf_app_dir').'/config/smarty';  
  10.         $this->cache_dir    = sfConfig::get('sf_cache_dir');  
  11.   
  12.         if (!file_exists($this->compile_dir))  
  13.         {  
  14.             mkdir($this->compile_dir);  
  15.         }       
  16.   
  17.         $this->registerPlugin("function""show_block"array("Block""handleBlock"));  
  18.   
  19.     }  
  20.   
  21.     public function setTemplateDir($td)  
  22.     {  
  23.         $this->template_dir = $td;  
  24.     }  
  25. }  
  26.   
  27. // compile rész  
  28.   
  29. $tpl = new Template();  
  30. $raw = ...; // template beolvasása  
  31. $content = $tpl->fetch("string:" . $raw);  
5

Nem gondolnám, hogy a smarty

Poetro · 2013. Jan. 3. (Cs), 17.14
Nem gondolnám, hogy a smarty tudná, hogy mi az a body vagy html tag, mivel általános célú templatekezelő. Azaz írhatsz vele XML-t, JSON-t, vagy bármi mást, nem kell a kimenetnek HTML-nek lennie, ezért nem lehet semmilyen feltétel arra, hogy csak a body elemben lehet. Próbáld ki, hogy mi van, ha egy XHTML-es DOCTYPE elemet beraksz az elejére, és azután az assign. Vagy csak a DOCTYPE után raksz pár tucat sortörést stb.
6

Sry, én voltam a fasz,

Kubi · 2013. Jan. 3. (Cs), 17.17
Sry, én voltam a fasz, beismerem, most hogy átnéztem (a kód kimásolásnál), hogy mi történik találtam egy kód részletet ami a body-n kívüli tartalmat kitörli.

Már meg volt az értelme, hogy írtam ide, át néztem azt a kódrészt amihez semmi kedvem nem lett volna :)

Köszi, és bocs