Wie kann ich einfache Varianten definieren, die sich nicht im Preis unterscheiden?
0 KommentareSie 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
Kommentare:
Artikel kommentieren
Weitere interessante Artikel:
Bestell-Nr.: 68695_
Lieferzeit ca. 5 Tage
Preise inkl. gesetzlicher
MwSt. zzgl. Versandkosten*
Preise inkl. gesetzlicher
MwSt. + Versandkosten*