2014-09-16 5 views
0

J'utilise la bibliothèque HybridAuth pour afficher une liste de contacts de Gmail. Le membre de l'objet est displayName et je l'utilise comme ceci:Explodate variable d'objet dans Smarty

{foreach from=$contacts key=k item=contact} 
    <span class="name">{$contact->displayName}</span> 
{/foreach} 

Je voudrais l'utiliser comme ceci:

{foreach from=$contacts key=k item=contact} 
    <span class="first-name">{$contact-firstName}</span> 
    <span class="last-name">{$contact->lastName}</span> 
{/foreach} 

J'imagine que je pouvais le faire avec regex sans beaucoup de peine, mais Je sais que regex n'est pas la solution préférée. J'ai essayé de trouver quelque chose comme ..

{$contact->strtok(displayName," ")} 

qui retourne

Fatal error : Call to undefined method Hybrid_User_Contact::strtok() 

Je suis maintenant essayer de faire quelque chose comme ça ..

{assign var=$contact value=" "|explode:displayName} 

mais je havre de paix pas compris comment le faire correctement pour le moment.

Répondre

1

Je pense que vous vouliez atteindre le résultat et n'utilisez pas de syntaxe d'objet dans Smarty (et si vous voulez utiliser la syntaxe d'objet, vous devriez plutôt faire une affectation en PHP et non en Smarty).

donc vous devez le faire de cette façon:

{foreach from=$contacts key=k item=contact} 
    {assign var="names" value=" "|explode:$contact->displayName} 
    <span class="first-name">{$names[0]}</span> 
    <span class="last-name">{$names[1]}</span> 
{/foreach} 

Lorsque dans le fichier PHP que j'ai:

$contacts = array(); 

$contact = new stdClass(); 
$contact->displayName = 'Name Surname'; 
$contacts[] = $contact; 
$contact = new stdClass(); 
$contact->displayName = 'Name2 Surname2'; 
$contacts[] = $contact; 
$smarty->assign('contacts',$contacts); 

source HTML sera comme prévu:

<span class="first-name">Name</span> 
<span class="last-name">Surname</span> 
<span class="first-name">Name2</span> 
<span class="last-name">Surname2</span> 

EDIT

Dans le cas si certains dossiers ne contiennent pas le nom et le prénom (comme vous l'avez mentionné dans le commentaire), vous pouvez le faire de cette façon:

dans le fichier PHP:

$ contacts = array();

$contact = new stdClass(); 
$contact->displayName = 'Name Surname'; 
$contacts[] = $contact; 
$contact = new stdClass(); 
$contact->displayName = 'Name2Surname2'; 
$contacts[] = $contact; 
$smarty->assign('contacts',$contacts); 

Dans le fichier Smarty:

{foreach from=$contacts key=k item=contact} 
    {assign var="names" value=" "|explode:$contact->displayName} 

    {if $names|@count eq 2} 
    <span class="first-name">{$names[0]}</span> 
    <span class="last-name">{$names[1]}</span> 
    {else} 
     <span class="name-first-last">{$contact->displayName}</span> 
    {/if} 
{/foreach} 

sortie pour ce sera:

<span class="first-name">Name</span> 
<span class="last-name">Surname</span>   
<span class="name-first-last">Name2Surname2</span> 
+0

Je continue à obtenir une erreur de décalage non définissable car certains d'entre eux ne disposent pas d'un prénom et un nom. J'ai essayé {if (array_key_exists ($ names [1], $ contact-> displayName))} mais ce n'est pas correct. Savez-vous comment je pourrais vérifier pour éviter l'erreur dans les cas où il n'y a pas de nom et prénom? – davidcondrey

+1

@dcc Veuillez regarder la réponse éditée –