#1 (permalink)  
Alt 17.10.2006, 18:28
Neuer Benutzer
 
Registriert seit: 07.05.2005
Beiträge: 8
Standard Artikelnummer größer 2147483647

Hallo,

ich habe seit einiger Zeit XT am laufen und teste es nun schon seit einigen Monaten ganz erfolgreich, da wir es unter anderem an unsere Warenwirtschaft angebunden haben.

Nun haben wir aber ein Problem mit der Länge der Artikelnummern. Diese ist in der Datenbank ja begrenzt auf (int(2147483647)), das haben wir schon geändert und stellt NICHT das Problem dar. Vielmehr macht uns bei diesen langen Artikelnummern das eigentlich System zu schaffen. Wir wissen möglicherweise auch schon woran es liegen könnte.

Im Admin Bereich erhalten wir sowie wir einen Artikel mit einer langen Artikelnummer (z.B. 3510110054) bearbeiten wollen folgende Fehlermeldung.


Warning: reset(): Passed variable is not an array or object in /srv/www/htdocs/web1/html/tlcc.shop/admin/includes/classes/object_info.php on line 22
Warning: Variable passed to each() is not an array or object in /srv/www/htdocs/web1/html/tlcc.shop/admin/includes/classes/object_info.php on line 23



Das liegt daran das die eigentlich Artikelnummer irgendwo mit (int) "gekürzt" wird. Nun haben wir uns schon auf die Suche gemacht, sind aber leider bisher nicht fündig geworden. Mit var_dump() wurde diese Vermutung auch bestätigt. Auch im Öffentlichen Bereich passiert dies. Klicke ich den Artikel mit der produktnummer 3510110054 an, gibt mir var_dump() die $products_id mit (int(2147483647)) aus.

Die Suche im Forum ergab, das wir in der Tabelle "products_model" dies ändern können, diese Tabelle gibt es aber bei uns nicht. Wir benutzen xt:Commerce v3.0.4 SP1.

Wäre sehr schön wenn uns jemand helfen kann, wo wir diesen Mißstand abändern können. Ich gehe mal davon aus, das seitens der Entwickler diese Beschränkung nicht gewollt ist.



Beste Grüsse
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #2 (permalink)  
Alt 17.10.2006, 21:34
xt:Commerce Support Kunde
 
Registriert seit: 24.09.2005
Beiträge: 1.596
Standard

Hallo tomquenten,

da liegst Du ganz richtig. Die products_id wird an vielen (!) Stellen von der (int) Konvertierung "gekürzt".

Musst Du einfach mal nach suchen...

Ben
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #3 (permalink)  
Alt 17.10.2006, 23:27
Benutzerbild von techway
Erfahrener Benutzer
 
Registriert seit: 06.12.2003
Beiträge: 800
Standard

Hi,

products_model ist ein Feld was für die ArtikelNummer vorgesehen ist und dieses findest du in der Tabelle PRODUCTS!

Gruß
Steffen
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #4 (permalink)  
Alt 18.10.2006, 11:58
Neuer Benutzer
 
Registriert seit: 07.05.2005
Beiträge: 8
Standard

Hallo!

Danke erst einmal an @buero-design! Genau das haben wir schon herausbekommen. Ich denke wir sind der Sache auch schon tiefer auf den Grund gekommen. Eventuell kannst auch da schon einen Vorschlag machen bzw. einen Tipp geben.

In der products_info.php wird die classe products.php aufgerufen. In genau dieser classe haben wir schon einiges ausprobiert. Jedoch hört nun auch unser technisches Verständnis auf. In dem Object $this steckt die $products_id bereits gekürzt drin. Nun wollten wir das ganze einfach rückwärts verfolgen, ABER wir kommen nicht dahinter wo das Object $this überhaupt herkommt, geschweige denn wo es seine Informationen erhält.

Es wäre sehr schön wenn uns hier irgendjemand noch einen weiteren Tipp geben kann.



Beste Grüsse
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #5 (permalink)  
Alt 18.10.2006, 16:28
Benutzerbild von techway
Erfahrener Benutzer
 
Registriert seit: 06.12.2003
Beiträge: 800
Standard

Hallo,

mit $this greifst du in der product.php auf die eigene classe product!

und die classe wird in der application_top.php etwa zeile 400 erstellt:
PHP-Code:
require (DIR_WS_CLASSES.'product.php');
// new p URLS
if (isset ($_GET['info'])) {
    
$site explode('_'$_GET['info']);
    
$pID $site[0];
    
$actual_products_id = (int) str_replace('p'''$pID);
    
$product = new product($actual_products_id);
// also check for old 3.0.3 URLS
elseif (isset($_GET['products_id'])) {
    
$actual_products_id = (int) $_GET['products_id'];
    
$product = new product($actual_products_id);
    
}
if (!
is_object($product)) {
    
$product = new product();    


und da ist das (int) drin wie ich sehe

aber warum verwendet ihr den nicht das product_model als Artikelnummer? so ist es doch im Admin-Bereich vorgesehen!!!

Gruß

Steffen
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #6 (permalink)  
Alt 18.10.2006, 16:46
Neuer Benutzer
 
Registriert seit: 07.05.2005
Beiträge: 8
Standard

DANKE @techway!!!!

Das scheint es auf den ersten Blick tatsächlich zu sein! Erster kleiner Test ist erfolgreich!

PHP-Code:
elseif (isset($_GET['products_id'])) {
    
$actual_products_id = (int) $_GET['products_id'];
    
$product = new product($actual_products_id); 
hier haben wir erst einmal (int) $_GET['products_id']; durch (float) $_GET['products_id']; ersetzt, mit var_dump kommt jetzt tatsächlich die volle Artikelnummer! Dadurch ist die Integrität der übergebenen Daten gewährleistet bei gleichzeitiger LANGER Artikelnummer.

Zu Deiner Frage. Wir haben bisher alles darauf abgestimmt immer auf die $products_id zuzugreifen, wie schon eingehend beschrieben haben wir uns einen Connector geschrieben, mit dem wir einfach per Mausklick die Daten in den Shop transferieren.....per ODBC Verbindung. Das jetzt alles wieder zu ändern währe ein heiden Aufwand. Ich denke mit (float) statt (int) kann man doch leben oder nicht?

Vielen, vielen Dank an Dich! Du bist SPITZE!



Beste Grüsse
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #7 (permalink)  
Alt 26.10.2006, 17:50
Neuer Benutzer
 
Registriert seit: 07.05.2005
Beiträge: 8
Standard

Soooo, nachdem wir nun so ziemlich alles ausprobiert und getestet haben gibt es nun doch noch ein Problem. Da wir hier an dieser Stelle auch mal eine Liste posten wollen, wo die ganzen Veränderungen dokumentiert sind und diese auch vollständig sein sollte sind wir nun gehalten dieses eine Problem auch noch in den Griff zu bekommen.

Konkret geht es um folgendes....

- Artikel mit "kleiner Artikelnummer" kann ohne Problem in den Warenkorb gelegt werdem
- Artikel mit "großer Artikelnummer" (also größer 2147483647) kann in Verbindung mit einer Option auch in den Warenkorb gelegt werden
- Artikel mit "großer Artikelnummer" (also größer 2147483647) kann OHNE Option NICHT in den Warenkorb gelegt werden

Selbstverständlich haben wir hier auch schon experimentiert um die Ursache einzukreisen. Wir haben ein weiteren XT Shop aufgesetzt um zu testen ob es möglicherweise an unseren eigenen Modifikation liegt. Jedoch können wir genau dies ausschließen, auch in dem Original XT Shop (also frisch aufgesetzt) ist eine Zugabe eines Artikel mit einer "großen Artikelnummer" OHNE Option nicht möglich. Verschiedene var_dump Ausgaben haben uns hier leider auch nicht weitergebracht. Die Artikelnummer wird nirgends mehr (soweit wir das jetzt verfolgen konnten) "gekürzt". Daran kann es nach unserer Auffassung also nicht mehr liegen. Es muss was mit den Optionen zu tun haben. Wir haben uns dazu auch schon folgende Dateien angesehen....

- shopping_cart.php
- cart_actions.php
- order_details.php
- default.php

In all den Dateien können wir nichts finden, und auch die var_dump Ausgaben ließen keine Rückschlüsse zu WO die Ursache für das Problem liegt. Es wäre schön wenn man uns hier noch einen Hinweis geben kann, was genau passiert in dem PHP Code, wenn ich auf den Button "kaufen" clicke.

Unserer Meinung wird in der cart_actions.php folgender Code aufgerufen
PHP-Code:
        case 'add_product' :
            if (isset (
$_POST['products_id']) && is_numeric($_POST['products_id'])) {
                if (
$_POST['products_qty'] > MAX_PRODUCTS_QTY)
                    
$_POST['products_qty'] = MAX_PRODUCTS_QTY;
                
$_SESSION['cart']->add_cart((float) $_POST['products_id'], $_SESSION['cart']->get_quantity(xtc_get_uprid($_POST['products_id'], $_POST['id'])) + xtc_remove_non_numeric($_POST['products_qty']), $_POST['id']);
//echo $_POST['products_id']."<br>";
//echo var_dump($_SESSION)."<br>";
            
}
            
xtc_redirect(xtc_href_link($goto'products_id='.(float) $_POST['products_id'].'&'.xtc_get_all_get_params($parameters)));
            break; 
Leider können wir in dem Code aber auch nichts finden was die Ursache darstellen könnte. Es wäre schön wenn uns hier jemand einen Tipp geben kann, manchmal sieht man ja den Wald vor lauter Bäumen nicht mehr....

Vielen Dank
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #8 (permalink)  
Alt 26.10.2006, 20:09
Neuer Benutzer
 
Registriert seit: 07.05.2005
Beiträge: 8
Standard

Wir sind noch ein Stück weiter gekommen. Dieser Code hier scheint die Ursache zu sein, bzw. der Verweis auf das Object contents. Artikel die in den Warenkorb gelegt werden verzweigen in die Ausgabe nein, artikel die nicht in den warenkorb gelegt werden können verzweigen in die Ausgabe ja.

Unsere Frage an alle.....
- wo finden wir das Object contents
- welche funktion hat das objeckt

PHP-Code:
    function in_cart($products_id) {
        if (isset (
$this->contents[$products_id])) {
echo 
"ja";
            return 
true;
        } else {
echo 
"nein";
            return 
false;
        }
    } 

Beste Grüsse
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #9 (permalink)  
Alt 26.10.2006, 20:33
Benutzerbild von techway
Erfahrener Benutzer
 
Registriert seit: 06.12.2003
Beiträge: 800
Standard

hi,

contents ist ein array mit den produkten die im warenkorb drin sind!

mach doch am besten dies hier:
Code:
echo "<pre>";
print_r($_SESSION);
echo "</pre>";

d.h. es muss schon beim hinzufügen ein fehler vorkommen, hast du den case 'buy_now' : überprüft (in cart_actions.php)

Gruß
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
  #10 (permalink)  
Alt 26.10.2006, 21:11
Benutzerbild von tutsn
Erfahrener Benutzer
 
Registriert seit: 16.04.2005
Beiträge: 641
Standard

Die products_id ist NICHT die Artikelnummer, sondern die interne Artikel-ID. Die Artikelnummer nennt sich products_model.

Für eure internen Artikelnummern solltet ihr nicht die products_id zweckentfremden!
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Wong this Post!
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
artikelnummer, größer

Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus



Alle Zeitangaben in WEZ +1. Es ist jetzt 11:58 Uhr.

Copyright © 2011 xt:Commerce GmbH / xt:Commerce International Ltd. - All Rights Reserved

xt:Commerce is a SafeCharge brand