Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Attributnummer 0 wird nicht angezeigt / damit falsche Übertragung zur WAWI Bug ?

    Viol

    • Fördermitglied
    • Beiträge: 2.271
    Wenn ich einen Artikel habe, dessen Artikelnummer sich aus der Nummer des Artikels plus den Nummern von 2 oder mehr Attributen zusammensetzt, wird eine Attributnummer 0 nicht übertragen.
    Also wenn die Artikelnummer 420, die erste Attributnummer 1 und die zweite 0 ist, wird die 0 nicht übertragen, was in unserer WAWI dazu führt, dass der Artikel unbekannt ist.
    Das lässt sich auch im Demoshop nachstellen, wie an beigefügten Screens zu sehen ist.
    Gibt es dafür eine "einfache" Lösung oder sollte ich ein Ticket dafür einstellen?

    Linkback: https://www.modified-shop.org/forum/index.php?topic=39242.0

    h-h-h

    • modified Team
    • Beiträge: 4.563
    Hallo Viol,
    ja hier könnte ein Ticket erstellt werden.

    modified/admin/includes/modules/products_attributes_action.php [Zeile 89 & 113]

    Code: PHP  [Auswählen]
    if (!empty($value_name[$languages[$i]['id']])) {

    ersetzen mit:

    Code: PHP  [Auswählen]
    if (!empty($value_name[$languages[$i]['id']]) || strlen($value_name[$languages[$i]['id']]) == 1) {

    In PHP ist 0 bzw. '0' als String false und somit empty, womit dann noch in diesem Fall mit strlen oder !== '0' gegengeprüft werden muss.

    Viele Grüße,
    h-h-h

    Viol

    • Fördermitglied
    • Beiträge: 2.271
    Hallo h-h-h,
    habe ein Ticket erstellt und vielen Dank für Deine schnelle Reaktion.
    (Bei mir waren es die Zeilennummern 98 und 123), allerdings wird die 0 mit der Änderung auch nicht übergeben..

    h-h-h

    • modified Team
    • Beiträge: 4.563
    Hallo Viol,
    da werde ich vermutlich etwas falsch verstanden haben.

    Das Speichern der 0 als Attribute-Aritkelnummer im Administrationsbereich funktioniert?
    Oder wurde nicht getestet, da die Daten aus der WaWi kommen?

    Die Darstellung im Backend bei der Bestellung funktioniert nicht?

    /admin/includes/modules/orders_info_blocks.php
    Code: PHP  [Auswählen]
                    if ($model == '') {
                      $model = xtc_get_attributes_model($order->products[$i]['id'], $order->products[$i]['attributes'][$j]['value'],$order->products[$i]['attributes'][$j]['option'], $lang);
                    }
                    echo (!empty($model) ? $attr_model_delimiter . $model : '<br />');

    ersetzen mit:

    Code: PHP  [Auswählen]
                    if (empty($model) && $model !== '0') {
                      $model = xtc_get_attributes_model($order->products[$i]['id'], $order->products[$i]['attributes'][$j]['value'],$order->products[$i]['attributes'][$j]['option'], $lang);
                    }
                    echo (!empty($model) && $model !== '0'  ? $attr_model_delimiter . $model : '<br />');

    Gruß, h-h-h

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.178
    • Geschlecht:
    Das Problem wurde nun in Ticket #1486 festgehalten.

    Grüße

    Torsten

    Viol

    • Fördermitglied
    • Beiträge: 2.271
    @h-h-h:
    Vielen Dank für Deinen Lösungsvorschlag in der
    /admin/includes/modules/orders_info_blocks.php
    Leider ändert sich dadurch das Problem nicht. Der Fehler muss noch irgendwo anders sitzen.
    Das Problem ist auf den Screens eigentlich gut zu erkennen. Wenn ein Attribut die Artikelnummer 0 hat, wird diese nicht im Backend bei der Bestellübersicht angezeigt und von meiner Wawi auch nicht importiert.

    Viol

    • Fördermitglied
    • Beiträge: 2.271
    Hallo,
    ich denke, für die Übergabe der Attributnummer ist die \inc\xtc_get_attributes_model.inc.php zuständig.
    Code: PHP  [Auswählen]
    function xtc_get_attributes_model($product_id, $attribute_name, $options_name, $language='') {
              if ($language == '') $language = $_SESSION['languages_id'];

            $options_value_id_query=xtc_db_query("SELECT pa.attributes_model
                                                            FROM "
    .TABLE_PRODUCTS_ATTRIBUTES." pa
                                                      INNER JOIN "
    .TABLE_PRODUCTS_OPTIONS." po
                                                                 ON po.products_options_id = pa.options_id
                                                                    AND po.language_id = '"
    .(int)$language."'
                                                                    AND po.products_options_name = '"
    .xtc_db_input($options_name)."'
                                                      INNER JOIN "
    .TABLE_PRODUCTS_OPTIONS_VALUES." pov
                                                                 ON pa.options_values_id = pov.products_options_values_id
                                                                    AND pov.language_id = '"
    .(int)$language."'
                                                                    AND pov.products_options_values_name = '"
    .xtc_db_input($attribute_name)."'
                                                           WHERE pa.products_id = '"
    .(int)$product_id."'");
        $options_attr_data = xtc_db_fetch_array($options_value_id_query);
       
        return $options_attr_data['attributes_model'];
      }
    Vielleicht kann da ein php.. Fachmann mir einmal unter die "Arme" greifen.
    Wenn ich die letzte Zeile in
    Code: PHP  [Auswählen]
    return strlen($options_attr_data['attributes_model']);
    ändere, macht er aus der Attributnummer 0 eine 1, was ich leider nicht verstehe oder bin ich auf dem Holzweg?

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.729
    • Geschlecht:
    Im von h-h-h zitierten Code gibt es das

    Code: PHP  [Auswählen]
    echo (!empty($model) ? $attr_model_delimiter . $model : '<br />');

    was dafür verantwortlich ist, daß die Artikelnummer wenn sie 0 ist nicht angezeigt wird.

    Würde dort stehn

    Code: PHP  [Auswählen]
    echo ($model != '' ? $attr_model_delimiter . $model : '<br />');

    würde auch eine 0 angezeigt.
    Die Änderung von h-h-h würde ich rückgängug machen.

    Warum eine Artikelnummer 0 nicht an die Wawi übertragen wird weiß ich nicht.
    Was ist das für eine Wawi ?, gibt es einen Connector ?
    Wie werden die Daten an die Wawi übertragen ?

    Was du mit

    Code: PHP  [Auswählen]
    return strlen($options_attr_data['attributes_model']);

    bezwecken wolltest ist mir nicht klar.
    Du gibst einfach die Anzahl der Zeichen damit zurück und die ist bei einem String '0' natürlich 1.

    Gruß,
    noRiddle

    Viol

    • Fördermitglied
    • Beiträge: 2.271
    Dank für Deine Antwort,
    das Problem mit der WAWI habe ich gelöst, da ich den Connector so angepasst habe, dass er die Attributnummer aus der Datenbank richtig holt.
    Es bleibt unabhängig von der WAWI nur noch der Fehler, dass im Backend des Shops (auch im Demoshop s.a meine Screens) die Attributnummer 0 nicht angezeigt wird.
    Die Änderungen von h-h-h habe ich rückgängig gemacht, da sie keine Veränderung gebracht hatten.
    Das brachte mich auf die \inc\xtc_get_attributes_model.inc.php
    Das strlen war nur ein Versuch, ob damit eine Änderung im Backend erreicht wird, was ja auch der Fall ist.
    Hast Du eine Idee, was man da machen könnte, damit 0 als 0 ausgegeben wird und nicht als null interpretiert wird?

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.729
    • Geschlecht:
    :?:
    Lies meinen Post nochmals, da steht die Lösung doch.

    Gruß,
    noRiddle

    *EDIT*
    Mit
    Zitat
    ...nicht als null interpretiert...
    hat das nichts zu tun.
    Schau einfach mal ins PHP-Manual was empty() genau prüft und was das Ergebnis ist.

    h-h-h hatte es aber auch bereits geschrieben:
    Zitat von: h-h-h
    In PHP ist 0 bzw. '0' als String false und somit empty, ...
    *END_EDIT*

    Viol

    • Fördermitglied
    • Beiträge: 2.271
    Herzlichen Dank, das funktioniert..
    Ich hatte einfach nur die von h-h-h vorgeschlagenen Änderungen rückgängig gemacht, da Du das auch geschrieben hattest:
    Zitat
    Die Änderung von h-h-h würde ich rückgängig machen.
    Nur dass im Original eben genau dies ja steht:
    Code: PHP  [Auswählen]
    echo (!empty($model) ? $attr_model_delimiter . $model : '<br />');
    und für den Fehler verantwortlich ist.
    Auf jeden Fall danke schön, ich werde das im Ticket entsprechend vermerken.
               
    anything