Checkout erweitern - s_order_attributes füllen

Moin,

Ich möchte den Checkout um eine Selectbox erweietrn. Ich habe über den Crud-Service bereits in den s_order_attributes die Spalte " paul_order_survey" angelegt. Nun soll beim Abschließen der Bestellung der Wert dorthin übertragen werden, wie macht man das am sinnvollsten?

Hier das GitHub-Repo: GitHub - marcmanusch/PaulCheckoutSurvey

Danke für die Hilfe !

Bei uns im Shop wird es in etwas so gemacht:

class Checkout implements \Enlight\Event\SubscriberInterface
{
	/**
	 * @var DIContainer
	 */
	private $container;


	/**
	 * @param Container $container
	 */
	public function __construct(DIContainer $container)
	{
		$this->container = $container;
	}


	/**
	 * Get the subscribed events.
	 */
	public static function getSubscribedEvents()
	{
		return [
			'Enlight_Controller_Action_PreDispatch_Frontend_Checkout' => 'preDispatchCheckout',
			'Shopware_Modules_Order_SaveOrder_FilterParams' => 'saveOrderFilterParams'
		];
	}


	/**
	 *
	 * @param \Enlight_Event_EventArgs $args
	 *
	 * @Enlight\Event Enlight_Controller_Action_PreDispatch_Frontend_Checkout
	 */
	public function preDispatchCheckout(\Enlight_Event_EventArgs $args)
	{
		$request = $args->getSubject()->Request();

		// Check for payment action
		if (null !== $request->getParam('exhibition_visited', null))
		{
			$exhibition_visited = $request->getParam('exhibition_visited', 0);

			switch ($exhibition_visited)
			{
				case 1:
				case '1':
					$exhibition_visited = 1;
					break;

				case 2:
				case '2':
					$exhibition_visited = 2;
					break;

				default:
					$exhibition_visited = 0;
			}

			$session = $this->container->get('session');
			$session->exhibition_visited = $exhibition_visited;
		}
	}


	/**
	 *
	 * @param \Enlight_Event_EventArgs $args
	 *
	 * @Enlight\Event Shopware_Modules_Order_SaveOrder_FilterParams
	 */
	public function saveOrderFilterParams(\Enlight_Event_EventArgs $args)
	{
		$session = $this->container->get('session');
		$order = $args->getSubject();

		if (null !== $session->get('exhibition_visited'))
		{
			$order->orderAttributes['ms_exhibition_visited'] = $session->get('exhibition_visited', 0);
		}
	}
}

 

1 Like

Kannst du mir den kompletten Code bereitstellen? Das wäre ein Traum!

hab nämlich irgend wie ein Hänger… komme nicht drauf, wie der Wert aus dem Frontend in die Session kommt.

vielen Dank :slight_smile:

Das passiert in der Methode preDispatchCheckout(). Das ist auch der ganze Code. Mehr gibt es da nicht :wink:

Ok… dann stehe ich immer noch auf dem Schlauch …

mit $request->getParam('exhibition_visited… wird ja auf dem Frontend die Variable geholt. 

Wie sieht die Stelle im Frontend aus ? Ich muss ja die Nutzereingabe irgendwie auslesen …

 

danke für deine Hilfe 

Oder einfach im Template wie mit dem sComment? Über data-storageKeyName einen Namen definieren und über getParam holen?

                        {* Additional customer comment for the order *}
                        {block name='frontend_checkout_confirm_comment'}
                            
                                {$sComment|escape}
                            
                        {/block}

  

Anders gefragt: Wie bekomme ich die Nutzereingabe aus dem Frontend (Selectbox) in eine Variable im Controller.

Der Rest funktioniert super. Über data-storageKeyName=„meineVariable“ bin ich nicht weiter gekommen, es landet immer noch im sComment (wieso auch immer).

@arnebecker‍ [@Moritz Naczenski](http://forum.shopware.com/profile/14574/Moritz Naczenski „Moritz Naczenski“)‍

Wäre super, wenn mir jemand einen Tipp geben könnte

Ach sorry. Das wird mit dem Formular im Checkout mit angeschickt:

{extends file='parent:frontend/checkout/confirm.tpl'}

{block name='frontend_checkout_confirm_tos_panel' append}
	
		
			
				{s name='ConfirmExhibitionVisitNo'}Nein{/s}
                {s name='ConfirmExhibitionVisitYes'}Ja{/s}
			
		
	
{/block}

 

1 Like

@arnebecker schrieb:

Ach sorry. Das wird mit dem Formular im Checkout mit angeschickt:

Genau da ist das problem, eben nicht… auch nicht mit deinem Code, da der Block “frontend_checkout_confirm_tos_panel” nicht existiert. Wenn ich mich an den Block “frontend_checkout_confirm_additional_features” hänge klappt es auch nicht

 

EDIT: Über den Block “frontend_checkout_confirm_information_wrapper” klapt es! Vielen Dank!

Plugin ist hier verfügbar:  GitHub - marcmanusch/PaulCheckoutSurvey

@arnebecker‍ , [@Moritz Naczenski](http://forum.shopware.com/profile/14574/Moritz Naczenski “Moritz Naczenski”)‍

ich muss mich leider nochmal melden…wir haben das Plugin nun einige Zeit im Einsatz, jedoch werden bei sehr vielen Bestellungen keine Werte gespeichert. Aus meiner Beobachtung heraus sind das PayPal Express Käufer. An welcher Stelle kann der Wert verloren gehen ?!

 

Mit freundlichen Grüßen 

marc

Danke für das Plugin und die Hilfe! Läuft es heute immer noch bei dir mit der 5.6?

Grüße Gregor 

 

Ja, ist noch genau so im Einsatz