我正在使用HybridAuth库来显示Gmail中的用户联系人列表。对象成员是displayName,我这样使用它:
{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}
但我还没想好如何正确地做。
我认为您希望实现结果,而不是在Smarty中使用对象语法(如果您想使用对象语法,您应该在PHP中而不是在Smart中进行赋值)。
所以你需要这样做:
{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>
编辑
如果某些记录不包含姓名(正如您在评论中提到的),您可以这样做:
在PHP文件中:
$contacts=数组();
$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>