Vorherige Action [Gelöst]

  • jank jank
    Sternenflotten-Admiral
    0 x
    158 Beiträge
    0 Hilfreiche Beiträge
    16. 11. 2011, 11:03

    Hallo zusammen,
    gibt es einen einfachen Weg die vorherige Action abzufragen?
    Ich würde diese gerne an Fluid übergeben für einen "zurück"-Link.


  • 1
  • Typo3Cuckoo Typo3Cuck...
    Sternenflotten-Admiral
    0 x
    184 Beiträge
    0 Hilfreiche Beiträge
    17. 11. 2011, 13:48

    Hi,

    könntest vielleicht folgendes machen:

    In deinem Controller legst du die Funktion [b]protected function initializeView() {}[/b] an. Die wird im Prinzip bei jedem View als erstes aufgerufen und soll den aktuell aufgerufenen Controller-Namen z.B. in ein Cookie speichern.

    Im Extbase Core Controller [b]Tx_Extbase_MVC_Controller_ActionController[/b] gibt es das Attribut [b]$actionMethodName[/b], welches du in deinem eigenen Controller per [b]$this->actionMethodName[/b] auslesen kannst (da alle Controlle standardmäßig vom [b]ActionController[/b] erben).

    1. <?php
    2. /**
    3.  * Current ActionMethod Name
    4.  * @var string
    5.  */
    6. protected $currentActionMethodName;
    7.  
    8.  
    9. /**
    10.  * The session data container
    11.  * @var array
    12.  */
    13. protected $sessionData = array();
    14.  
    15.  
    16. /**
    17.  * Initializes the view before invoking an action method.
    18.  * Override this method to solve assign variables common for all actions or prepare the view in another way before the action is called.
    19.  * @return void
    20.  */
    21. protected function initializeView() {
    22. $this->currentActionMethodName = $this->actionMethodName;
    23. $this->storeSessionData();
    24. }
    25.  
    26.  
    27. /**
    28.  * Stores data to session
    29.  * @return void
    30.  */
    31. protected function storeSessionData() {
    32. $this->sessionData['currentActionMethodName'] = $this->currentActionMethodName;
    33. $GLOBALS['TSFE']->fe_user->setKey('ses', 'my_session_key', $this->sessionData);
    34. $GLOBALS['TSFE']->fe_user->storeSessionData();
    35. }
    36. ?>

    Mit der folgenden Funktion kannst du dann auf die in der Session gespeicherten Daten wieder zu greifen und auswerten:

    1. <?php
    2. /**
    3.  * Loads data from session
    4.  * @return void
    5.  */
    6. protected function loadSessionData() {
    7. $this->sessionData = $GLOBALS['TSFE']->fe_user->getKey('ses', 'my_session_key');
    8. $this->currentActionMethodName = $this->sessionData['currentActionMethodName'];
    9. }
    10. ?>

    Viel Spaß beim Experimentieren ;)

  • jank jank
    Sternenflotten-Admiral
    0 x
    158 Beiträge
    0 Hilfreiche Beiträge
    18. 11. 2011, 13:41

    Vielen Dank für den Ansatz Typo3Cuckoo!

    Habe es so gelöst wie du geschrieben hast (mit ein paar Anpassungen).

    Im Controller:

    1. /**
    2.  * Action method name of the previous action
    3.  * @var string
    4.  */
    5. protected $previousActionMethodName;
    6.  
    7. /**
    8.  * Initialize the view
    9.  * @return void
    10.  */
    11. protected function initializeView() {
    12. $this->previousActionMethodName = $GLOBALS['TSFE']->fe_user->getKey('ses', 'myExtLastAction');
    13. if($this->actionMethodName !== 'showAction'){
    14. $GLOBALS['TSFE']->fe_user->setKey('ses', 'myExtLastAction', $this->actionMethodName);
    15. $GLOBALS["TSFE"]->fe_user->storeSessionData();
    16. }
    17. }
    18.  
    19. public function showAction(Tx_MyExt_Domain_Model_MyModel $MyModel) {
    20. $this->view->assign('lastAction', substr($this->previousActionMethodName, 0, -6));
    21. $this->view->assign('MyModel', $MyModel);
    22. }

    Und im Fluid Template dann
    1. <f:link.action action="{lastAction}"><f:translate key="tx_myext_domain_model_mymodel.back_to_list" /></f:link.action>

  • Typo3Cuckoo Typo3Cuck...
    Sternenflotten-Admiral
    0 x
    184 Beiträge
    0 Hilfreiche Beiträge
    18. 11. 2011, 14:53

    Gern geschehen! :)

  • 1