JS Datei in Plugin einbinden?

Hallo,

ich bin derzeit etwas verwirrt, weil man viele Beispiele in der Dokumentation findet, die Shopware 5 betreffen, aber nicht Shopware 5.2 mit dem neuen Plugin Struktur.

Ich möchte gerne einen Button im Listing implementieren, der bei Click mein eigenes Plugin aufruft um den aktuellen Warenkorb abzufragen.

Nun bin ich dabei erstmal die Plugin Struktur festzulegen und habe damit begonnen:

 'onRouteStartup',
            'Theme_Compiler_Collect_Plugin_Javascript' => 'addJsFiles'
        ];
    }

    public function onRouteStartup(\Enlight_Controller_EventArgs $args)
    {

    }

    public function addJsFiles(Enlight_Event_EventArgs $args)
	{
	    $jsFiles = array( __DIR__. '/Resources/js/fpgetbasket.js');
	    return new Doctrine\Common\Collections\ArrayCollection($jsFiles);
	}

}

Im fpgetbasket.js steht bisher nur alert(„test“);

Dies wird aber nicht ausgegeben. Wo liegt hier der Fehler? Ich habe leider kein Beispiel gefunden, wie ich das korrekt umsetzen muss. Auch die Beispielplugins für 5.2 zeigen dies nicht.

Kann hier jemand helfen?

Danke!

Ich benutze diesen Weg:

use Doctrine\Common\Collections\ArrayCollection;

...

  private function registerEvents() {

    $this->subscribeEvent(
      'Theme_Compiler_Collect_Plugin_Javascript',
      'onCollectJavascriptFiles'
    );

  }


  public function onCollectJavascriptFiles() {
    $jsDir = __DIR__. '/Views/_resources/js/plugin.js';
    return new ArrayCollection( array($jsDir) );
  }

Getestet mit SW 5.2.6

Danke jetzt geht es - in diesem Format:

 

 'onRouteStartup',
             'Theme_Compiler_Collect_Plugin_Javascript' => 'addJsFiles'
        ];
    }

    public function onRouteStartup(\Enlight_Controller_EventArgs $args)
    {

    }

    public function addJsFiles(\Enlight_Event_EventArgs $args)
	{
	    $jsFiles = array( __DIR__. '/Resources/js/fpgetbasket.js');
	    return new ArrayCollection($jsFiles);
	}

}

Noch eine andere Frage:

Ich würde nun in der JS Datei ein eigenes Plugin ablegen - wie greife ich denn von dort z.B. auf diese Funktion zu?

Ich möchte gerne den Warenkorb abfragen, nachdem man den Artikel hinzugefügt hat. Das mache ich am besten in einem JS-Plugin nach Shopware-Konvention, oder?

Das ist mir zu kompliziert, da ich .JS hier nur für zusätzliche jQuerys benutze. Der Warenkorb ist sicher Hookable.

Ok. Danke. Weißt Du zufällig wie man hier den aktuellen Basket zurückgeben kann?

    public function onFrontendPostDispatch(\Enlight_Event_EventArgs $args)
    {

		$controller = $args->get('subject');
		$view = $controller->View();
		$view->assign('basket', '');

 

Ich würde es über Enlight_Controller_Action_PostDispatch_Frontend_Checkout mal versuchen. Kann aber auch sein, dass ich mich irre.

       $basket = $this->get('modules')->Basket();
       
        echo '';
        print_r($basket->sGetBasket());
        echo '';
        die();

versuchs mal damit =) 

Danke.

Ich habe mittlerweile folgende Form:

    

Und mein eigenes JS-Plugin:

;(function($, window) {
    'use strict';

    window.StateManager.addPlugin('*[data-fp-add-article="true"]', 'fbGetBasket');

	// Register your plugin
	$.plugin('fbGetBasket', {
	   defaults: {
		   'eventName': 'click',
		   'addArticleUrl': window.controller['ajax_add_article'],
		   'fpCurrentBasket' : fpCurrentBasket,
		},

	   init: function() {
			var me = this,
			opts = me.opts;
            var $el = me.$el
			this.applyDataAttributes();

....

Wie komme ich denn an die Variable sAdd / sQuantity aus der Form? Die Form wird serialized durch: var ajaxData = $el.serialize(); aber dadurch komme ich nicht an sAdd…?