Hello,
I want to sort the owner menu. The default is alphabetically. But I want to use the priority value.
That my try, which is not working (priority is ignored - always sorted alphabetically by text value)
elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'tobi_owner_block_menu',1000);
function tobi_owner_block_menu($hook, $type, $return, $params) {
if (elgg_instanceof($params['entity'], 'user')) {
//unset the old ones
$return= array();
$options = array(
'name' => 'agvideoUserVideo',
'text' => elgg_echo('votw_video:videoList').' - '.$params['entity']->name,
'href' => 'agvideo/owner/'.$params['entity']->username,
'priority' => 50,
);
$return[] = ElggMenuItem::factory($options);
$options = array(
'name' => 'agvideoFansOf',
'text' => elgg_echo('votw_video:fans'),
'href' => 'friendsof/'.$params['entity']->username,
'priority' => 100,
);
$return[] = ElggMenuItem::factory($options);
$options = array(
'name' => 'file',
'text' => elgg_echo('votw_video:pictures');,
'href' => 'file/owner/'.$params['entity']->username,
'priority' => 100,
);
$return[] = ElggMenuItem::factory($options);
$options = array(
'name' => 'blog',
'text' => elgg_echo('votw_video:blogs');,
'href' => 'blog/owner/'.$params['entity']->username,
'priority' => 150,
);
$return[] = ElggMenuItem::factory($options);
return $return;
}
}
info@elgg.org
Security issues should be reported to security@elgg.org!
©2014 the Elgg Foundation
Elgg is a registered trademark of Thematic Networks.
Cover image by RaĆ¼l Utrera is used under Creative Commons license.
Icons by Flaticon and FontAwesome.
- ElggCloud@g2w!
ElggCloud - 0 likes
- tobi@telltarget
tobi - 0 likes
- Matt Beckett@Beck24
Matt Beckett - 0 likes
You must log in to post replies.Seems this does not work with setPriority(). However, the following 2 documented methods of ElggMenuItem are doing the same:
setWeight ($priority)
Set the priority of the menu item.
setPriority ($priority)
Set the priority of the menu item
So what on earth is the difference? :-)
Have you tried with setWeight()? this might work.
The priority is part of the EllgMenuItem, but it is not sorted by it.
Now I have done it this way.
I have copied the view "views/default/navigation/menu/default.php" to my plugin under
"myplugin/views/default/navigation/menu/owner_block.php"
Then I added this function to the code to sort the menuitems by priority
function sortOwnerMenu($a, $b)
{
if(is_object($a) AND is_object($b)){
if ($a->getPriority() == $b->getPriority()) {
return 0;
}
return ($a->getPriority() < $b->getPriority()) ? -1 : 1;
}
}
usort($vars['menu']['default'], 'sortOwnerMenu');
This works - but perhaps there is a more "elgg-like" way to do this?
The sort is done during the ElggMenuBuilder::getMenu call: http://reference.elgg.org/1.8/classElggMenuBuilder.html#abfa107901d7c497c1da216e7d14cd4fd
I don't know offhand if there's a way to set this dynamically, but if so, that would be the most elgg-like way I guess.