Contao-Camp 2024
Ergebnis 1 bis 19 von 19

Thema: Stocklist / Lagerverwaltung bei Isotope

  1. #1
    Contao-Nutzer
    Registriert seit
    20.08.2012.
    Beiträge
    28

    HTML Stocklist / Lagerverwaltung bei Isotope

    Hallo zusammen,

    Da ich bei Isotope keine Möglichkeit gefunden habe, um die Anzahl vorhandener Produkte hinzuzufügen, versuche ich eine alternative zu finden.

    Damit es vorübergehend möglich ist Stückzahlen anzugeben, habe ich versucht das Problem mit Javascript folgendermassen zu lösen:

    Die Stückzahl wird bei den Produkten im Teaser eingetragen.
    Dazu habe ich für Farbe: schwarz, Grösse: L , Anzahl:10 die abkürzung bl10
    Die einzelnen Farben und Grössen habe ich mit "," getrennt z.B.: bs6,bm8,bl10

    Nun lese ich im Template den Teaser aus und merke in $farbe welche Farbe betroffen ist

    PHP-Code:
    <!-- Stock List -->
    <?php $array explode(",",$this->teaser); 
    $global_stock_counter 0;
    $delete = array();
    $count_sold_out 0//zählt die Anzahl der sold outs

    foreach ($array as $el) {
        
    $zahlen strpbrk($el'0123456789');
        
    $attr substr($el0,-strlen($zahlen));
        
    $farbe substr($attr,0,1);
        
    $groesse substr($attr1);
        
        
    $global_stock_counter += $zahlen;

        if (
    $farbe == "w") {
            
    $farbe "white";
        } else if (
    $farbe == "g") {
            
    $farbe "grey";
        } else if (
    $farbe == "b"){
            
    $farbe "black";
        } else if (
    $farbe == "r") {
            
    $farbe "red";
        } else if (
    $farbe == "g") {
            
    $farbe "green";
        } else if (
    $farbe == "b") {
            
    $farbe "blue";
        } else if (
    $farbe == "n") {
            
    $farbe "none";
        } 

    ?>
    Im Array "delete" speichere ich dann die Farbe und Grösse die ausverkauft sind (Zahlen Wert 0 haben)
    PHP-Code:
    if ($zahlen <= 0) {
            
    //array für javascript füllen
            
    $delete[$count_sold_out][color] = array($farbe);
            
    $delete[$count_sold_out][size] = array($groesse);
            
    $count_sold_out++;
        } 


    Danach greife ich per jQuery auf den Array zu:
    Code:
    var ar = <?php echo json_encode($delete) ?>;
    Danach habe ich eine "delete" funktion erstellt, die alle Optionen der Selects ausblendet, welche nicht mehr vorhanden sind.
    Wenn für eine Grösse keine Farben mehr vorhanden sind soll die Grösse auch nicht mehr angezeigt werden.
    Das ganze ist mit "display:none" gelöst.. (wahrscheinlich verbesserungswürdig )

    Code:
     var anzahl_sold_out = ar.length; // not shure why i need this but i think i do
    
        var select = J('select');	//select the selects and its options
        
        var s_color = J(select[0]);
        var s_size = J(select[1]);
        
        var o_color = s_color.find('option'); 
        var o_size = s_size.find('option');
       	var	deleteded = false;
    	//create the function to "delete" sizes which are not in stock   
        function delete_stock() {
        	jQuery.each(o_size, function() {
    		    J(this).css('display','block');	
    		 });
        	var x = 0;
        	while(x!=anzahl_sold_out) {
    	    	jQuery.each(s_color, function() {
    		    	//option farbe = delte farbe
    		    	//durchlaufe color
    		    	if(J(this).val().toLowerCase() == ar[x]['color']) {
        			var options_in_select = 0;
    				var not_displayed = 0;
    		    		jQuery.each(o_size, function() {
    		    			options_in_select++
    		    			//option groesse = delete groesse
    		    			if(J(this).val().toLowerCase() == ar[x]['size']) {
    		    				J(this).css('display','none');
    		    				not_displayed++;
    		    			}
    		    			// color löschen wenn keine elemente
    		    			if((options_in_select - not_displayed) == 0) {
    		    				console.log("all deleted: "+ar[x]['color']);
    							jQuery.each(o_color, function() {
    								if (J(this).val().toLowerCase() == ar[x]['color']) {
    									J(this).css('display','none');
    								}
    							});
    						} /*else { // sonst wieder anzeigen
    							jQuery.each(o_color, function() {
    								if (J(this).val().toLowerCase() == ar[x]['color']) {
    									J(this).css('display','block');
    								}
    							});
    						}*/	
    		    			
    		    		});
    		    	} 
    		    	x++;
    			 });
        	}
    Wenn nun die oberste Option ausgeblendet ist, so soll die 2. oberste als "selected" gewählt werden

    Code:
    	// wenn farbe zu oberst, selectiere nächste 
        		jQuery.each(o_color, function() {
    			if (J(this).css('display')=='none') {
    				J(this).removeAttr('selected');
    				J(this).next().prop('selected','true');
    			}
    			if(deleteded == false) {
    				deleteded = true;
    				//first time, call the function
    				delete_stock();
    				
    			}
    			
    		});
        
        	//wenn size zu oberst, selectiere nächste
    		jQuery.each(o_size, function() {
    			if (J(this).css('display')=='none') {
    				J(this).removeAttr('selected');
    				J(this).next().prop('selected',true);
    			}
    		});
        }
        //funktion ausführen 
        delete_stock();
    Wenn der Select geändert wird, so muss die Funktion erneut ausgeführt werden
    Code:
    s_color.change(function() {
    	    delete_stock();
        });
    Damit nun nicht bestellt werden kann, blende ich den Button aus wenn die Farben aller Grössen ausverkauft sind.

    PHP-Code:
    <?php if($global_stock_counter <= 0): ?>
        <span class="quantity sold-out">product sold out</span><br />
    <?php else: ?>
        <?php foreach( $this->buttons as $name => $button ): ?>
            <input type="submit" class="submit <?php echo $name?>" name="<?php echo $name?>" value="<?php echo $button['label']; ?>">
        <?php endforeach; ?>
    <?php 
    endif; ?>
    Ich hoffe es ist einigermassen verständlich und Hilft irgendjemandem weiter

    ---------------------------------------------------------------------------------------------------------------
    Nun aber noch eine Fragen an alle die sich mit jQuery und Smartphones auskennen..
    Die oben gezeigte Funktion funktioniert auf dem Desktop PC. Auf dem Smartphone werden die optionen der Selects jedoch nicht ausgeblendet..
    Hat jemand eine Idee wieso dies sein könnte? Ist es vielleicht wegen dem "display:none"?

    Vielen Dank und FG
    Kajetan

  2. #2
    Contao-Nutzer
    Registriert seit
    05.10.2011.
    Beiträge
    45

    Standard

    Hallo,

    nutzt du nur Jquery oder auch Jquery Mobile?

    Für Jquery Mobile kann ein Update helfen, es gab da bis vor kurzem ein Problem: https://github.com/jquery/jquery-mobile/issues/3577

    Weiterhin reicht ein einfaches display: none nur für FF. Chrome, IE etc. zicken dort rum. Du kannst die <option> jedoch für Browser außer FF in einen <span> packen und diesen mit CSS verstecken.
    Daraus entsteht jedoch invalides HTML und du brauchst eine Abfrage nach Browser.

    Alternativ würde ich die Option zwar anzeigen, aber halt disabled setzen.

  3. #3
    Contao-Nutzer
    Registriert seit
    20.08.2012.
    Beiträge
    28

    Standard disabled ausprobiert

    Hi Vamiris

    Besten Dank für Deine schnelle Antwort.
    Ich habe nun überall wo ich "display:none;" gesetzt hatte dies durch folgendes ersetzt:

    Code:
    var o_size = s_size.find('option');
    o_size.attr('disabled', 'true');
    o_size.removeAttr('disabled');
    Die options werden jedoch angezeigt.. und bekommen das attr nicht. Was mache ich falsch?

  4. #4
    Contao-Nutzer
    Registriert seit
    05.10.2011.
    Beiträge
    45

    Standard

    o_size.attr('disabled', 'true');
    o_size.removeAttr('disabled');

    zuerst setzt du das Attribute, dann entfernst du es. Deshalb ist es nicht da. Oder versteh ich deine Frage grad falsch?

  5. #5
    Contao-Nutzer
    Registriert seit
    20.08.2012.
    Beiträge
    28

    Standard

    Hehe ja das ist mir klar, das sollte nur veranschaulichen, wie ich es eingesetzt habe.

    J(this).css('display')=='none' ersetzt mit J(this).attr('disabled', true);
    J(this).css('display','block'); ersetzt mit J(this).removeAttr('disabled');
    if (J(this).css('display')=='none') { ersetzt mit if (J(this).hasAttr('disabled') {

    aber es funtkioniert leider nicht..

  6. #6
    Contao-Nutzer
    Registriert seit
    20.08.2012.
    Beiträge
    28

    HTML top!

    Danke nochmals für die Hilfe!
    Wie du gesagt hast geht es mit dem span um das option Element.

    Hat jetzt funktioniert in dem ich folgendes geändert habe.
    --------------------------------------------------------------

    J(this).css('display')=='none'
    ersetzt mit
    J(this).wrap('<span></span>');
    --------------------------------------------------------------

    J(this).css('display','block');
    ersetzt mit
    if (J(this).parent=='span') { J(this).unwrap(); }

    --------------------------------------------------------------

    if (J(this).css('display')=='none') {
    ersetzt mit
    if (J(this).parent()=='span') {

    --------------------------------------------------------------

    Dann noch mit css: select span {display: none;}

    Vielen Dank uind freundliche Grüsse
    Kajetan

  7. #7
    Contao-Nutzer
    Registriert seit
    05.10.2011.
    Beiträge
    45

    Standard

    Denk bitte daran, dass jeder Browser damit so seine eigene Umgangsart hat und prüfe das dem entsprechend.

    Ein Span als Kind eines Selects ist nunmal nicht html konform.

  8. #8
    Contao-Nutzer
    Registriert seit
    20.08.2012.
    Beiträge
    28

    Information

    Hi Vamiris,

    Ich werde es auf die Browser prüfen, vielen Dank für den Input.

    LG Kajetan

  9. #9
    Contao-Nutzer
    Registriert seit
    20.08.2012.
    Beiträge
    28

    Fehler Fehler Behoben

    Habe noch einen Fehler gefunden.. nämlich müssen die Anzahl der Optionen ausserhalb der Schleife gezählt werden..

    Code:
    ...
    
    jQuery.each(o_size, function() {
    	options_in_select++; 
    });
    	
    jQuery.each(o_size, function() { ...

  10. #10
    Contao-Fan Avatar von Grossvater
    Registriert seit
    20.02.2013.
    Beiträge
    509

    Standard

    Konnte die Lagerverwaltung von richardhj schonmal jemand testen? Siehe https://github.com/richardhj/contao-...tockmanagement

  11. #11
    Contao-Nutzer
    Registriert seit
    24.06.2012.
    Beiträge
    205

    Standard

    habe die Erweiterung https://github.com/richardhj/contao-...tockmanagement
    lokal in einem Testsystem mit composer installiert, und sie funktioniert ohne Probleme.

    kann die Erweiterung auch ohne composer installiert werden?
    (oder von der lokalen installation auf den Live Server ohne Composer übernommen werden)

    Wenn ich den Modulordner manuell auf den Server übertrage bekomme ich anschließend einen ERROR 500.
    Ist bei der manuellen installation auf was besonderes zu achten?
    Geändert von speedweb (22.07.2016 um 15:48 Uhr)
    Gruß Thomas
    __________________________________________________ ________________________________
    ich habe keine Zeit, darüber nachzudenken, warum ich keine Zeit habe.

  12. #12
    Contao-Fan Avatar von Grossvater
    Registriert seit
    20.02.2013.
    Beiträge
    509

    Standard

    Ich habe hier noch eine Erweiterung gefunden, die so wie es scheint eine Lagerverwaltung ist https://github.com/numero2/contao-isotope-simple-erp

    Ich konnte es nich testen.

  13. #13
    Contao-Nutzer
    Registriert seit
    24.06.2012.
    Beiträge
    205

    Standard

    habe die Erweiterung https://github.com/richardhj/contao-...tockmanagement
    lokal in einem Testsystem mit composer installiert, und sie funktioniert ohne Probleme.

    Die Erweiterung kann auch ohne Composer manuell installiert werden.

    Besten Dank an den Entwickler der die Erweiterung kurzfristig für die manuelle Installation angepasst hat.
    Ich konnte bisher keine Probleme mit der Erweiterung feststellen.
    Gruß Thomas
    __________________________________________________ ________________________________
    ich habe keine Zeit, darüber nachzudenken, warum ich keine Zeit habe.

  14. #14
    Contao-Fan Avatar von dtptiger
    Registriert seit
    20.06.2009.
    Ort
    Nürnberg
    Beiträge
    816

    Standard

    Hallo,

    Die Erweiterung kann auch ohne Composer manuell installiert werden.
    Habe ich gemacht, die Abhängigkeiten auch Manuell installiert.

    Es gab keine DB Abfrage, doch die Extension scheint installiert zu sein, denn in System/Einstellungen wird sie angezeigt.

    Activate and configure stock management for the product type (Isotope > Shop configuration > …)
    Ich finde in der Grundeinstellung nichts.
    Jetzt habe ich alle Einstellungen in der Isotope eCommerce Shop configuration durchsucht und finde dort auch nirgends die Möglichkeit eine Mengenangabe anzulegen. Habe klar auch in Produkte und Varianten gesucht.

    Was tun?

    System:
    Contao 3.5.34
    Isotope 2.4.5

    Gruß
    dtptiger

  15. #15
    Contao-Fan
    Registriert seit
    27.06.2010.
    Beiträge
    539

    Standard

    Zitat Zitat von dtptiger Beitrag anzeigen
    Was tun?
    Die Erweiterung mit Composer installieren. v2 der Erweiterung sollte eig nur mit Composer installierbar sein.

  16. #16
    Contao-Nutzer Avatar von mschindler
    Registriert seit
    25.08.2011.
    Ort
    Bad Feilnbach
    Beiträge
    191
    Partner-ID
    7698

    Standard

    Zitat Zitat von tl_richard_user Beitrag anzeigen
    Die Erweiterung mit Composer installieren. v2 der Erweiterung sollte eig nur mit Composer installierbar sein.
    @Richard
    Ich habe zum Testen deine Erweiterung unter einer aktuellen 4.4er mit dem Manager installiert. Auch ich finde die Einstellung nicht.
    Cache und Systemwartung ist gelaufen, die notwendigen Tabellen angelegt.

    Gibt es mit C4.4 schon Erfahrungen, oder wo kann ich weiter suchen, warum die Einstellungen und das Attribut nicht angezeigt wird.

    Viele Grüße
    Markus
    Contao Partner aus Rosenheim und München
    codesache.de
    ---
    Mitglied der Contao Community Bayern
    Aktuelle Termine zur Contao Community Bayern: contao-bayern.de

  17. #17
    Contao-Fan
    Registriert seit
    27.06.2010.
    Beiträge
    539

    Standard

    Hab die Erweiterung auch gerade noch mal testweise installiert.
    Die Einstellungen sind beim Produkttyp. Kannst du sie dort finden?

  18. #18
    Contao-Nutzer Avatar von mschindler
    Registriert seit
    25.08.2011.
    Ort
    Bad Feilnbach
    Beiträge
    191
    Partner-ID
    7698

    Standard

    So jetzt erscheint es!
    Keine Ahnung was sich da verschluckt hat. Hand auflegen !!!

    Die Umlaute bei den Kommentare bei Mengen werden im BE (
    Plätze
    ) nicht konvertiert.

    Ich teste mal weiter und gebe Feedback.
    Contao Partner aus Rosenheim und München
    codesache.de
    ---
    Mitglied der Contao Community Bayern
    Aktuelle Termine zur Contao Community Bayern: contao-bayern.de

  19. #19
    Alter Contao-Hase Avatar von kubjo
    Registriert seit
    11.01.2011.
    Ort
    Ludwigsburg
    Beiträge
    1.380

    Standard

    Hi,
    ich bringe hier mal die Erweiterung von Kamil ins Spiel:
    https://shop.codefog.pl/product/isot...anagement.html

    Sie ist zwar kostenpflichtig, funktioniert aber auch unter contao 4.5.x nach manueller Installation gut!
    Außenden ist Kamil ein sehr guter Programmierer mit sehr schneller Antwortzeit, sehr zu empfehlen!

    Grüße
    JK
    Wir sind alle Würmchen, nur glaube ich, daß ich ein Glühwürmchen bin.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •