Kundengruppencheck funktioniert nicht

  • Hallo,

    zu erst Kompliment für die neue Version.
    Allerdings scheint die "Kundengruppencheck" Funktion nicht richtig zu funktionieren.
    Beim Aktivieren diese und dementsprechend ticken der Boxen auf Kategorie und Produktebenen, erscheinen KEINE Produkten.
    Beim editieren der Produkten sind diese richtig getickt, also die DB einträge sind soweit OK und werden dem entsprechend in der Admin View gelesen.
    Beim klicken auf der Katagorie im Shop erscheint :"Artikel wurde nicht gefunden!"

    Wenn man die Funktion deaktiviert wird, kommen die Produkten wieder, ergo liegt es daran.

    Ich benutze die letzte CE edition mit dem 4erFix.

    Was mache ich falsch wenn ich der einzige bin, oder was lauft nicht richtig?

    Danke für eure Hilfe,

    J.

    Einmal editiert, zuletzt von julien (27. Juli 2010 um 11:06)

  • Hallo,

    JOINS werden gemixt in dem Querry was dazu führt (mindestens in meine MySQL Version 5.1.33) das keine Resultate ausgegeben werden.

    Die Lösung ist folgende:
    - in includes/modules/ die Datei default.php editieren.
    - ca. bei Linie 432 den $listing_sql auskommentieren (nie löschen!) und mit folgendem ersetzen.

    $listing_sql = "SELECT p.products_fsk18,
    p.products_shippingtime,
    p.products_model,
    p.products_ean,
    pd.products_name,
    m.manufacturers_name,
    p.products_quantity,
    p.products_image,
    p.products_weight,
    pd.products_short_description,
    pd.products_description,
    pd.products_img_alt,
    p.products_id,
    p.manufacturers_id,
    p.products_price,
    p.products_vpe,
    p.products_vpe_status,
    p.products_vpe_value,
    p.products_discount_allowed,
    p.products_tax_class_id
    FROM ".TABLE_PRODUCTS_DESCRIPTION." pd INNER JOIN "
    .TABLE_PRODUCTS_TO_CATEGORIES." p2c INNER JOIN "
    .TABLE_PRODUCTS." p INNER JOIN "
    .TABLE_CATEGORIES." c LEFT JOIN "
    .TABLE_MANUFACTURERS." m
    ON p.manufacturers_id = m.manufacturers_id
    WHERE
    p.products_status = '1'
    AND
    p.products_id = p2c.products_id
    AND
    pd.products_id = p2c.products_id
    ".$group_check."
    ".$fsk_lock."
    AND pd.language_id = '".(int) $_SESSION['languages_id']."'
    AND p2c.categories_id = '".$current_category_id."'".$sorting;


    Sieht nach viel aus, aber im Detail werden nur die "," ersetzt durch INNER JOINS, MySQL liebt es.

    Also, wie immer ist dieser Tipp ohne Gewähr, aber weil ihr so schön Kopien und backup macht sollte nichts passieren.

  • Hallo,

    ich habe auch das Problem, nur leider verstehe ich das mit dem inner joins nicht. kannst Du mir das einwenig genauer erklären mit dem inner join? Wie genau bzw, wo was mit was ersetzt werden muss.

    bei mir ist diese liste 2 mal in der default, einmal im Zeilen 370 bereich und dann nochmal im Zeilen Bereich 452

    Vielen Dank für die Hilfe schon einmal

    MaLibu

  • Hallo Malibu,

    die Joins erklären...wäre ziemlich lang.. kannst gerne bei Mysql.com nachschauen :-), aber in unserem Fall ist es so dass die Anfrage in manche DB nicht richtig "verstanden" wird (es geht um die Reheinfolge der Argumenten, bzw darum dass "," nicht gemocht wird bei mehrere JOINS)
    Aber dazu kommt dass in der includes/modules/default.php das steht:

    if(GROUP_CHECK == 'true')
    $group_check = "AND c.group_permission_".$_SESSION['customers_status']['customers_status_id']."=1 ";

    was für sich richtig ist NUR wenn die SQL Abfrage weisst was das "c" in "c.group_permission_" bedeutet un da liegt der hacken!

    Wenn Du dir die SQL Abfagen wo "$group_check" addiert wird dir anschaust, siehst Du dass "c" also die categorie Tabelle nicht überall deklariert/referenziert wird.

    Für uns heisst es bei Linie ca 455 der alte Query mit folgendem eingeben:
    $listing_sql = "SELECT p.products_fsk18,
    p.products_shippingtime,
    p.products_model,
    p.products_ean,
    pd.products_name,
    p.products_quantity,
    p.products_image,
    p.products_weight,
    pd.products_short_description,
    pd.products_description,
    pd.products_img_alt,
    p.products_id,
    p.products_price,
    p.products_vpe,
    p.products_vpe_status,
    p.products_vpe_value,
    p.products_discount_allowed,
    p.products_tax_class_id
    FROM
    ".TABLE_PRODUCTS." AS p
    INNER JOIN ".TABLE_PRODUCTS_TO_CATEGORIES." AS p2c ON p.products_id = p2c.products_id
    INNER JOIN ".TABLE_PRODUCTS_DESCRIPTION." AS pd ON (pd.products_id = p2c.products_id AND pd.language_id = '".(int)$_SESSION['languages_id']."')
    INNER JOIN ".TABLE_CATEGORIES." AS c ON p2c.categories_id = c.categories_id
    WHERE
    p.products_status = '1'
    AND
    p2c.categories_id = '".$current_category_id."'
    AND
    p.products_id = p2c.products_id
    ".$group_check."
    ".$fsk_lock."
    ".$sorting;

    Und ann klappt's mit dem Nachbarn.

    Julien.

  • Hallo Julien,


    vielen Dank für Hilfestellung, jetzt läuft es. Ich kannte inner Joins noch nicht. werde mich dann mal damit beschäftigen.

    Jedenfalls bin ich begeistert, das es so unkompliziert war. :D

  • Verstehe ich zwar nicht, da INNER-, OUTER- und LEFT- JOIN nix mit mögen zu tun haben, sondern nur mit der Ergebnismenge. Es beschleunigt vielmehr eine Abfrage da es nicht so speicherintensiv ist.

    Zitat


    INNER JOIN und , (Komma) sind semantisch gleichwertig ...

    Hier mal schmökern: http://dev.mysql.com/doc/refman/5.1/de/join.html
    Keine bange, ist deutsch ;)

  • Hallo Siekiera,

    Ach.. solange die Abfrage mit dem Kundengruppencheck und "$group_check" im Fixpack 7 kommen...nehme ich die Kritik gerne an.
    :)

    Der der fast alles kann ausser Deutsch.
    :)

  • Ich glaube der $group_check sollte auf die Produkte und nicht auf die Kategorien gemacht werden, ich habe im module/default.php nach der Zeile 177 folgende Zeilen eingefügt (Fixpack 7):

    175 if($_SESSION['customers_status']['customers_fsk18_display'] == '0')
    176 $fsk_lock = ' and p.products_fsk18!=1';
    177
    178 // group_check auf products eingefuegt
    179 // We are asked to show only specific catgeory
    180 if (GROUP_CHECK == 'true') {
    181 $group_check = " and p.group_permission_".$_SESSION['customers_status']['customers_status_id']."=1 ";
    182 }


    Damit klappt die Ausgabe der Produkte, an den select's muss nichts geändert werden.
    Es können jetzt auch einzelne Produkte je nach Kundengruppe ausgeblendet werden.


  • $group_check = " and p.group_permission_".$_SESSION['customers_status']['customers_status_id']."=1 ";

    So prüfst Du aber immer nur auf die Kundengruppe "Neuer Kunde". Das kann bei z.B. mehr als 5 Gruppen noch nicht das gelbe vom Ei sein.


    NACHTRAG: Der Kundengruppencheck ist übrigens mit Deiner Erweiterung 2x vorhanden. Schau mal in Zeile 38-39.

    Einmal editiert, zuletzt von siekiera (7. November 2010 um 22:55)

  • Es wäre schön, wenn der KG-Check grundsätzlich in dem Shop funktionieren würde, ist dies doch auch eine sehr wichtige Funktion.
    Hat das im XTC auch nie funktioniert und wurde nie gefixt oder warum ist das so?

  • Jepp, hab das mal "hübsch" gemacht und in diesem Zuge die ganzen SQL's in dieser Datei "beschleunigt".

  • So. Jetzt will ich dieses Thema nochmals aufgreifen.
    Die default.php ist nachwievor (und auch in der aktuellen v2.0.11.2ce) nicht korrekt umgesetzt.
    In den Zeilen 36-39 findet man zwar:

    Zitat

    if(GROUP_CHECK == 'true') {
    $group_check_c = "AND c.group_permission_".$_SESSION['customers_status']['customers_status_id']." = 1 "; // Kategorie
    $group_check_p = "AND p.group_permission_".$_SESSION['customers_status']['customers_status_id']." = 1 "; // Produkt
    }


    Diese neuen Variablen werden aber im weiteren Verlauf nicht benutzt.
    Also sollte "$group_check_c" in allen Queries für Kategorien und "$group_check_p" in allen Queries für Produkte eingesetzt werden.
    Der Standard-Filter "$group_check" wird im Script "categories_list.php" vorbelegt und ist auch hier aktiv, somit bei den Produkt-Queries falsch.

    Ich habe die if-Anweisung um eine else erweitert und alle $group_check entsprechend ausgetauscht:

    Jetzt klappt es auch mit dem Nachbarn.... :rolleyes: