Aide - Recherche - Membres - Calendrier
Version complète : Comment déclarer une nouvelle class?
Forum osCommerce-fr > Les Bases d'OsCommerce MS2 > Fonctionnement
yves66
Salut,
Quelqu'un peut me dire comment on déclare une nouvelle class ?, car j'ai ajouté un champ dans la table orders_products pour l'utiliser dans le bon de commande.
merci
fissiaux

Bizarre !! Il me semble avoir déjà vu ce message il y a 2 ou 3 jours..... Je vais probablement changer de lunettes

Qu'appelles tu une nouvelle classe ? Une classe de quoi ? classe css ? classe objet ?

Décris ton besoin...si tu veux une réponse
yves66
CITATION(fissiaux @ 16 May 2007, 19:09) [snapback]235730[/snapback]
Bizarre !! Il me semble avoir déjà vu ce message il y a 2 ou 3 jours..... Je vais probablement changer de lunettes

Qu'appelles tu une nouvelle classe ? Une classe de quoi ? classe css ? classe objet ?

Décris ton besoin...si tu veux une réponse

Bonjour Fissiaux,
En fait j'ai installer l'oscommerce en local avec EasyPHP pour faire des test, comme j'explique dans ma question j'ai ajouté un champ dans la table orders_products pour l'utiliser dans le bon de commande, et j'ai lu un message sur le forum qui explique qu'il faut déclarer obligatoirement les champs dans les pages
includes\classes\order.php (j'ai ajouté 'weight' => $orders_products['products_weight'],).
[codebox]$orders_products_query = tep_db_query("select orders_products_id, products_id, products_name, products_model,
products_weight, products_price, products_tax, products_quantity, final_price from " . TABLE_ORDERS_PRODUCTS . " where orders_id = '" . (int)$order_id . "'");
while ($orders_products = tep_db_fetch_array($orders_products_query)) {
$this->products[$index] = array('qty' => $orders_products['products_quantity'],
'id' => $orders_products['products_id'],
'name' => $orders_products['products_name'],
'model' => $orders_products['products_model'],
'weight' => $orders_products['products_weight'],
'tax' => $orders_products['products_tax'],
'price' => $orders_products['products_price'],
'final_price' => $orders_products['final_price']);[/codebox]
et dans
admin\includes\classes\order.php (j'ai ajouté 'weight' => $orders_products['products_weight'],).
[codebox]$orders_products_query = tep_db_query("select orders_products_id, products_name, products_model, products_weight,
products_price, products_tax, products_quantity, final_price from " . TABLE_ORDERS_PRODUCTS . " where orders_id = '" . (int)$order_id . "'");
while ($orders_products = tep_db_fetch_array($orders_products_query)) {
$this->products[$index] = array('qty' => $orders_products['products_quantity'],
'name' => $orders_products['products_name'],
'model' => $orders_products['products_model'],
'weight' => $orders_products['products_weight'],
'tax' => $orders_products['products_tax'],
'price' => $orders_products['products_price'],
'final_price' => $orders_products['final_price']);[/codebox]
Et comme après ca ca ne marche pas, j'ai du manquer quelque chose, si je fait un test de commande et que je vérifie dans la base dans orders_products , la colonne products_weight est à 0 donc la valeur ne passe pas dans la commande blush.gif
J'ai donc certainement oublier une étape.


fissiaux
Côté boutique, vas dans checkout_process.php, et cherches :

CODE
    $sql_data_array = array('orders_id' => $insert_id,
                            'products_id' => tep_get_prid($order->products[$i]['id']),
                            'products_model' => $order->products[$i]['model'],
                            'products_name' => $order->products[$i]['name'],
                            'products_price' => $order->products[$i]['price'],
                            'final_price' => $order->products[$i]['final_price'],
                            'products_tax' => $order->products[$i]['tax'],
                            'products_quantity' => $order->products[$i]['qty']);
    tep_db_perform(TABLE_ORDERS_PRODUCTS, $sql_data_array);
    $order_products_id = tep_db_insert_id();


TU dois aussi intervenir ici. Ce que tu as fait, c'est pour le récupérer une fois qu'il aura été stocké. Ici, c'est pour le stocker

PS : c'est la première fois que tu posais cette question ??
yves66
Oui c'est la première fois que je pose cette question, mais ca fait un moment que je galère là dessus.
Je vais faire un tour dans checkout_process.php pour voir, j'y ai pas encore toucher.
Merci encore pour ton aide
yves66
Bonjour,
J'ai ajouté cette ligne 'products_weight' => $order->products[$i]['weight'],
dans checkout_process.php
[codebox]$sql_data_array = array('orders_id' => $insert_id,
'products_id' => tep_get_prid($order->products[$i]['id']),
'products_model' => $order->products[$i]['model'],
'products_weight' => $order->products[$i]['weight'],
'products_name' => $order->products[$i]['name'],
'products_price' => $order->products[$i]['price'],
'final_price' => $order->products[$i]['final_price'],
'products_tax' => $order->products[$i]['tax'],
'products_quantity' => $order->products[$i]['qty']);
tep_db_perform(TABLE_ORDERS_PRODUCTS, $sql_data_array);
$order_products_id = tep_db_insert_id();[/codebox]
mais l'info n'arrive toujours pas à la base de données.
Je ne vois pas ou j'ai pu faire une erreur!!!
yves66
Bonjour,
J'ai refais quelques tests et je me demande si je me suis pas planté au niveau de cette valeur weight, des fois je trouve p.products_weight et des fois products_weight, c'est peut être sa qui ne va pas car moi j'ai déclarer partout products_weight???
Je sais pas!!!
shoprun
Salut

Je pense que c'est uniquement des reqêtes que tu as dû mettre : p.products_weight.
En faite faite ça revient à mettre : products.products_weight, ce qui est plus court et bien pratique, car dans la requête il doit y avoir un truc du genre :
SELECT ......p.products_weight, ...... FROM ".TABLE_PRODUCTS." p ......

Cela dit, si tu veux un petit truc pour tenter de mieux localiser ton problème, essai de mettre un point d'arret (stop).
Dans ton checkout_process, essai cela : (puis faire une commande avec un produit ayant un poids attribué).
CODE
require(DIR_WS_CLASSES.'order.php');
$order = new order;
echo 'Poids du produit:'.$order->products[0]['weight'];
exit; // Un point d'arret ici

A l'endroit où ce situe le exit, tout le code en dessous de celui ci ne sera pas exécuté, donc la commande ne sera pas prise en compte.
Par contre, on tente d'afficher le poids du produit.
Si le poids est affiché, c'est ça à l'air de fonctionner, l'erreur viens plus bas.
Si le poids ne s'affiche pas, l'erreur viendrait très probablement dans la classe order (includes/classes/orders.php).
Ce n'est pas la recette miracle, mais en procédant comme cela on arrive bien souvent à localiser précisemment ou se situe l'erreur.

ATTENTION : il ne faut surtout pas mettre des exit comme cela n'importe où, surtout dans une phase de commande, on risque de provoquer des enregistrements partiels, la base risque fort de ne plus être intègre.

Bon débbugage ...
yves66
Salut shoprun,
Merci pour ton conseil, je vais faire le test.
Là je suis en local donc je risque pas grand chose, mais bon je veux pas terminer avec une usine à gaz a débuger.
a+
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2013 Invision Power Services, Inc.