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.

  • 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.

  • 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.

  • 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: