Autor Zpráva
maks
Profil
ahoj,

chtěl bych se zeptat, jak lze v šabloně předat výsledek pole z PHP do Smarty proměnné.

{php}
$query = ".....";
	$query = mysql_query($query);
	if (mysql_num_rows($query) != 0) {
		$i = 0;
		while($row = mysql_fetch_assoc($query)) {
			foreach($row as $key => $value) {
				$data[$i][$key] = $value;
			}
			$i++;
		}
		// var_dump($data) -- pole je plné
	}

}
{/php}
{assign var='data' value=$data} <!-- tady už je pole $data prázdné -->
{assign array='data' value=$data} <!-- tohle jsem někde našel, ale taky nejde -->


To PHP mezi {php} má svůj význam, nechci zasahovat do PHP souborů a udělat jeden dotaz na DB přímo ze šablony. Možná to není to pravé ořechové, ale i kdybych to nepotřeboval takto, moje otázka by zněla stejně: Jak předat pole z PHP do Smarty?

Děkuji
AM_
Profil
maks:
To PHP mezi {php} má svůj význam, nechci zasahovat do PHP souborů a udělat jeden dotaz na DB přímo ze šablony
Smysl Smarty a obecně šablon je právě to, aby PHP bylo při psaní šablony mimo hru.

{assign var='data' value=$data}
Opravdu toto něco dělá? je to totéž, jako napsat $data=$data;
Pole jako každá jiná proměnná se do smarty přiřazuje pomocí $smarty_object->assign(name, value); Nejsem si jistý, jak se referencuje aktuální šablona uvnitř {php}{/php} bloku, nikdy jsem PHP bloky do šablony necpal. možná pomocí $this.
maks
Profil
AM:
Smysl Smarty a obecně šablon je právě to, aby PHP bylo při psaní šablony mimo hru.
já vím, ale tak nechtěl jsem se do PHP souborů vrtat.

Opravdu toto něco dělá? je to totéž, jako napsat $data=$data;
nedělá. Vycházel jsem z toho, že {assign var='data' value=data_text} přiřadí Smarty proměnné hodnotu "data_text" a předpokládal jsem, že místo prostého textu, bych tam mohl dát proměnnou. Asi má úvaha byla špatná, neboť PHP proměnná se tam nenaplní.
AM_
Profil
maks:
já vím, ale tak nechtěl jsem se do PHP souborů vrtat.
To je asi jako přilepit na zeď obrázek izolepou, protože nechceš vrtat do zdi.

nedělá. Vycházel jsem z toho, že {assign var='data' value=data_text} přiřadí Smarty proměnné hodnotu "data_text" a předpokládal jsem, že místo prostého textu, bych tam mohl dát proměnnou. Asi má úvaha byla špatná, neboť PHP proměnná se tam nenaplní.
dělá.
$data='data_text';

toto také v PHP přiřadí proměnné hodnotu "data_text". Můžeš tam ale dát proměnnou:
$data=$data;

a jsme u toho.
V případě konstrukce {assign} $data je SMARTY proměnná, nikoli proměnná z globálního scope v PHP. Na obou stranách.
maks
Profil
AM:
V případě konstrukce {assign} $data je SMARTY proměnná, nikoli proměnná z globálního scope v PHP. Na obou stranách.
tím se ledacos vysvětluje :o)

Existuje tedy jiný způsob naplnění pole? Třeba
{assign var='data[]' values="a, b"}
Toto je jen nástřel, jak bych si to představoval. Přece musí jít pole vytvořit (a třeba taky ne, když o tom nikdo nikde nepíše :o)).
AM_
Profil
maks:
Existuje tedy jiný způsob naplnění pole?
Nevím. Každopádně je to proti logice Smarty, šablona zajišťuje pouze zobrazovací logiku, tedy vyplňování proměnných je spíše výjimka, natož pak konstruování polí.

Přece musí jít pole vytvořit
Proč by muselo?
- ani tvůrci Smarty nejsou dokonalí, a vzhledem k tomu že konstrukce pole přímo v šabloně není zrovna šťastná věc, ji možná neimplementovali
- vždy můžeš pole vytvořit v PHP a to Smarty předat

Smarty prostě slouží pro zobrazování dat, a divit se, proč v něm nejdou dělat takové kejkle, je jako divit se, proč na kalašnikov rusové nemontovali ostří, aby jsi si s ním mohl krájet chleba.
Lamicz
Profil
maks:
To nemusim vubec Smarty pouzivat, ne? V jednom souboru spagetti budu mit i bez nej a navic kratsi. To je prave o tom, ze ty mas DVA soubory (aspon) a v jednom naplnis pres PHP promenne a ve druhem je zobrazis pres Smarty.

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: