[PHP/SMARTY] Object/Array assignen in Smarty template

Pagina: 1
Acties:

Onderwerpen


  • Krukar
  • Registratie: September 2001
  • Laatst online: 17-09 21:23
Ik ben bezig met het maken van een systeem om projecten te maken dmv templates en forms (voor een CMS).

Voor de templates gebruik ik Smarty, dit werkt goed tot het moment dat ik een array of een object wil assignen met $smarty->assign(); Met een 'gewone' var lukt het wel.
Ik heb ontdekt wat het probleem is; smarty unset de objects/arrays als er een smarty functie wordt aangeroepen, ik heb echter geen oplossing ervoor.

Stukje code:

code:
1
2
3
4
elseif ($wichform == "makepages") {
    $get = mysql_query("select * from templates where id='1'") or die ("Er is een probleem met de database");
    $sqloutmenu = mysql_fetch_object($get);
}


$sqloutmenu is dus het object, deze bevat data, dat heb ik geprobeerd met

code:
1
echo $sqloutmenu->menu1;


Op het moment dat ik diezelfde echo voor $smarty->assign(); doe, echo'ed php echter niks.
Ook $smarty->assign(); zelf doet er niets mee:

code:
1
$smarty->assign('menu1', $sqloutmenu->menu1);


Met een gewone var lukt het echter wel:

code:
1
2
3
4
5
6
7
8
if ($wichform) { 
    $get = mysql_query("select * from templates where id='1'");
    while ($row = mysql_fetch_array($get)) {
        $sheader = $row[0];
    }
}

$smarty->assign('header1', $sheader);


Het lijkt erop dat smarty de objecten/arrays filtert na het aanroepen van de eerste smartyfunctie, dit is mijn hele smarty 'stuk':

code:
1
2
3
4
5
6
7
8
9
10
11
12
$smarty = new Smarty; 

$smarty->template_dir = *;
$smarty->compile_dir = *;
$smarty->config_dir = *;
$smarty->cach_dir = *;

$smarty->assign('header1', $sheader);
$smarty->assign('menu1', $sqloutmenu->menu1);
$smarty->display('project1.tpl');
$smarty->unregister_object(smarty);
$smarty->clear_cache('project1.tpl');


* Ik heb de paths even weggelaten

Wat heb ik geprobeerd?
  • Ipv een object een array gebruiken, zelfde probleem
  • Echo tussen de smarty functies, daar wordt nooit iets ge-echo'd
  • Met $smart->register_object() het object geregistreerd en direct in de template de object-var gezet, zelfde probleem.
  • Het object-item in een 'gewone' var gezet, dan werkt het wel.
Iemand die een oplossing weet? Ik wil de data in een object/array omdat er later superveel data inkomt, en dan heb ik liever 1 object/array dan 100 vars oid.

Bvd.

Verwijderd

Kun je het gedeelte van je template (project1.tpl) posten waar de array of het object wordt opgeroepen?

  • Krukar
  • Registratie: September 2001
  • Laatst online: 17-09 21:23
Dit is het gedeelte van de template:

code:
1
2
3
4
5
6
7
<div style="-moz-box-sizing:border-box;box-sizing:border-box;border-
width:0px;width:703px;height:121px;position:absolute;left:24px;right:0px;top:128px;line-height:110px;margin-left:20px;margin-top:20px;">
<table><tr><td>{$menu1|default:"Menu-koppen"}</td><td width="35px">&nbsp;</td><td>{$menu4}</td><td width="35px">&nbsp;</td><td>
{$menu7}</td></tr><tr><td>{$menu2}</td><td width="35px">&nbsp;</td><td>{$menu5}</td><td width="35px">&nbsp;</td><td>{$menu8}</td></tr><tr><td>
{$menu3}</td><td width="35px">&nbsp;</td><td>{$menu6}</td><td 
width="35px">&nbsp;</td><td>{$menu9}</td></tr></table>
</div>

[ Voor 33% gewijzigd door Krukar op 12-08-2004 18:12 ]


  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
PHP:
1
$smarty->unregister_object(smarty);

Wat is dit nou weer?

Verwijderd

Kun je niet beter in een keer de hele array toewijzen ipv menu1/menu2/menu3 individueel:


code:
1
$smarty->assign('menuarray', $sqloutmenu);


en in je template:

code:
1
{$menuarray.menu1}

Acties:
  • 0 Henk 'm!

  • Krukar
  • Registratie: September 2001
  • Laatst online: 17-09 21:23
Skaah schreef op 12 augustus 2004 @ 18:19:
PHP:
1
$smarty->unregister_object(smarty);

Wat is dit nou weer?
Dat is om het object te unregisteren, maar wat heeft dat met het probleem te maken :?
Verwijderd schreef op 12 augustus 2004 @ 18:51:
Kun je niet beter in een keer de hele array toewijzen ipv menu1/menu2/menu3 individueel:


code:
1
$smarty->assign('menuarray', $sqloutmenu);


en in je template:

code:
1
{$menuarray.menu1}
Dit geeft hetzelfde probleem, de array is nog steeds leeg na de eerste smarty-functie (print_r() print niets).

Acties:
  • 0 Henk 'm!

  • Krukar
  • Registratie: September 2001
  • Laatst online: 17-09 21:23
Ondertussen heb ik het probleem opgelost:

De array werd gemaakt in een functie, deze functie hield de arry op één of andere manier local, ook na het aangeven dat de array global moest zijn (vaag :?).

Nu heb ik het array gedeelte buiten de functie gezet en nu werkt het prima.

Ik heb ook meteen mmmuttley zn array toewijzing gebruikt en dat is idd een stuk beter dan 1 voor 1 aanwijzen.

Bedankt voor het meedenken :)
Pagina: 1