How do you sort a PHP array of objects by displayName and output them alphabetically in a smarty template?
if(Tools::getValue("action") == "contacts") {
$config = _PS_CLASS_DIR_ . 'hybridauth/config.php';
require_once(_PS_CLASS_DIR_ . "hybridauth/Hybrid/Auth.php" );
$serviceProvider = Tools::getValue("service");
$hybridauth = new Hybrid_Auth( $config );
$service = $hybridauth->authenticate( $serviceProvider );
$contacts = $service->getUserContacts();
if (is_array($contacts)){
self::$smarty->assign('contacts', $contacts);
self::$smarty->display(_PS_THEME_DIR_.'addressbook.tpl');
}
$service->logout();
die();
}
I was outputting the list like this:
<div id="choose-contacts" class="container">
<div class="info">
<ul class="thumbnails">
{foreach from=$contacts key=k item=contact}
<li class="span3">
<input type="checkbox" id="{$contact->identifier}">
<div class="thumbnail">
<div class="row-fluid team">
{if isset($contact->photoURL)}
<img src="{$contact->photoURL}" onclick="toggle('{$contact->identifier}')"/>
{else}
<img src="{$img_dir}avatar.jpg" onclick="toggle('{$contact->identifier}')" />
{/if}
</div>
<div class="row-fluid">
<h3>
{if ($contact->displayName !== '')}
{$contact->displayName}
{else}
{$contact->email}
{/if}
</h3>
</div>
</div>
</li>
{/foreach}
</ul>
</div>
</div>
but now I'd like to modify it in an alphabetical index..
<div class="container">
<ul class="alpha-nav">
<li><a href="#A">A</a></li>
<li><a href="#B">B</a></li>
...
</ul>
<div class="content-holder">
<div id="A">A</div>
<ul class="content thumbnails">
{foreach from=$contacts key=k item=contact}
<li>
{if ($contact->displayName !== '')}
{$contact->displayName}
{else}
{$contact->email}
{/if}
</li>
</ul>
<div id="B">B</div>
<ul class="content thumbnails">
{foreach from=$contacts key=k item=contact}
<li>
{if ($contact->displayName !== '')}
{$contact->displayName}
{else}
{$contact->email}
{/if}
</li>
</ul>
...
</div>
</div>
<script>
var scrollSpeed = 500,
ease = 'easeOutCubic'
$('ul.alpha-nav a').click(function() {
var id = $(this).attr('href');
$('.content-holder').css('overflow', 'visible');
var offset = $(id).offset().top - 40;
$('.content-holder').css('overflow', 'hidden');
$('.content-holder').animate({ scrollTop: offset},scrollSpeed,ease);
return false;
});
</script>