2014-09-16 8 views
0

Я использую библиотеку HybridAuth для отображения списка контактов пользователя из Gmail. Член объект DISPLAYNAME, и я использую его так:Explode object variable в Smarty

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

Я хотел бы использовать его как это:

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

Я полагаю, я мог бы сделать это с помощью регулярных выражений без особых проблем, но Я знаю, что регулярное выражение не является предпочтительным решением. Я пытался понять, что-то вроде ..

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

который возвращает

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

Я сейчас пытаюсь сделать что-то вроде этого ..

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

но я убежищем Пока не понял, как это сделать.

ответ

1

Я думаю, что вы хотели достичь результата, а не использовать синтаксис объекта в Smarty (и в случае, если вы хотите использовать синтаксис объекта, вам лучше делать назначение в PHP, а не в Smarty).

Так что вам нужно сделать это таким образом:

{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} 

Когда в PHP файл у меня есть:

$contacts = array(); 

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

источник HTML будет, как вы ожидаете:

<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

В случае, если некоторые записи не содержат имя и фамилию (как вы упомянули в комментарии) вы могли бы сделать это следующим образом:

в PHP файле:

$ контакты = Array();

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

В 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} 

Выход для этого будет:

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

я получаю неопределенная ошибка смещения, потому что некоторые из них не имеют имя и фамилию. Я попробовал {if (array_key_exists ($ names [1], $ contact-> displayName))}, но это неверно. Знаете ли вы, как я мог проверить это, чтобы избежать ошибки в случаях, когда нет имени и фамилии? – davidcondrey

+1

@dcc Пожалуйста, посмотрите отредактированный ответ –