2015-04-27 3 views
1

J'ai un modèle d'élément de liste comme ci-dessous:Smarty attribuer une valeur à une variable à l'intérieur modèle inclus

<div class="listing-item"> 
    <div class="photo">{$thumbnail}</div> 
    <div class="title">{$name}</div> 
    <div class="price">{$price} {$currency}</div> 
    <div class="location">{$city}/{$town}</div> 
</div> 

Je compris ce modèle à partir d'un autre fichier de modèle, et l'affecter dans une variable nommée listing_item, comme ci-dessous: maintenant

<div class="listing-box-container clearfix"> 
    {include file="common/product/listing_item.tpl" assign=listing_item} 
</div> 

i ont var une variable nommée listing_item qui détient modèle pour l'élément de liste unique.

Je veux attribuer une valeur à une variable à l'intérieur listing_item comme:

{assign var="$listing_item.thumbnail" value="Sometown"} 

Je ne suis pas des valeurs passign alors que je suis, y compris le modèle parce que je veux utiliser listing_item plusieurs fois si je ne Je veux le charger chaque fois que j'en ai besoin.

L'idée ici est d'inclure le modèle une fois, et d'affecter des valeurs & echo où il le fallait. Alors, comment puis-je affecter une valeur à une variable dans un modèle qui a déjà été inclus et affecté à une variable?

Ou, quelle est la meilleure pratique pour archiver mes besoins dans smarty?

Toute aide sera très appréciée

Répondre

1

Si vous utilisez smarty3 Vous pouvez utiliser cette constuct:

{$listing_item = [ 
    'thumbnail' => 'some_thumbnail', 
    'title' => 'some_title', 
    'price' => 'some_price' 
]} 

En savoir plus sur les variables de syntaxe ici http://www.smarty.net/docs/en/language.syntax.variables.tpl

passer maintenant au modèle:

<div class="listing-box-container clearfix"> 
    {include file="common/product/listing_item.tpl" listing_item=$listing_item} 
</div> 

Et dans le te utilisation de mplate:

<div class="listing-item"> 
    <div class="photo">{$listing_item.thumbnail}</div> 
    <div class="title">{$listing_item.name}</div> 
    <div class="price">{$listing_item.price} {$listing_item.currency}</div> 
    <div class="location">{$listing_item.city}/{$listing_item.town}</div> 
</div> 
+0

merci pour votre réponse. J'ai contacté les gars sur smarty irc et Thay m'a dit que lorsque vous assignez quelque chose à une variable, il est rendu. vous ne pouvez donc pas attribuer de valeur à une variable dans une variable. parce qu'il n'y a pas de variable à l'intérieur de la variable thats qui contient le modèle. c'est juste rendu le texte maintenant. et ils m'ont dit que lorsque vous incluez un modèle, il se charge une fois qu'il est mis en cache. comprend en outre ignoré. donc il n'y a pas de pénalité de performance. C'est exactement ce que je cherchais. smarty le faire automatiquement. – Yarimadam