[Gelöst] Eine Variable per assign() an das Template geben (bei ajaxcall)

Hallo Leute,

weiß nicht ob das vielleicht eine blöde Frage ist, aber weiß jemand wieso der hier, per assign(), übergebene String nicht im Template ankommt?

    /**
     * @return array
     */
    public static function getSubscribedEvents()
    {
        return [
            'Enlight_Controller_Action_PreDispatch_Frontend_Checkout' => 'beforeAddArticle',
            'Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout' => 'afterAddArticle'
        ];
    }

    /**
     * @param \Enlight_Event_EventArgs $args
     */
    public function beforeAddArticle(\Enlight_Event_EventArgs $args)
    {
        $controller = $args->get('subject');
        $request = $controller->Request();
        $view = $controller->View();

        if($request->getActionName() == 'addArticle')
        {
            $view->assign('test', 'DIES IST EIN TEST');
            echo '';
            print_r(get_class_methods(get_class($view)));
            echo '';
        }
    }

    /**
     * @param \Enlight_Event_EventArgs $args
     */
    public function afterAddArticle(\Enlight_Event_EventArgs $args)
    {
        $controller = $args->get('subject');
        $request = $controller->Request();
        $view = $controller->View();

        if($request->getActionName() == 'addArticle')
        {
            $view->assign('test', 'DIES IST EIN TEST');
        }
    }

 

Und in der ajax_add_article.tpl:

    {block name='checkout_ajax_add_error'}
        {$smarty.block.parent}
        
            {include file="frontend/_includes/messages.tpl" type="info" content="test->{$test}"}
        
    {/block}

 

Aber die Ausgabe sieht dann leider so aus:

 

Danke im Voraus für etwaige Ideen :))

In der addArticle action werden bloß die Artikel hinzugefügt und dann wird forwarded. Bei einem forward gehen alle Template Variabeln weg. Du musst wenn dann die Variable nach dem Forward assignen :slight_smile:

1 „Gefällt mir“

Hi @Shyim‍,

vielen Dank für den Ansatz  Thumb-Up ich bin dem Ganzen weiter gefolgt und irgendwie endet es hier:

    /**
     * Ajax add article action
     *
     * This action will get redirected from the default addArticleAction
     * when the request was an AJAX request.
     */
    public function ajaxAddArticleAction()
    {
        die('#######');
        // Empty but can't be removed for legacy reasons
    }

Da hänge ich nun fest (das die() ist natürlich von mir  Grin ) Weißt du wie es von da aus weiter geht?

Schönes Wochenende erstmal :slight_smile:

Dump dir mal $request->getActionName() dann solltest du wissen welche Action wirklich aufgerufen wird

2 „Gefällt mir“

Hallo Leute,

da hab ich den Wald vor lauter Bäumen nicht gesehen  Grin die Action nach der man abfragen muss in dem Fall ist genau die mit der man in der Methode ajaxAddArticleAction() landet - damit klappts:

if($request->getActionName() === 'ajax_add_article')
{
    $view->assign('test', 'DIES IST EIN TEST');
}

Danke für die Hilfe @Shyim‍

1 „Gefällt mir“