Artikellisten Master/Slave * Lagerverwaltung * Bugs?

Hallo,

erstmal ich bin neu hier.
Ich habe zwar schon zwei Beiträge verfasst, aber fühle mich trotzdem neu.
Sozusagen frisch von einen osc-Clone immigriert.

Folgendes Szenario:

  • Master-Artikel sind kaufbar.
  • Master-Artikel haben eine Auswahlliste.
  • Slave-Artikel sollen keine Auswahlliste haben.
    => Leider ‘erben’ die Slaveartikel die Auswahlliste vom Master.

Wenn ich eine weitere Liste definiere und diese den Slave-Artikeln zuordne, dann wird die Masterliste für diesen Slave-Artikel nicht mehr angezeigt, sondern die neue Liste.
So weit so gut.
Nur ist meine Slave-Liste leer, weil die Slave-Artikel halt keine Liste brauchen.
Leider erscheint dann die leere Liste total sinnfrei im Frontend.

Das heißt für mich, dass irgendwie schon an mein Problem gedacht wurde und die Auswahlliste eines Slaves vom Master generell abweichen darf/kann.

Weiß jemand irgendeine elegantere Lösung für dieses Problem, oder muss ich wirklich im Template (…oder als Modul) überprüfen, ob die aktuelle Liste leer ist, um diese dann NICHT auszugeben?

Edit
Habe gerade noch etwas anderes versucht und die Auswahlliste weg gemacht.
Die einzelnen Auswahlpunkte habe ich als eigenständigen Artikel angelegt.
Dann habe ich alle “Auswahlartikel” den Masterprodukt als Zubehör zugeordnet.
Hier erben die Slaves das leider nicht :frowning:
Denke, hiermit sollte ich aber klarkommen.
Edit

Ach ja, noch ein Feature-Request:
Dass man Global sagt, ob Master-Artikel kaufbar sind, ist zwar gut und schön, aber es währe toll, wenn man dies pro Masterartikel definieren kann.
Zurzeit versuche ich das mittels den Lagerbestand zu lösen.

Aber irgendwie klappt da etwas nicht…
Ich habe den Masterartikel auf -5 Stück (0 habe ich auch probiert)
und unter Stammdaten->Grundeinstellungen->Einstellungen->Lager
’Lagerverwaltung aktiv’ gesetzt
und ‘negative Lagerbestände erlauben’ deaktiviert.

Trotzdem kann ich dieses Produkt in den Warenkorb legen und bestellen.
Oder ist das mit den negativen Lagerbeständen erlauben ganz anders gemeint?

Ansonsten weiter so, gerade für mich als Coder macht die Freiheit des Systems und der schöne Code Spass… vor allen wenn man von einen Oscommerce Clone kommt.

Viele Grüße,
Markus

PS: Vielleicht noch eine Anregung für die Zukunft, schaut euch mal ein wenig das Templatesystem von Drupal an. Vererbung und Templateabhängige Adminfunktionen sind einfach toll.

Hallo Markus,

na dann: Herzlich Willkommen! :slight_smile:

Und vielen Dank für den Bugreport, den ich eingetragen habe:
https://bugs.oxid-esales.com/view.php?id=1069

Wenn Du magst und des Englischen mächtig bist, kannst Du das künftig gern selbst machen.

Oder ist das mit den negativen Lagerbeständen erlauben ganz anders gemeint?

Was sagt denn die Lagerverwaltung direkt am Artikel?

Den Feature Request habe ich erfasst.

Gruß

[QUOTE=Marco Steinhäuser;10044]Hallo Markus,

na dann: Herzlich Willkommen! :slight_smile:

Und vielen Dank für den Bugreport, den ich eingetragen habe:
https://bugs.oxid-esales.com/view.php?id=1069
[/quote]
Danke.
Hier habe ich dies bereits als Modul gefixt. Der betreffende Bereich der Originalklasse hat schon zwei ID’s gehabt (#1104S und #1496C - auskommentierte Zeilen) finde ich aber nicht im Bugtracker.
1104S sagt mir ‘it’s not a bug, it’s a feature’
Einbinden als: oxarticle => datame/datame_modul_oxarticleVariantlistNoInherit


<?
class datame_modul_oxarticleVariantlistNoInherit extends datame_modul_oxarticleVariantlistNoInherit_parent{
    /**
    * Diese Methode ist eine 1:1 Kopie der Elternklasse (oxarticle::getSelectLists()).
    * Hier wurde implementiert, dass die Slave-Artikel nicht die Selectlist des Masters (falls Slave keine Selectlist hat) erbt.
    * => Siehe auskommentierte Zeilen #1104S ff.
    */
    public function getSelectLists($sKeyPrefix = null)
    {
        //#1468C - more then one article in basket with different selectlist...
        //optionall function parameter $sKeyPrefix added, used only in basket.php
        $sKey = $this->getId();
        if ( isset( $sKeyPrefix ) ) {
            $sKey = $sKeyPrefix.'__'.$this->getId();
        }

        if ( self::$_aSelList[$sKey]) {
            return self::$_aSelList[$sKey];
        }

        // all selectlists this article has
        $oLists = oxNew( 'oxlist' );
        $oLists->init('oxselectlist');
        $sSLViewName = getViewName('oxselectlist');
        $sSelect  = "select $sSLViewName.* from oxobject2selectlist left join $sSLViewName on $sSLViewName.oxid=oxobject2selectlist.oxselnid ";
        $sSelect .= 'where oxobject2selectlist.oxobjectid=\''.$this->getId().'\' ';
        //sorting
        $sSelect .= ' order by oxobject2selectlist.oxsort';

        $oLists->selectString( $sSelect );

//         //#1104S if this is variant ant it has no selectlists, trying with parent
//         if ( $this->oxarticles__oxparentid->value && $oLists->count() == 0 ) {
//             //#1496C - select fixed ( * => $sSLViewName.*)
//             $sSelect  = "select $sSLViewName.* from oxobject2selectlist left join $sSLViewName on $sSLViewName.oxid=oxobject2selectlist.oxselnid ";
//             $sSelect .= "where oxobject2selectlist.oxobjectid='{$this->oxarticles__oxparentid->value}' ";
//             //sorting
//             $sSelect .= ' order by oxobject2selectlist.oxsort';
//             $oLists->selectString( $sSelect);
//         }

        $dVat = 0;
        if ( $this->getPrice() != null ) {
            $dVat = $this->getPrice()->getVat();
        }

        $iCnt = 0;
        self::$_aSelList[$sKey] = array();
        foreach ( $oLists as $oSelectlist ) {
            self::$_aSelList[$sKey][$iCnt] = $oSelectlist->getFieldList( $dVat );
            self::$_aSelList[$sKey][$iCnt]['name'] = $oSelectlist->oxselectlist__oxtitle->value;
            $iCnt++;
        }
        return self::$_aSelList[$sKey];
    }
}

Wenn Du magst und des Englischen mächtig bist, kannst Du das künftig gern selbst machen.

Klar, kann ich… wenn ich das System ein wenig besser kenne
… oder ist das für euch der gleiche Aufwand falsche Bugs im Forum auszusortieren wie im Bugtracker?

Was sagt denn die Lagerverwaltung direkt am Artikel?

Admin-Lager:0
Frontend (Artikelliste): Rote Ampel
Forntend (Artikelinfo): Rote Ampel, “Dieser Artikel ist nicht auf Lager und muss erst nachbestellt werden.”
Bei negativen Einträgen ist das gleich. Die ‘Ampel’ funktioniert auch soweit.
Was ich komisch finde, ist dass ich ja unter
Admin->Stammdaten->Grundeinstellungen->Einstellungen->Lager->‘Negative Lagerbestände erlauben’
das Häkchen weggemacht habe und Kunden diesen Artikel trotzdem kaufen können.

Irgendwei sehe ich keinen Unterschied ob das Häkchen gesetzt ist oder nicht.

Sollte aber leicht nachvollziehbar sein, habe das gerade an einen Artikel ohne Slave-Produkte und Auswahlliste getestet.

Nach dem ich den Artikel bestelle ist der Lagerbestand im Admin negativ.

Den Feature Request habe ich erfasst.

Super.
Den mit den nicht Globalen Masterartikeln
oder das mit den Drupal ähnlichen Templatesystem… Ähnliches wird ja derzeit groß diskutiert.

Noch eine kleine Verbesserung…
Die Smarty-Klasse kann man ja auch erweitern und dementsprechend in der erweiterten Klasse ein paar Pluginorder hinzufügen.
So kann man die OXID spezifischen Plugins in einen eigenen Pluginordner machen. Sollte dann leichter sein, wenn man Smarty updated.

Hier meine Smarty-Klasse::smiley:


class Datame_class_smarty extends Smarty{
	function __construct(){
		parent::__construct();

	}
	function fetch($resource_name, $cache_id = null, $compile_id = null, $display = false){
		$this->plugins_dir[]=$this->template_dir.'../plugins/';
		$this->config_dir=$this->template_dir.'../'.oxLang::getInstance()->getLanguageAbbr().'/';
		if(file_exists($this->config_dir.'lang.conf')){
			$this->config_load('lang.conf',$resource_name);
		}
// 		print_r($this);
		return parent::fetch($resource_name, $cache_id, $compile_id, $display);
	}

}

So hat mein Template ein eigenes Pluginverzeichnis und es wird automatisch eine Smarty-Sprachdatei geladen mit der Sektion der Ressource.
Ich denke, wenn man den Core ändert (als kleiner Dienstleister möchte ich das nicht), dann kann man recht komfortabel einiges in diese Klasse packen.

Nun ja, da wohl noch einige von xtc kommen werden wird wohl noch einiges an Smartyerfahrung hier ins Forum einfließen.

Hier habe ich dies bereits als Modul gefixt.

Wow, cool! :slight_smile: Ich hab’s gleich mit an den Bug gehangen. Wenn Du möchtest, kannst Du das Modul auch gern in den eXchange einstellen.

… oder ist das für euch der gleiche Aufwand falsche Bugs im Forum auszusortieren wie im Bugtracker?

Es hält mir einfach die Arbeit vom Halse. Wenn das Forum weiter so rasant wächst, schaffe ich das einfach nicht mehr oder es gehen mir Dinge durch die Lappen…

Was sagt denn die Lagerverwaltung direkt am Artikel?

Ich meinte Artikel -> Lager -> Lieferstatus:
a) Fremdlager (hier kann weiter bestellt werden)
b) Wenn ausverkauft offline (Artikel wird nicht mehr angezeigt -> doof wg. Suchmaschinen) oder
c) Wenn ausverkauft nicht bestellbar (Artikel wird angezeigt, allerdings kein Warenkorb-Button)

Gruß

[QUOTE=Marco Steinhäuser;10071]Wow, cool! :slight_smile: Ich hab’s gleich mit an den Bug gehangen. Wenn Du möchtest, kannst Du das Modul auch gern in den eXchange einstellen.
[/quote]
Ist mir egal.
Aber ich denke dies ist schon sehr speziell und wer damit Probleme hat wird wohl eher hier im Forum nach einer Lösung suchen.
Vielleicht, wenn das aktuelle Projekt fertig ist und ich wieder etwas mehr Zeit habe.

Ich meinte Artikel -> Lager -> Lieferstatus:
a) Fremdlager (hier kann weiter bestellt werden)
b) Wenn ausverkauft offline (Artikel wird nicht mehr angezeigt -> doof wg. Suchmaschinen) oder
c) Wenn ausverkauft nicht bestellbar (Artikel wird angezeigt, allerdings kein Warenkorb-Button)

Ok, Danke. Lösung c war es.
So kann ma n auch (ein wenig umständlich) Masterartikel nicht kaufbar machen.

Aber der Sinn von
Admin->Stammdaten->Grundeinstellungen->Einstellungen->Lager->‘Negative Lagerbestände erlauben’
bleibt mir immer noch verborgen. Naja, egal. Hauptsache es geht.

LG.
Markus

wenn du c) bei vaterartikel aktivierst sind aber auch kaufbare varianten nicht mehr zu sehen oder hab ich jetzt nen denkfehler ??

und negative lagerbestände erlauben heißt eigentlich nicht mehr als das man immer kaufen kann, der shop aber dann erst die ware nachbestellen muß vorm liefern
also rote ampel und trotzdem kaufbar

[QUOTE=laramarco;10077]wenn du c) bei vaterartikel aktivierst sind aber auch kaufbare varianten nicht mehr zu sehen oder hab ich jetzt nen denkfehler ??

und negative lagerbestände erlauben heißt eigentlich nicht mehr als das man immer kaufen kann, der shop aber dann erst die ware nachbestellen muß vorm liefern
also rote ampel und trotzdem kaufbar[/QUOTE]

c) Wenn ausverkauft nicht bestellbar (Artikel wird angezeigt, allerdings kein Warenkorb-Button)

Danke, für den Hinweis,
aber die Varianten des ausverkauften Masters sind weiterhin zu kaufen.
Es geht sogar soweit, dass man jeder Variante einzeln sagen muss, dass diese nicht kaufbar bei leeren Lager sind. Für Varianten macht es ja dann auch (zumindestens bei meinen aktuellen Layout) Sinn, diese nicht mehr anzuzeigen bei leeren Lager.

Nur leider ist die Selectbox vom Master trotzdem aktiv.

Wie das aber aussieht, wenn man den Masterartikel nicht mehr anzeigt (Lösung b), das müsste man ausprobieren. Brauche ich aber (wegen SEO) nicht.