Re: [fw-general] ActionStack and _forward()

2008-11-16 Thread Tim Nagel
You could store something in Zend_Registry, or Zend_Cache (and then wrap the
init logic in an if statement)?


T

On Sun, Nov 16, 2008 at 09:43, drj201 [EMAIL PROTECTED] wrote:



 Goran Juric wrote:
 
 
 
  drj201 wrote:
 
  Hi all,
 
  Ive been following the method outlined here to add Controller specific
  navigation menus to my layout view:
 
  http://teethgrinder.co.uk/perm.php?a=Zend-Framework-Menus-Navigation
 
  Firstly, what is your view on this approach? Adding an actionStack call
  to every controller seems long winded especially if the majority use a
  standard menu i.e. defaultmenuAction in the NavController.
 
  Also using this method I am encountering a problem with the use of
  _forward() in my actions.
 
  When calling a _forward from one action to another within the same
  controller the menu action is added to the actionStack twice (once for
  initial init() and then for each forward). How would you propose I stop
  this easily? Is there a way of detecting if the actionStack currently
 has
  the call to the action in the NavController and thus doesnt add it
 again?
  Back to my original question... is there a better way entirely?
 
  Thanks for your help.
 
  David
 
 
 
  Why don't you use a view helper for this task? You can define and pass
  controller specific actions in the init() method of the controller and
  display them in a view.
 
  Regards,
 
  Goran Juric
  http://gogs.info/
 

 Thanks for your reply. Im not sure I follow your suggestion? What are you
 proposing with the use of a view helper?

 Im trying to follow the example from the Zend_Layout documentation that
 states:

 

 As an example, let's say your code first hits
 FooController::indexAction(),
 which renders some content to the default response segment, and then
 forwards to NavController::menuAction(), which renders content to the 'nav'
 response segment. Finally, you forward to CommentController::fetchAction()
 and fetch some comments, but render those to the default response segment
 as
 well (which appends content to that segment). Your view script could then
 render each separately:

 body
!-- renders /nav/menu --
div id=nav?= $this-layout()-nav ?/div

!-- renders /foo/index + /comment/fetch --
div id=content?= $this-layout()-content ?/div
 /body

 This feature is particularly useful when used in conjunction with the
 ActionStack action helper and plugin, which you can use to setup a stack of
 actions through which to loop, and thus create widgetized pages. 

 

 I have this working based on an example here:

 http://teethgrinder.co.uk/perm.php?a=Zend-Framework-Menus-Navigation

 The problem is that when using a _forward() to another action within the
 same controller the init() gets called every forward thus resulting in the
 $this-_helper-actionStack('menu', 'navigation') getting called every
 time.
 This means the navigation menuAction gets rendered a number of times when
 obviously it only wants to render once...

 So ultimately how can I detect if the current controller init() has been
 called as the result of  a _forward() and thus then not add the menuAction
 to the stack...?

 Also if there is a better simplified way of doing this i'd be enlightened
 to
 know!

 Thanks,

 David




 --
 View this message in context:
 http://www.nabble.com/ActionStack-and-_forward%28%29-tp20469986p20520241.html
  Sent from the Zend Framework mailing list archive at Nabble.com.




Re: [fw-general] ActionStack and _forward()

2008-11-15 Thread drj201


Goran Juric wrote:
 
 
 
 drj201 wrote:
 
 Hi all,
 
 Ive been following the method outlined here to add Controller specific
 navigation menus to my layout view:
 
 http://teethgrinder.co.uk/perm.php?a=Zend-Framework-Menus-Navigation
 
 Firstly, what is your view on this approach? Adding an actionStack call
 to every controller seems long winded especially if the majority use a
 standard menu i.e. defaultmenuAction in the NavController.
 
 Also using this method I am encountering a problem with the use of
 _forward() in my actions.
 
 When calling a _forward from one action to another within the same
 controller the menu action is added to the actionStack twice (once for
 initial init() and then for each forward). How would you propose I stop
 this easily? Is there a way of detecting if the actionStack currently has
 the call to the action in the NavController and thus doesnt add it again?
 Back to my original question... is there a better way entirely?
 
 Thanks for your help.
 
 David
 
 
 
 Why don't you use a view helper for this task? You can define and pass
 controller specific actions in the init() method of the controller and
 display them in a view.
 
 Regards,
 
 Goran Juric
 http://gogs.info/
 

Thanks for your reply. Im not sure I follow your suggestion? What are you
proposing with the use of a view helper? 

Im trying to follow the example from the Zend_Layout documentation that
states:



As an example, let's say your code first hits FooController::indexAction(),
which renders some content to the default response segment, and then
forwards to NavController::menuAction(), which renders content to the 'nav'
response segment. Finally, you forward to CommentController::fetchAction()
and fetch some comments, but render those to the default response segment as
well (which appends content to that segment). Your view script could then
render each separately:

body
!-- renders /nav/menu --
div id=nav?= $this-layout()-nav ?/div

!-- renders /foo/index + /comment/fetch --
div id=content?= $this-layout()-content ?/div
/body

This feature is particularly useful when used in conjunction with the
ActionStack action helper and plugin, which you can use to setup a stack of
actions through which to loop, and thus create widgetized pages. 



I have this working based on an example here:

http://teethgrinder.co.uk/perm.php?a=Zend-Framework-Menus-Navigation

The problem is that when using a _forward() to another action within the
same controller the init() gets called every forward thus resulting in the
$this-_helper-actionStack('menu', 'navigation') getting called every time.
This means the navigation menuAction gets rendered a number of times when
obviously it only wants to render once...

So ultimately how can I detect if the current controller init() has been
called as the result of  a _forward() and thus then not add the menuAction
to the stack...?

Also if there is a better simplified way of doing this i'd be enlightened to
know!

Thanks,

David




-- 
View this message in context: 
http://www.nabble.com/ActionStack-and-_forward%28%29-tp20469986p20520241.html
Sent from the Zend Framework mailing list archive at Nabble.com.



Re: [fw-general] ActionStack and _forward()

2008-11-13 Thread Goran Juric



drj201 wrote:
 
 Hi all,
 
 Ive been following the method outlined here to add Controller specific
 navigation menus to my layout view:
 
 http://teethgrinder.co.uk/perm.php?a=Zend-Framework-Menus-Navigation
 
 Firstly, what is your view on this approach? Adding an actionStack call to
 every controller seems long winded especially if the majority use a
 standard menu i.e. defaultmenuAction in the NavController.
 
 Also using this method I am encountering a problem with the use of
 _forward() in my actions.
 
 When calling a _forward from one action to another within the same
 controller the menu action is added to the actionStack twice (once for
 initial init() and then for each forward). How would you propose I stop
 this easily? Is there a way of detecting if the actionStack currently has
 the call to the action in the NavController and thus doesnt add it again?
 Back to my original question... is there a better way entirely?
 
 Thanks for your help.
 
 David
 


Why don't you use a view helper for this task? You can define and pass
controller specific actions in the init() method of the controller and
display them in a view.

Regards,

Goran Juric
http://gogs.info/
-- 
View this message in context: 
http://www.nabble.com/ActionStack-and-_forward%28%29-tp20469986p20487267.html
Sent from the Zend Framework mailing list archive at Nabble.com.