I have created some nested elements and variables passed in from the controller to each element to decide what to display. It seems to work well for may purposes so far. All the menus are in one place and changes to one file, updates all the pages.
But, is this a good way to do this? as I add more and more controllers and other things, is this going to start to fail? should I be looking at a helper instead?
I would appreciate some feedback on this design.....
I start with a common view
view/common/organization.ctp
<?phpThe leftmenu element defines all the menu options.
echo $this->element('leftmenu');
?>
<div class="organization view">
<h1><?php echo $this->fetch('title'); ?></h1>
<?php echo $this->fetch('content'); ?>
</div>
view/elements/leftmenu.ctp
<?phpThe leftmenu-start is just to define some basic info about how the menu is to be built.
echo $this->element('menus/leftmenu-start');
echo $this->element('menus/leftmenu-user-home' );
echo $this->element('menus/leftmenu-org' );
echo $this->element('menus/leftmenu-member' );
echo $this->element('menus/leftmenu-roles' );
echo $this->element('menus/leftmenu-levels' );
echo $this->element('menus/leftmenu-logout' );
echo $this->element('menus/leftmenu-end');
?>
view/elements/leftmenu-start.ctp
<div class="actions">Then in a specific menu like org - I put all the possible menu items that are related to the controller. The controller creates the variable that has information used by the menu elements to decide what to display or provide needed parameters. Since you can not pass an array into elements, the "assign" function only allows strings, I used getVar to get the parameters.
<h3><?php echo __('Menu'); ?></h3>
<ul>
view/elements/leftmenu-org.ctp
<?php
$menuVars= $this->getVar('menuVars');
$orgId = $menuVars['orgId'];
$member = $menuVars['orgMember'];
$update = $menuVars['orgUpdate'];
$userId = $menuVars['userId'];
?>
<li><?php echo $this->Html->link(__('List ALL Organization'), array('controller' => 'organizations','action' => 'index', 'organization' => $orgId, null)); ?> </li>
<li><?php echo $this->Html->link(__('My Organizations'), array('controller' => 'organizations','action' => 'index', 'organization' => $orgId, $userId)); ?> </li>
<li><?php echo $this->Html->link(__('Add Organization'), array('controller' => 'organizations', 'action' => 'add','organization' => $orgId, $orgId)); ?> </li>
<?php if (!$member) : ?>
<li><?php echo $this->Html->link(__('Join Organization'), array('controller' => 'organizations', 'action' => 'join','organization' => $orgId, $orgId)); ?> </li>
<?php else : ?>
<li><?php echo $this->Html->link(__('Cancel Membership'), array('controller' => 'memberRelationships', 'action' => 'cancel', 'organization' => $orgId, $orgId)); ?> </li>
<?php endif; ?>
In the above example, the controller has the information that the user is a member and if they are not a member, the element will display the "Join" button. But if they are a member, then it will display the "Cancel" button.
The controller just has to put all the information that it knows about and then pass in 'menuVars' using set.
in controller
$this->set('menuVars', $menuVars);Again, this seems to work for the one common layout that I have setup so far. But I now need to start adding and fixing other common layouts to use this same design.
So, before I do a bunch of work, then have to change later, I wanted to get some comments on this design.
If there is a better way to do this, please let me know.
Thanks,
Bill
View this message in context: Is using Elements the best way to build menus?
Sent from the CakePHP mailing list archive at Nabble.com.
--
Our newest site for the community: CakePHP Video Tutorials http://tv.cakephp.org
Check out the new CakePHP Questions site http://ask.cakephp.org and help others with their CakePHP related questions.
To unsubscribe from this group, send email to
cake-php+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php
No comments:
Post a Comment