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.

class Template extends Smarty
{
	public function __construct()
	{
		parent::__construct();

		$this->template_dir = sfConfig::get('sf_app_dir').'/templates';
		$this->compile_dir  = sfConfig::get('sf_cache_dir').'/templates';
		$this->config_dir   = sfConfig::get('sf_app_dir').'/config/smarty';
		$this->cache_dir    = sfConfig::get('sf_cache_dir');

		if (!file_exists($this->compile_dir))
		{
			mkdir($this->compile_dir);
		}     

		$this->registerPlugin("function", "show_block", array("Block", "handleBlock"));

	}

	public function setTemplateDir($td)
	{
		$this->template_dir = $td;
	}
}

// compile rész

$tpl = new Template();
$raw = ...; // template beolvasása
$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