2011-01-23 3 views
3

J'ai un template smarty où un plugin charge un tableau pour moi. Ce tableau contient des éléments qui sont eux-mêmes des tableaux d'objets stdClass et d'autres éléments qui sont simplement des objets stdClass. Par exemple, je pourrais avoirÉlément spécifique d'accès Smarty du tableau de seconde dimension

Array 
(
[0] => Array 
    (
     [0] => stdClass Object 
      (
       [id] => 1 
       [avatar_file] => joey_thumb.jpg 
       [group] => 0 
       [order_in_group] => 0 
      ) 

     [1] => stdClass Object 
      (
       [id] => 2 
       [avatar_file] => christy_thumb.jpg 
       [group] => 0 
       [order_in_group] => 1 
      ) 

    ) 
[1] => stdClass Object 
    (
     [id] => 11 
     [avatar_file] => angela_thumb.jpg 
     [group] => 
     [order_in_group] => 
    ) 
) 

Dans mon modèle, j'ai quelque chose à l'effet de:

{foreach from=$membersArray item=memberOrGroup} 
    {if is_array($memberOrGroup)} 
<div>{$memberOrGroup[0].id}</div> 
    {else} 
<div>{$memberOrGroup.id}</div> 
    {/if} 
{/foreach} 

Mais dès qu'il frappe tout remplacement normal comme dans mes balises div ci-dessus qui a un Référence de tableau comme $ memberOrGroup [0], j'obtiens l'erreur "Impossible d'utiliser l'objet de type stdClass comme tableau". Je suis en quelque sorte à la fin de ma vie, puisque je peux imprimer le tableau original et il montre les éléments disposés comme ci-dessus. Je peux même print_r à l'intérieur du "is_array" si le bloc utilise {$ memberOrGroup [0] | print) r} et il imprime un objet stdClass rempli avec les bonnes données et ne me donne pas d'erreur.

J'ai vu plusieurs solutions sur le Web qui montrent l'utilisation de boucles foreach imbriquées, mais dans la version réelle de ma boucle, chaque élément du tableau de deuxième dimension doit être placé à un certain endroit ($ memberOrGroup [0 ] a une place spéciale, tout comme $ memberOrGroup [1]).

J'ai essayé plusieurs variantes, y compris l'utilisation de sections à la place, mais je parviens toujours à la même erreur.

Répondre

2

Qu'en est-:

$memberOrGroup[0]->id 
+0

Doh! Je nouveau ça doit être quelque chose de bête! Je n'utilise pas souvent smarty pour savoir ... (.) Est pour les tableaux, (->) est pour les objets. Je t'ai eu! – Matthew

+0

omg .... Est-ce vraiment ça? Cela semble si évident ... – Marnix

3

je devais regarder très difficile, à cause de la syntaxe Smarty, mais je vois que vous ne disposez pas de votre $memberOrGroup à l'intérieur {}. Donc, il devrait être

{foreach from=$membersArray item=memberOrGroup} 
    {if is_array($memberOrGroup)} 
<div>{$memberOrGroup[0].id}</div> 
    {else} 
<div>{$memberOrGroup.id}</div> 
    {/if} 
{/foreach} 

J'espère que cela va le réparer.

+0

Ouais, j'ai juste remarqué que j'avais laissé ceux-ci par accident tout en simplifiant mon cas d'utilisation. J'ai effectivement eu ceux dans mon fichier de modèle. Merci quand même! – Matthew

+0

@Lythithwyn Ok, autre idée: votre stdClass est-elle un tableau peut-être? – Marnix

Questions connexes