WÄHREND einer Bestellung der Bestellung ein Bild hinzufügen

@sschreier schrieb:

@HolleWolle schrieb:

Mhm, also, ich habe nun mal für reine Testzwecke dieses Plugin geschrieben:

‚startrampe‘
];
}
public function startrampe (\Enlight_Controller_EventArgs $args)
{
if(isset($_GET[„thumburl“]))
{
?>

Abgelegt in custom/plugins/OziArtikelInWarenkorb/, im Backend installiert, läuft, allerdings erst richtig nachdem ich das Event von Enlight_Controller_Action_PostDispatchSecure_Frontend_Checkout (damit geriet ich in eine Endlosschleife) in Enlight_Controller_Action_Frontend_Checkout_Cart geändert habe. So, nun mal weitersehen…
 

Beste Grüße
Olli

Hallo,

auch wenn du jetzt das Event nutzt - dein HTML- und JavaScript - Code gehört in eine Template - Datei und nirgendswo anders hin. Das ist also komplett falsch, wie du es jetzt machst und wird so nie (richtig) funktionieren. Ebenso wird $_GET nicht funktionieren, wenn du das Plugin einmal über den Shopware Store vertreiben möchtest (wenn man jetzt einmal die Sicherheitsrisiken ausblendet).

Beste Grüße

Sebastian

Um Himmels Willen, ich will doch nichts vertreiben. :smiley:
Das JS und HTML soll natürlich noch verschwinden. Im Moment weiß ich da noch keine andere Lösung, Ich muss mich halt Schritt für Schritt vorarbeiten. Warte auf das Deutsche Handbuch. :wink:
Ohne $_GET wird natürlich schwierig, da ich die benötigten Variablen ja über eine Callback-URL erhalte…

@sschreier schrieb:

 Nimm dir doch einfach einmal die Shopware - Dokumentationen zur Hand und arbeite die durch: https://developers.shopware.com/developers-guide/plugin-system/ . Alles andere wird doch nie etwas brauchbares werden.

Gerade diese Doku über plugins habe ich angefangen durchzuarbeiten. Da komme ich aber nicht weit und ich verstehe nur noch Bahnhof, da in meinen Augen vieles nur lückenhaft, unklar und mit fehlenden Zusammenhängen erklärt wird. Deshalb hoffe ich ja auch auf das Deutsche Handbuch. Bin eigentlich 80% der Zeit nur am recherchieren und lesen. Aber finde da bisher shopware im Vergleich zu vielen anderen Systemen nicht so gut dokumentiert für Nichtexperten. Und das größte Problem ist, dass ein Großteil aller Dokumentationen mittlerweile nicht mehr einsetzbare Elemente / Anleitungen usw. enthalten.

Also, ich versuche wirklich mich durchzuackern, aber komme nicht wirklich weiter.
Sitze jetzt den zweiten Tag daran, um eine Arbeit, die mich normalerweise eine Minute Zeit kostet, durchzuführen. Ein absolut simples update der Tabelle „s_order_basket_attributes“. Erstmal zum Testen einfach nur einen Schmarrn da reinschreiben. Gefühlt habe ich jetzt schon 500 verschiedene Varianten probiert, es kommen aber immer wieder nur Fehlermeldungen zurück inkl. weißen Seiten in Front- und Backend.
Früher ging das so: Verbindung zur DB herstellen und dann diese eine Zeile hier:

 

$erfolg = mysql_query("UPDATE tabelle SET datum='$datum',ort='$ort',strasse='$strasse',stadt='$stadt',stueck='$stueck'
							WHERE dateID = '$updater->dateID' ") or die("Datenbankabfrage gescheitert");

Es geht mir nun wirklich explizit nur um diese eine Aktion.
Mein aktueller Versuch sieht nun so aus:
 

$this->db->executeUpdate(
                "UPDATE s_order_basket_attributes SET basketID = ?, id = ?, attribute1 = ? WHERE basketID = ?",
                array($insertId, $insertId, $thumburl, $insertId));

 

Und das komplette Skript:
 

 'startrampe'
        ];
    }
	public function startrampe (\Enlight_Controller_EventArgs $args)
	{
		if(isset($_GET["thumburl"]))
		{
			?>
			
			<!--
			function getUrlVars() 
			{
				var vars = {};
				var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) 
				{
					vars[key] = value;
				});
				return vars;
			}
			var dieid = getUrlVars()["thumburl"];
			//-->
			
			
			Bootstrap()->loadResource('Zend');
			Shopware()->Bootstrap()->loadResource('Db');
			Shopware()->Bootstrap()->loadResource('Plugins');
			Shopware()->Bootstrap()->loadResource('Session');
						        
			Shopware()->Plugins()->Core()->ErrorHandler()->registerErrorHandler(E_ALL | E_STRICT);
			
			/* ARTIKKEL IN DEN WARENKORB */
			$thumburl = $_GET["thumburl"];
			Shopware()->Modules()->Basket()->sAddArticle($thumburl);
			
			$this->db->executeUpdate(
                "UPDATE s_order_basket_attributes SET basketID = ?, id = ?, attribute1 = ? WHERE basketID = ?",
                array($insertId, $insertId, $thumburl, $insertId));
			?>
			
			
			<!--
			window.top.location="http://www.xxx.com/checkout/cart/";
			//-->

 

Ach ja, da mir die Variable thumburl später in einem iframe übergeben wird (anders als mit iframe lässt sich das absolut nicht regeln), muss dieser iframe nach dem callback „gesprengt werden“. Deshalb auch die JS-Elemente, denn bisher ist mir nichts in php, html, smarty usw. bekannt das einen iframe sprengen könnte.
Das funktioniert auch alles soweit nur das winzige Update der Tabelle s_order_basket_attributes gelingt mir einfach nicht. :frowning:

Beste Grüße
Olli

@HolleWolle schrieb:

Also, ich versuche wirklich mich durchzuackern, aber komme nicht wirklich weiter.
Sitze jetzt den zweiten Tag daran, um eine Arbeit, die mich normalerweise eine Minute Zeit kostet, durchzuführen. Ein absolut simples update der Tabelle „s_order_basket_attributes“. Erstmal zum Testen einfach nur einen Schmarrn da reinschreiben. Gefühlt habe ich jetzt schon 500 verschiedene Varianten probiert, es kommen aber immer wieder nur Fehlermeldungen zurück inkl. weißen Seiten in Front- und Backend.
Früher ging das so: Verbindung zur DB herstellen und dann diese eine Zeile hier:

 

$erfolg = mysql_query("UPDATE tabelle SET datum=‚$datum‘,ort=‚$ort‘,strasse=‚$strasse‘,stadt=‚$stadt‘,stueck=‚$stueck‘
WHERE dateID = ‚$updater->dateID‘ ") or die(„Datenbankabfrage gescheitert“);

Es geht mir nun wirklich explizit nur um diese eine Aktion.
Mein aktueller Versuch sieht nun so aus:
 

$this->db->executeUpdate(
„UPDATE s_order_basket_attributes SET basketID = ?, id = ?, attribute1 = ? WHERE basketID = ?“,
array($insertId, $insertId, $thumburl, $insertId));

 

Und das komplette Skript:
 

‚startrampe‘
];
}
public function startrampe (\Enlight_Controller_EventArgs $args)
{
if(isset($_GET[„thumburl“]))
{
?>

Bootstrap()->loadResource(‚Zend‘);
Shopware()->Bootstrap()->loadResource(‚Db‘);
Shopware()->Bootstrap()->loadResource(‚Plugins‘);
Shopware()->Bootstrap()->loadResource(‚Session‘);

Shopware()->Plugins()->Core()->ErrorHandler()->registerErrorHandler(E_ALL | E_STRICT);

/* ARTIKKEL IN DEN WARENKORB */
$thumburl = $_GET[„thumburl“];
Shopware()->Modules()->Basket()->sAddArticle($thumburl);

$this->db->executeUpdate(
„UPDATE s_order_basket_attributes SET basketID = ?, id = ?, attribute1 = ? WHERE basketID = ?“,
array($insertId, $insertId, $thumburl, $insertId));
?>

 

Ach ja, da mir die Variable thumburl später in einem iframe übergeben wird (anders als mit iframe lässt sich das absolut nicht regeln), muss dieser iframe nach dem callback „gesprengt werden“. Deshalb auch die JS-Elemente, denn bisher ist mir nichts in php, html, smarty usw. bekannt das einen iframe sprengen könnte.
Das funktioniert auch alles soweit nur das winzige Update der Tabelle s_order_basket_attributes gelingt mir einfach nicht. :frowning:

Beste Grüße
Olli

Hallo,

alles was du in der Funktion startrampe() drin hast, ist ja auch „Schrott“ und wird nie funktionieren und kann nur zu Fehlermeldungen führen. Alleine weil das ganze HTML in Template - Dateien gehört und in deiner Funktion so weder verarbeitet noch überhaupt ausgegeben oder berücksichtigt wird und vollkommen fehl am Platze ist. Es gehört dort einfach schlichtweg überhaupt nicht hin.

Das gleiche gilt für deine Datenbankabfragen, das geht in Shopware mit diesen Funktionen überhaupt nicht. Keine Ahnung, wo du dir den Code her geholt hast, aber sicherlich nicht aus offiziellen Quellen.

Wie gesagt - alles was du benötigst, findest du in dem Entwickler - Handbuch oder in den offiziellen Shopware Dokumentationen (beispielsweise hier für das alte System: Shopware 5 Plugin update guide oder hier für das neue System: https://developers.shopware.com/developers-guide/plugin-system/ ). Dort ist das verständlich und gut erklärt. Dein „ich versuch mal irgendwas, was zwar überhaupt nicht in Shopware so funktionieren kann und darf, aber in PHP tut es das ja“ bringt weder dich noch irgendjemanden weiter.

Beste Grüße

Sebastian

Hallo Sebastian,

das, was da bisher an Code steht habe ich aus z.b. der sOrder.php oder der sBasket.php - nur auf meine Tabelle angepasst, aus den shopware Dokus und dem Handbuch. Nach wie vor finde ich nichts im Handbuch oder den Dokumentationen was mir bei diesem Problem wirklich gezielt weiterhilft. Nach wie vor lese ich die meiste Zeit, aber wie gesagt ist das wenig hilfreich. Selbst direkt - nur zum Testen - aus dem Handbuch abgeschriebener Quelltext führt lediglich zu Fehlermeldungen. Ich finde aber immer wieder mal threads mit Themen die meinem sehr ähneln und keiner davon endet mit konstruktiven Antworten oder gar einer Lösung. Das kommt mir schon etwas merkwürdig vor. :wink:
Aber ich gebe nicht auf , auch wenn ich für die an Einfachheit nicht mehr zu überbietende MySql Abfrage eine Woche brauche. Ich muss halt von keep it simple auf keep it complicated umdenken. :wink:

Ich warte schon gespannt auf die Developer Schulung, vielleicht hilft das ja weiter.

Beste Grüße
Olli

Naja hat schon seinen Grund, das Forum bringt kein Geld ein.

Das neue Developer-Handbuch kann man übrigens auch nicht wirklich brauchen, weil es teils die gleichen Lücken lässt die auch die Doku hat, und zudem nach dem Schema “wir haben da ein Plugin, das sich von Kapitel 1 bis Ende durchzieht und versuchen da zu jedem Thema was halbweg sinnloses dazuflnaschen” - es ist --kein-- Referenzwerk, es ist viel mehr ein Plugin-Schreib-Lernbuch, das sich auf dieses Beispiel bezieht und die Kapitel sind nicht losgelöst und problembezogen zu lesen.

Ich hätte mir ein Referenzwerk gewünscht, Auflistungen sinnvoller Events, endlich mal vollständige, komplette Listen bzgl. der REST-Api.

Es ist leider weiterhin ständig “lies den Quellcode” - die Doku und das Buch bringt dich nur bei ganz simplen Standardproblemen weiter.

Das Problem ist, du schaust dir Shopsysteme an, sagst dir, das scheint modern programmiert zu sein, überfliegst die Doku, lässt dich von Optik und der oberflächlichen Struktur täuschen, aber wenn du dann mal hands on reintauchst, merkst du das fast alle Wiki-Seiten irgendwie so halb angefangen wurden und nicht vollständig sind, für die alte Version, oder wie auch immer.

Mit Magento oder Oxid wäre ich schon ewig fertig gewesen, das hab ich jetzt schmerzlich lernen müssen. Gut, Shopware ist noch vergleichweise jung, und das ganze ist einfach dem Alter des Projekts geschuldet, schade das ich das zu spät bemerkt habe.

@MarkusM schrieb:

Ich hätte mir ein Referenzwerk gewünscht, Auflistungen sinnvoller Events, endlich mal vollständige, komplette Listen bzgl. der REST-Api.

Da Empfehle ich im angesprochenen Buch den Anhang B.2: Übersicht über wichtige Shopware Events und REST API - Basics;

Sowohl Buch als auch Doku bringen anhand von simplen Standardproblemen das Konzept der Software näher. Konkrete Probleme wirst du immer selbst lösen müssen.

Hallo zusammen,

es ist ja keineswegs so, dass keine Lernbereitschaft vorhanden ist. Also habe ich mir mal wieder das Handbuch für Entwickler in seiner neusten Ausgabe zur Hand genommen und einfach nur zu Testzwecken folgende sql-Sequenz aus dem Buch übernommen:

 

/** @var \doctrine\DBAL\Connection $connection */
$connection = $container->get('dbal_connection');
$sql = 'SELECT COUNT(id) as count FROM s_articles';
$result = $connection->query($sql)->fetch();
echo $result['count'];

Also, versucht das PDO-Objekt zu benutzen um eine simple sql-Abfrage durchzuführen. Wiederum eine Sache, die prinzipiell an Einfachheit nicht zu toppen ist. Und es geht ja im Prinzip bei mir im Moment nur darum, eine einzige winzige sql-Abfrage durchzuführen. Das Skript soll erstmal laufen, schön machen kann ich es dann immer noch. Aber auch das direkte Übernehmen aus dem Buch erzeugt wieder nur eine Fehlermeldung:

503 Service Unavailable

Eigentlich kein Wunder, da ich in meiner brandneuen shopware Installation (5.2.16) keinen Ordner DBAL finden kann. Habe das Teil aber einfach entpackt und auf den Server hochgeladen. Was nun? Googlen, Forum durchsuchen ohne brauchbares Ergebnis. Wie gesagt es geht nur um eine einfache sql-Abfrage…

Beste Grüße
Olli

Edit: Ach doch, hier ist ein DBAL Ordner: \files\update\files\engine\Shopware\Bundle\StoreFrontBundle\Gateway\DBAL, ein leerer Ordner

Was sagt denn dein Errorlog dazu? Nur mit 503 kann dir niemand weiterhelfen.

Wo hast du den Code hinkopiert? Gibt es da überhaupt die $container Variable?

Den Ordner den du suchst findest du unter vendor/doctrine/dbal

Oh stimmt, da ist der Ordner ja tatsächlich. Sorry, das war mein Fehler.

Der errorlog sagt sowas:

2017-02-08 12:04:43Warning82.82.106.61
mod_fcgid: stderr: PHP Fatal error: Call to a member function get() on null in /var/www/vhosts/xxx/httpdocs/xxx/custom/plugins/OziArtikelInWarenkorb/OziArtikelInWarenkorb.php on line 35

Apache-Fehler

Das liegt also wirklich an dieser Zeile hier:

$connection = $container->get(‘dbal_connection’);

Bei container bin ich von einer globalen Variable ausgegangen, die überall bekannt ist?
Hinkopiert habe ich den Code in mein plugin.

Nein, $container ist keine globale Variable.

Und „in mein plugin“ kann auch alles mögliche sein…

Versuch mal $container = Shopware()->Container(); vor den Code zu setzen… das müsste glaube ich überall funktionieren.

Mit $connection = $this->container->get(‘dbal_connection’); gibt es keine Fehlermeldung mehr, die Seite wird wieder geladen, das automatische Adden des per URL übergebenen Artikels funktioniert auch, nur die natürlich unsinnige Ausgabe von

echo $result['count'];

erscheint nirgendwo.
Der Sinn und die Schönheit, Sicherheit usw. spielen im Moment wie gesagt keine Rolle, es geht nur darum zu lernen wie komme ich sinnvoll ins Rollen und dann wird ausgefeilt.
Bei dem Symfony Profiler kann ich leider nicht die Variablen der Seite finden.

Das plugin sieht zur Zeit so aus:
 

 'startrampe'
        ];
    }
	public function startrampe (\Enlight_Controller_EventArgs $args)
	{
		if(isset($_GET["thumburl"]))
		{
			?>
			
				<!--
				function getUrlVars() 
				{
					var vars = {};
					var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) 
					{	
						vars[key] = value;
					});
					return vars;
				}
				var dieid = getUrlVars()["thumburl"];
				//-->
			
			
			container->get('dbal_connection');/*$container->get('dbal_connection');*/
			$sql = 'SELECT COUNT(id) as count FROM s_articles';
			$result = $connection->query($sql)->fetch();
			$i=1;
			while ($i<100)
			{
				echo $result['count'];
				$i++;
			}
			
			/* ARTIKKEL IN DEN WARENKORB */
			$thumburl = $_GET["thumburl"];
			Shopware()->Modules()->Basket()->sAddArticle($thumburl);
			
			/*$sql = "UPDATE s_order_basket_attributes SET id=id,basketID=basketID,attribute1= 'Ach Du je' WHERE basketID='12' ";*/
			/*$result = $connection->query($sql)->fetch;*/
			?>
			
			
				<!--
				/*window.top.location="http://www.xxx.com/checkout/addArticle/sAdd/"+dieid;*/
				window.top.location="http://www.xxx.com/checkout/cart/";
				//-->

 

Wirf mal die ganzen schließenden und wieder öffnenden

tags raus, die haben da nichts zu suchen…

Bin mir gerade nicht mehr ganz sicher was mit ausgaben direkt im code passiert wenn später das smarty template darüber gerendert wird… theoretisch müsstest du die ausgabe entweder ganz am anfang oder ganz am ende des Quellcodes der Seite sehen… alternativ ein die(); nach dem echo sollte auf jeden fall funktionieren.

Ansonsten kann es natürlich noch sein, dass $_GET[‘thumburl’] nicht true ist, gib davor mal irgendwas aus.

Genau, im Quellcode habe ich auch kontrolliert, aber da war nichts zu finden. Aber da das eh nur Quatsch war um rumzutesten, habe ich nun die eigentlich gewünschte Abfrage eingesetzt und siehe da: Es funktioniert endlich. Ich kann in der Tabelle s_order_basket_attributes endlch erfolgreich das Attribut1 mit Inhalt füllen…

 

 'startrampe'
        ];
    }
	public function startrampe (\Enlight_Controller_EventArgs $args)
	{
		if(isset($_GET["thumburl"]))
		{
			?>
			
				<!--
				function getUrlVars() 
				{
					var vars = {};
					var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) 
					{	
						vars[key] = value;
					});
					return vars;
				}
				var dieid = getUrlVars()["thumburl"];
				//-->
			
			container->get('dbal_connection');
			
			$sql2 = 'UPDATE s_order_basket_attributes SET id=id,basketID=basketID,attribute1= "Eine Testeingabe ohne Sinn" WHERE basketID=12';
			$result2 = $connection->query($sql2);
						
			/* ARTIKKEL IN DEN WARENKORB */
			$thumburl = $_GET["thumburl"];
			Shopware()->Modules()->Basket()->sAddArticle($thumburl);
			?>
			
				<!--
				/*window.top.location="http://www.xxx.com/checkout/addArticle/sAdd/"+dieid;*/
				window.top.location="http://www.xxx.com/checkout/cart/";
				//-->

Die php-tags rausnehmen geht noch nicht, da ich ja immer noch das JS im Quellcode habe. Aber das will ich nun endlich verbannen. Und jetzt muss ich das Ganze noch dynamischer bekommen. Mit der $thumburl klappt definitiv. Da ist im Moment noch die Artikelnummer hinter verborgen, die ich im Moment noch händisch per URL übergebe. Später erhalte ich ja in einem iframe unter der Artikeldetailansicht über einen Callback die thumburl und deren Inhalt soll dann in die Tabelle s_order_basket_attributes eingetragen werden - zu dem Artikel, der gerade im iframe angepasst wurde und dann über den Bestellbutton im iframe, der in dem Sinne nichts mit meinem Shop direkt zu tun hat, bestellt wurde.

Also ich glaube der Schrottfaktor hat doch nun schon stark abgenommen oder  sehe ich das falsch?
Ok, die iframe-Sprengung muss ich noch rausbekommen, dann die sql-queries gegen injection schützen. Aber eins nach dem anderen. Ich bin ja erstmal froh, dass überhaupt mal was ins Rollen kommt:

 

 'startrampe'
        ];
    }
	public function startrampe (\Enlight_Controller_EventArgs $args)
	{
		if(isset($_GET["thumburl"]))
		{
			/** @var \doctrine\DBAL\Connections $connection */
			$connection = $this->container->get('dbal_connection');
			
			/* ARTIKKEL IN DEN WARENKORB */
			$thumburl = $_GET["thumburl"];
			$rueckgabe = Shopware()->Modules()->Basket()->sAddArticle($thumburl);
			$sql2 = "UPDATE s_order_basket_attributes SET id=id,basketID=basketID,attribute1= 'Eine neuere Testeingabe ohne Sinn' WHERE basketID='$rueckgabe'";
			$result2 = $connection->query($sql2);
			?>
			
				<!--
				window.top.location="http://www.xxx.com/checkout/cart/";
				//-->

 

@HolleWolle schrieb:

Also ich glaube der Schrottfaktor hat doch nun schon stark abgenommen oder  sehe ich das falsch?
Ok, die iframe-Sprengung muss ich noch rausbekommen, dann die sql-queries gegen injection schützen. Aber eins nach dem anderen. Ich bin ja erstmal froh, dass überhaupt mal was ins Rollen kommt:

 

‚startrampe‘
];
}
public function startrampe (\Enlight_Controller_EventArgs $args)
{
if(isset($_GET[„thumburl“]))
{
/** @var \doctrine\DBAL\Connections $connection */
$connection = $this->container->get(‚dbal_connection‘);

/* ARTIKKEL IN DEN WARENKORB */
$thumburl = $_GET[„thumburl“];
$rueckgabe = Shopware()->Modules()->Basket()->sAddArticle($thumburl);
$sql2 = „UPDATE s_order_basket_attributes SET id=id,basketID=basketID,attribute1= ‚Eine neuere Testeingabe ohne Sinn‘ WHERE basketID=‚$rueckgabe‘“;
$result2 = $connection->query($sql2);
?>

 

Hallo,

solange sich $_GET und HTML- / JavaScript-Code in der PHP-Datei befinden, ist die Lösung nie gut noch sinnvoll (da schlussendlich solcher Code dort niemals hingehört, aber das wurde ja hier schon von vielen Leuten mehrfach gesagt).

Beste Grüße

Sebastian

@sschreier schrieb:

Hallo,

solange sich $_GET und HTML- / JavaScript-Code in der PHP-Datei befinden, ist die Lösung nie gut noch sinnvoll (da schlussendlich solcher Code dort niemals hingehört, aber das wurde ja hier schon von vielen Leuten mehrfach gesagt).

Beste Grüße

Sebastian

 

Was ich halt nicht wusste ist, dass man im plugin die Möglichkeit hat auf das request-Objekt und dessen einzelne Werte zuzugreifen. Also bin ich wieder einen Schritt weiter:
 

 'startrampe'
        ];
    }
	public function startrampe (\Enlight_Controller_EventArgs $args)
	{
		/** @var $controller \Enlight_Controller_Action */
		$controller = $args->getSubject();
		
		if($controller->Request()->has('thumburl')) 
		{
			/** @var \doctrine\DBAL\Connections $connection */
			$connection = $this->container->get('dbal_connection');
			
			/* Auslesen der Variable $thumburl aus dem Request */
			$request = $controller->Request();
			$thumburl = $request->getParam("thumburl");
			
			/* ARTIKKEL IN DEN WARENKORB */
			$rueckgabe = Shopware()->Modules()->Basket()->sAddArticle($thumburl);
			
			$sql2 = "UPDATE s_order_basket_attributes SET id=id,basketID=basketID,attribute1= 'Eine noch viel neuere Testeingabe ohne Sinn' WHERE basketID='$rueckgabe'";
			$result2 = $connection->query($sql2);
			?>
			
				<!--
				window.top.location="http://www.xxx.com/checkout/cart/";
				//-->

Jetzt muss dieser iframe-Sprenger noch raus… da rätsel ich noch…

Na so langsam wird’s doch :slight_smile:

Ich verstehe allerdings immer noch nicht so ganz was du da eigentlich genau erreichen willst… Okay, du speicherst ein Thumbnail… Aber was genau hat es mit den iframes auf sich? Der Shop mit dem Plugin läuft in einem iframe und sobald der artikel im warenkorb liegt willst du den shop ohne iframe aufrufen?

Oder hast du in deinem Shop einen iframe in dem irgendein externes Tool läuft das dann den Artikel + Thumbnail in den Warenkorb legen soll?

@t2oh4e schrieb:

Na so langsam wird’s doch :)

Ich verstehe allerdings immer noch nicht so ganz was du da eigentlich genau erreichen willst… Okay, du speicherst ein Thumbnail… Aber was genau hat es mit den iframes auf sich? Der Shop mit dem Plugin läuft in einem iframe und sobald der artikel im warenkorb liegt willst du den shop ohne iframe aufrufen?

Oder hast du in deinem Shop einen iframe in dem irgendein externes Tool läuft das dann den Artikel + Thumbnail in den Warenkorb legen soll?

Guten Morgen,

also, das Ganze läuft folgendermaßen:
Wir bauen einen Shop auf, der ausschließlich customizable Artikel im Sortiment haben soll, d.h. alle Artikel sind vom Kunden mit einem Konfigurator individualisierbar. Die Artikel und die dazu jeweils passenden 3D oder 2D Konfiguratoren kommen von einem Drittanbieter. Die Artikel können wir aber erstmal ganz normal in unseren Shop einpflegen. Unter der Artikeldetailansicht habe ich dann einen iframe eingebaut (anders ist dies von Drittanbietereite aus  nicht realisierbar) in der der über ein Artikel-Freitextfeld hinterlegte Link den zum Artikel passenden Konfigurator vom Drittanbieter aufruft. Hier bastelt sich der Kunde nun z.b. seinen Trolley mit einem Foto seiner Kinder drauf zurecht und drückt dann auf den Bestellbutton im iframe also nicht in unserem Shop. Die Bestellung geht nun an den Drittanbieter raus und der Server schickt uns dann u.a. einen Link auf den konfigurierten Artikel und leitet auf der anderen Seite die Bestellung an den entsprechenden supplier weiter. Der braucht dann wiederum von uns die Kundendaten und wenn wir im System des Drittanbieters den Trolley als bezahlt markiert haben fertigt der supplier den Trolley an und schickt ihn an den Kunden raus.
So, nach dem oben beschriebenen Callback mit der oft zitierten thumburl muss der Artikel aber natürlich erstmal bei uns in den Warenkorb. Also muss der iframe gesprengt werden, damit unser Shop nicht doppelt nochmal im iframe geladen wird. Ich leite also den callback auf die Adresse des Warenkorbs und dort fängt ihn dann mein Quellcode, um den es hier die ganze Zeit geht, ab, legt den Artikel in unseren Warenkorb und der Einkauf kann dann wie üblich weiter abgewickelt werden. Ich hoffe das ist nun verständlicher.

Jetzt geht es darum, dass ich das Bild aus der thumburl zum Einen in unserem Shop speichern muss und im Warenkorb auch gerne anzeigen würde. Ach ja und natürlich muss der iframe-Sprenger noch raus ins template und die injection-Gefahr muss gebannt werden… Habe vor drei oder vier Wochen erst mit Shopware angefangen, von daher ist diese Aufgabe gleich am Anfang wohl nicht die leichteste… :-o

Beste Grüße
Olli

Mhm, jetzt wird es wieder knifflig für mich…
Ich möchte jetzt gerne aus meinem Plugin heraus das template product.tpl erweitern um die Anzeige des Bildes das über $thumburl übergeben wird. Okay,also dafür müsste ich nach dem Block frontend_checkout_cart_item_delete_article das Template um einen Block erweitern, der dann eben dieses Element in einer neuen Zeile unter der Standardartikelzeile anzeigt. Mir ist jetzt nur nicht ganz klar wie ich das genau anstellen kann. Primitiv gesagt müsste der Block nach der Erweiterung in etwa so aussehen:
 

    {* Remove product from basket *}
    {block name='frontend_checkout_cart_item_delete_article'}
        
            
                
                    
                
            
        
    {/block}
    
    {* Mein neuer Bildblock *}

    {block name="frontend_checkout_cart_item_image_container_customized_image"}
       {$customized_image = $thumburl}
       
    {/block}

 

Wie gesagt soll wenn möglich alles über dieses eine plugin laufen. Da weiß ich aber nun nicht genau wie ich das umsetzen könnte. Ebenso wie die Frage wie ich das Bild aus der $thumburl nun speichern könnte. Da das Bild ja nicht dem Artikel zugeordnet werden soll sonder nur der Bestellung könnte ich ja einen Ordner anlegen z.b. “customized_images” und die Bilder dort ablegen. Aber wie und wo mache ich das nun am besten in Shopware?

Grübel und setze natürlich selber auch um, aber wäre für den ein oder anderen Tipp dankbar.

Beste Grüße
Olli