Shopware Knowledgebase

Werde ein Fan von Shopware Verfolge Shopware auf Twitter Zur Website von Shopware wechseln

Schnellsuche:

Keine Antwort gefunden?
Probieren Sie es über den Shopware Account
Sollten Sie als Kunde oder Partner in diesem Portal einmal nicht die Informationen finden, die sie suchen, nutzen Sie einfach den Shopware Account. Über dieses Supportsystem stehen wir Ihnen bei allen technischen Fragen gerne zur Seite, sogar am Wochenende. Weitere Informationen finden Sie hier.
Sie haben noch keinen Shopware Account?
Kein Problem! Lassen Sie sich einfach über unser Kontaktformular beraten.

Wie kann ich einfache Varianten definieren, die sich nicht im Preis unterscheiden?

0 Kommentare
Das ist über ein Zusatzfeld (Artikel-Attribut) lösbar.

Sie können alle Varianten Optionen dann z.B. per Komma getrennt in das Zusatzfeld schreiben und dieses kann dann dynamisch in der Storefront in einer Auswahlbox angezeigt werden. Somit entfällt der Aufwand für die Pflege von zusätzlichen Artikel-Varianten etc.

Datenbank-Änderungen

Konfigurations-Variable anlegen (bitte 18 durch entsprechendes Attribute ersetzen)::

 
INSERT INTO s_core_config 
	(`group`, name, value, description) 
VALUES	(
		(SELECT id FROM s_core_config_groups WHERE name='Artikel'), 
		'sARTICLESIMPLEVARIANTFIELD', '18', 'Feld für einfache Varianten'
);
 

Zusatzfeld per Hand oder über diesen SQL-Befehl anlegen:

 
INSERT INTO s_core_engine_elements 
	(`group`, domname, domtype, domdescription, databasefield, domclass, help) 
VALUES 
	(
		(SELECT id FROM s_core_engine_groups WHERE `group`='Einstellungen'),
		CONCAT('attr[',(SELECT value FROM s_core_config WHERE name = 'sARTICLESIMPLEVARIANTFIELD'),']'),
		'textarea', 'Varianten', 
		CONCAT('attr',(SELECT value FROM s_core_config WHERE name = 'sARTICLESIMPLEVARIANTFIELD')),
		'w200', 'z.b. 1=blau, 2=grün'
	)
 

Auf Spalten-Typ "TEXT" setzen (bitte attr18 durch entsprechendes Attribut ersetzen):

 
ALTER TABLE s_articles_attributes MODIFY attr18 TEXT NOT NULL
 

Neue Angepasste-Klasse hinzufügen:

 
UPDATE s_core_factory SET inheritname='myBasket', inheritfile='myBasket.php' WHERE basename='sBasket';
 

Klassen/Funktion erweitern

In dieser Datei:

 
/engine/core/class/inherit/myArticles.php
 

diese Funktion in die Klasse hinzufügen:

 
function sGetSimpleVariantsByArticleID ($articleID) {
		$articleID = (int) $articleID;
		$sql = "
			SELECT attr{$this->sSYSTEM->sCONFIG["sARTICLESIMPLEVARIANTFIELD"]}
			FROM s_articles_attributes WHERE articleID=$articleID
		";
 
		$sSimpleVariantData = $this->sSYSTEM->sDB_CONNECTION->GetOne($sql);
 
		if(empty($sSimpleVariantData))
			return false;
		$sSimpleVariants  = array();
		foreach (explode(",",$sSimpleVariantData) as $variant)
		{
			$variant = explode("=",$variant);
			if(!isset($variant[1])) continue;
			$variant[0] = trim($variant[0]);
			$variant[1] = trim($variant[1]);
			if(empty($variant[0])||empty($variant[1])) continue;
			$sSimpleVariants[$variant[0]] = $variant[1];
		}
		if(empty($sSimpleVariants))
			return false;
		return $sSimpleVariants;
	}
 

In der Funktion sGetArticleById nach

 
	$article = parent::sGetArticleById();
 

das hier einfügen:

 
	$article["sSimpleVariants"] = $this->sGetSimpleVariantsByArticleID($article["articleID"]);
 

Danach diese Datei anlegen:

 
/engine/core/class/inherit/myBasket.php
 

mit diesem Inhalt:

 
<?
include ("$path/sBasket.php");
 
class myBasket extends sBasket
{
	function sUpdateArticle ($id,$quantity)
	{
		$articleID = $this->sSYSTEM->sDB_CONNECTION->GetOne("SELECT articleID FROM s_order_basket WHERE sessionID='{$this->sSYSTEM->sSESSION_ID}' AND modus=0 AND id=".intval($id));
		if(!empty($articleID)&&$simpleVariants = $this->sSYSTEM->sMODULES['sArticles']->sGetSimpleVariantsByArticleID($articleID))
		{
			$orderNumber =  $this->sSYSTEM->sDB_CONNECTION->GetOne("SELECT ordernumber FROM s_articles_details WHERE articleID=$articleID");
			$variantOrderNumber = $this->sSYSTEM->sDB_CONNECTION->GetOne("SELECT ordernumber FROM s_order_basket WHERE id=".intval($id));
			$variantOrderNumber = str_replace($orderNumber." ","",$variantOrderNumber);
			if(!isset($simpleVariants[$variantOrderNumber])) {
				if(!empty($this->sSYSTEM->_GET['sSimpleVariant'])&&isset($simpleVariants[stripslashes($this->sSYSTEM->_GET['sSimpleVariant'])]))
					$variantOrderNumber = stripslashes($this->sSYSTEM->_GET['sSimpleVariant']);
				else 
					$variantOrderNumber = key($simpleVariants);
				$sql = "UPDATE s_order_basket SET articlename=CONCAT(articlename,' ',?) WHERE id=?";           
				$this->sSYSTEM->sDB_CONNECTION->Execute($sql,array($simpleVariants[$variantOrderNumber],$id));
			} else {
				$sql = "UPDATE s_order_basket SET ordernumber=?	WHERE id=?";   
				$this->sSYSTEM->sDB_CONNECTION->Execute($sql,array($orderNumber,$id));
			}
		}
		parent::sUpdateArticle($id,$quantity);
		if($simpleVariants)
		{
			$variantOrderNumber = $orderNumber." ".$variantOrderNumber;
			$sql = "UPDATE s_order_basket SET ordernumber=?	WHERE ordernumber=?";
			$this->sSYSTEM->sDB_CONNECTION->Execute($sql,array($variantOrderNumber,$orderNumber));
		}
	}
	function sAddArticle ($id, $quantity=1)
	{
		$articleID = $this->sSYSTEM->sMODULES['sArticles']->sGetArticleIdByOrderNumber($id);
		if($simpleVariants = $this->sSYSTEM->sMODULES['sArticles']->sGetSimpleVariantsByArticleID($articleID))
		{
			if(!empty($this->sSYSTEM->_GET['sSimpleVariant'])&&isset($simpleVariants[stripslashes($this->sSYSTEM->_GET['sSimpleVariant'])]))
				$variantOrderNumber = stripslashes($this->sSYSTEM->_GET['sSimpleVariant']);
			else 
				$variantOrderNumber = key($simpleVariants);
			$articleName = $this->sSYSTEM->sMODULES['sArticles']->sGetArticleNameByOrderNumber($id);
			$sql = "UPDATE s_order_basket SET ordernumber=?, articlename=?	WHERE ordernumber=? AND sessionID=? AND modus=0";
			$this->sSYSTEM->sDB_CONNECTION->Execute($sql,array($id,$articleName,$id." ".$variantOrderNumber,$this->sSYSTEM->sSESSION_ID));
		}
		return parent::sAddArticle($id, $quantity);
	}
}
?>
 

Template

Im Template:

/templates/?/?/html/articles/article_details_middle.tpl

innerhalb diesem Formular:

 
<form name="add" method="get" action="{$sStart}" class="clearfix">
...
</form>
 

diese Zeilen hinzufügen:

 
{if $sArticle.sSimpleVariants}
	<select name="sSimpleVariant" id="sSimpleVariant" class="variant">
		<option value="">Bitte wählen...</option>
		{foreach from=$sArticle.sSimpleVariants key=key item=variante}
			<option value="{$key}">{$variante}</option>
		{/foreach}
	</select>
 
	<script language="JavaScript" type="text/javascript">
	{literal}
	document.add.addEvent('submit', function(event){
		if($('sSimpleVariant').getValue()=='')
		{
			new Event(event).stop();
			alert('Achtung! Bitte zuerst Ausführung wählen!');
		}
	});
	{/literal}
	</script>
{/if}
 

Artikel bewerten

Waren diese Informationen hilfreich? Ja Nein


Kommentare:

Artikel kommentieren


Die mit einem * markierten Felder sind Pflichtfelder.

Weitere interessante Artikel:

Bezeichnung:
Rating:
Klicks:
Datum:

Bestell-Nr.: 68695_

Lieferzeit ca. 5 Tage

€ 1,00

Preise inkl. gesetzlicher
MwSt. zzgl. Versandkosten*

€ 1,00

Preise inkl. gesetzlicher
MwSt. + Versandkosten*