Aide - Recherche - Membres - Calendrier
Version complète : Poids toujours visible dans la commande
Forum osCommerce-fr > Adapter OsCommerce MS2 > Modules de Paiement et de Livraison
laurentgo
Bonjour à tous

Je n'ai pas trouvé sur le forum sad.gif

J'utilise le module colissimo en Ms2.2

Requête: Comment faire apparaitre le poids (de la commande complète) lorsque celle ci est Franco de port ?

Après réflexion je me suis aperçu que dans le module/total commande/expédition de l'admin, si je met le port gratuit à 100€, le poids de mon colis disparait.

j'en ai déduit, que "total commande" se base sur le montant de la commande (en€) et lorsque le montant est atteint (comme la tarte....), il passe par dessu le module colissimo qui lui m'affiche le poids. Donc le poids ne figure plus.

Question comment faire "une passerelle" entre les deux afin que même en franco le poids de la commande apparaisse sur la commande.

d'avance merci
Bonbec
Bonjour,

Ma version MS2.2 est tellement modifiée que je ne sais plus si ce que je vais indiquer est d'origine ou pas ...

Dans catalog/checkout_shipping.php, un peu avant les lignes :
Code
// load all enabled shipping modules
  require(DIR_WS_CLASSES . 'shipping.php');
  $shipping_modules = new shipping;

J'ai ceci :
Code
$total_weight = $cart->show_weight();

Cela récupère le poids.
laurentgo
Bonjour

Merci Bonbec.

Je l'ai trouvé aussi :

Code
  $total_weight = $cart->show_weight();
   $total_count = $cart->count_contents();





Mais comme je l'expliquais, apparemment (mais je peux me tromper) il doit il y avoir du code dans le module:

"total commande" (dans lequel "expedition" se trouve pour choisir le port gratuit), qui une fois le montant en € est atteint, viens en amont invalidé ces lignes de code.

ou

une fois le module colissimo mis en place (dans mon cas) celui ci indique le poids, et dans ce cas aussi le module "total commande" viens supplanté le poids.

Ma vision de la chose, on a deux variantes bien différentes une en kgs et l'autre en Euro. Et quelque part une fois le montant en euro atteint une ligne de code dit : "si 100€ atteint, ne plus afficher le poids".

Moi j'aimerais plutôt la version " afficher toujours le poids". Donc apparemment ce code existait déjà (celui de ci dessus dans checkout_shipping), faudrait que je sache où, et quoi, chercher comme code pour passer outre, ou supprimer le fait que l'un prend le dessus sur l'autre.

Qu'en pensez vous ??







laurentgo



blink.gif Pourquoi pas quelques lignes de code supplémentaires qui n'auraient rien n'à voir avec rien.

Juste à la confirmation de la commande, un code qui additionne le poids des articles en horizontale puis en verticale ??


Bonbec
Re,

J'aurais dû préciser un peu plus ma pensée. vu que
Code
$total_weight = $cart->show_weight();

récupère le poids, pour le faire afficher, on peut écrire
Code
echo $cart->show_weight();


PS : pas compris :
Citation
un code qui additionne le poids des articles en horizontale puis en verticale

$cart->show_weight(); donne le poids total du panier, donc le poids de tous les articles additionnés.
laurentgo
Merci BonbecJ'essai ça dés que je rentre, et je post. smile.gif


laurentgo
Bonjour

Bon et bien apres de multiples essais je me suis cassé les dents...

donc avec ce simple code:

Code
<tr>
<td class="main" align="right"><?php echo $cart->show_weight(); ?></td>
</tr>


dans /checkout_confirmation.php , j'ai effectivement le poids total qui s'affiche.

Mais... pck il y a un mais

Ce n'est pas là que j'en ai besoin biggrin.gif

C'est dans l'admin, plus exactement admin/orders.php . que j'en ai besoin.

J'ai fait de multiples essais

j'ai bien trouvé ou se trouvait le total de la commande:

Code
          <tr>
             <td align="right" colspan="15"><table border="0" cellspacing="0" cellpadding="2">
<?php
     for ($i = 0, $n = sizeof($order->totals); $i < $n; $i++) {
       echo '              <tr>' . "\n" .
            '                <td align="right" class="smallText">' . $order->totals[$i]['title'] . '</td>' . "\n" .
            '                <td align="right" class="smallText">' . $order->totals[$i]['text'] . '</td>' . "\n" .
            '              </tr>' . "\n";
     }
?>
             </table></td>
           </tr>
     </table></td>
       </tr>





J'ai compris en lisant ce code que cela fait appel (apparemment) au module "order_total", mais je n'arrive pas à inclure le bon code en partant de : <?php echo $cart->show_weight(); ?>

J'ai éssayé comme dans "checkout confirmation.php d'inclure un <td>un peu partout, mais j'ai compris aussi que cette page "order" dans l'admin est le résultat d'une multitude de requêtes...

Tout ça ce sont mes réflexions j'aimerais bien y arriver, mais un peu de lumiere à ma lanterne serait la bienvenue.






















Bonbec
Ah OK, j'avais pas compris que c'était pour l'admin.

Il y a une solution mais elle est un peu lourde, donc à tester en local.

1) Dans la table orders, ajouter un champ total_weight et le mettre en decimal(5,2)

2) Dans catalog/checkout_process, trouver :
Code
                          'currency_value' => $order->info['currency_value']);
  tep_db_perform(TABLE_ORDERS, $sql_data_array);

et remplacer par :
Code
                          'currency_value' => $order->info['currency_value'],
                          'total_weight' => $cart->show_weight());
  tep_db_perform(TABLE_ORDERS, $sql_data_array);

Vers la fin du fichier, à la suite de tous les tep_session_unregister ajouter :
Code
  tep_session_unregister('total_weight');


3) Dans admin/includes/classes/order.php
Dans le $order_query de function query($order_id), ajouter , total_weight (bien mettre la virgule) juste avant le from " . TABLE_ORDERS
Puis trouver :
Code
$this->info = array('currency' => $order['currency'],
                          'currency_value' => $order['currency_value'],
                          'payment_method' => $order['payment_method'],
                          'cc_type' => $order['cc_type'],
                          'cc_owner' => $order['cc_owner'],
                          'cc_number' => $order['cc_number'],
                          'cc_expires' => $order['cc_expires'],
                          'date_purchased' => $order['date_purchased'],
                          'orders_status' => $order['orders_status'],
                          'last_modified' => $order['last_modified']);

Modifier en :
Code
$this->info = array('currency' => $order['currency'],
                          'currency_value' => $order['currency_value'],
                          'payment_method' => $order['payment_method'],
                          'cc_type' => $order['cc_type'],
                          'cc_owner' => $order['cc_owner'],
                          'cc_number' => $order['cc_number'],
                          'cc_expires' => $order['cc_expires'],
                          'date_purchased' => $order['date_purchased'],
                          'orders_status' => $order['orders_status'],
                          'last_modified' => $order['last_modified'],
              'total_weight' => $order['total_weight']);


4) Dans contrib/orders, il suffit d'utiliser <?php echo $order->info['total_weight'];?> pour faire afficher le poids total.
laurentgo



Trop trop cool !!!

j'ai bien lu, et tout compris, et tout trouvé.

sauf au tout début vous écrivez:

"1) Dans la table orders, ajouter un champ total_weight et le mettre en decimal(5,2)"

je pense comprendre que dans admin/orders.php je rajoute une ligne <tr> avec un <td> et tout afin que la valeur du poids apparaisse (enfin je pense que c'est cela....)

mais dois je le rajouter dans un code existant ? et si c'est du php sous quelle forme ? là ça dépasse ma compétence biggrin.gif

On y est, je suis trop content smile.gif

encore merci pour le temps passé





Bonbec
Re,

Pour le 1)
Vu que je suis dans mon atelier de fabrication, je n'ai pas accès à mon ordi qui a PhpMyAdmin pour dire comment faire la manip.
De mémoire, il faut donc se servir de PhpMyAdmin, aller dans la BDD, ouvrir la table orders puis onglet structure
Sous la liste des champs, il y a une ligne avec des choses à cocher pour ajouter un nouveau champ.
Moi je l'ai ajouté en fin de table.
Nom : total_weight
type : decimal
taille/valeur : 5,2
défaut : aucune

Pour le code à insérer dans la page, ce sera dans quelques minutes, ma machine couine, elle a fini son job, faut que je la débarrasse et lance une autre fabrication.
laurentgo



ah!!!, ok c'est dans la base sql !!!

mon ciel ténébreux, s'éclairci biggrin.gif . Prenez votre temps, vu depuis le temps que je bataille.... en tout cas merci




Bonbec
Re,
Citation (laurentgo @ 11 Sep 2017, 15:38) *
... j'ai bien trouvé ou se trouvait le total de la commande:

Code
          <tr>
             <td align="right" colspan="15"><table border="0" cellspacing="0" cellpadding="2">
<?php
     for ($i = 0, $n = sizeof($order->totals); $i < $n; $i++) {
       echo '              <tr>' . "\n" .
            '                <td align="right" class="smallText">' . $order->totals[$i]['title'] . '</td>' . "\n" .
            '                <td align="right" class="smallText">' . $order->totals[$i]['text'] . '</td>' . "\n" .
            '              </tr>' . "\n";
     }
?>
             </table></td>
           </tr>
     </table></td>
       </tr>


Pour afficher le poids juste sous la portion de code que vous aviez donné plus haut, voilà ce qu'il faut faire :
Code
          <tr>
             <td align="right" colspan="15"><table border="0" cellspacing="0" cellpadding="2">
<?php
     for ($i = 0, $n = sizeof($order->totals); $i < $n; $i++) {
       echo '              <tr>' . "\n" .
            '                <td align="right" class="smallText">' . $order->totals[$i]['title'] . '</td>' . "\n" .
            '                <td align="right" class="smallText">' . $order->totals[$i]['text'] . '</td>' . "\n" .
            '              </tr>' . "\n";
     }
?>
             </table></td>
           </tr>
            <tr>
                  <td align="right" colspan="15"><?php echo TABLE_HEADING_WEIGHT . ' : ' . $order->info['total_weight'];?></td>
        </tr>
     </table></td>
       </tr>

laurentgo
Bonjour

j'ai étudié ma base sql

1/ tout en bas de la table orders, j'ai: "currency_value", qui est le seul de la liste à être de type "decimal".

je l'ai ouvert pour "voir".

2/En haut de la table order les colonnes sont "champ" type" interclassement" etc....

J'ai voulu inserer 1 champ nommé "total_weight', et lors de la création il faut que je selectionne les "actions", et là

, et bien je coince wacko.gif qu'est ce que je dois coché ou décocher ????









Bonbec
Bonsoir,

Dans mon PhpMyAdmin, les "actions" ne sont pas obligatoires lors de la création d'un nouveau champs.
Asseyez ceci dans PhpMyAdmin :
Code
ALTER TABLE `orders` ADD `total_weight` DECIMAL(5,2) NOT NULL;
laurentgo
Bonjour

Trop cool cela fonctionne, mais le poids reste à zero.... huh.gif



Même après une simulation tout est ok, mais ça reste à zéro
laurentgo
Bonjour Bonbec,

vous dites en 4 :


Citation
4) Dans contrib/orders, il suffit d'utiliser <?php echo $order->info['total_weight'];?> pour faire afficher le poids total.


Je le met où ?? j'ai éssayé comme cela:

Code
    <tr>
              <td align="right" colspan="15"><?php echo TABLE_HEADING_WEIGHT . ' : ' . $order->info['total_weight'];?></td>
         <td align="right" colspan="15"><?php echo $order->info['total_weight'];?></td>
             </tr>
   </p><p>



mais cela me rajoute un champ, mais qui reste toujours à zéro.




Bonbec
Bonjour,

En fait ma "solution" fonctionne pour les nouvelles commandes, pas les commandes existantes.
Votre essai a été effectué avec une nouvelle commande ?
laurentgo



Oui, oui, à chaque fois je fais une simulation validée complétement jusqu'au bout de la procédure.


Bonbec
Re, OK wacko.gif

Un oubli de ma part, désolé :
Dans le fichier admin/includes/classes/order.php il faut ajouter : , total_weight (bien mettre la virgule) juste avant le from dans le $order_query dans function query($order_id).
laurentgo
Bonjour

non, non, vous ne l'aviez pas oublié:

Citation
3) Dans admin/includes/classes/order.php
Dans le $order_query de function query($order_id), ajouter , total_weight (bien mettre la virgule) juste avant le from " . TABLE_ORDERS


et je l'avais mis:

Code
    function query($order_id) {
       $order_query = tep_db_query("select customers_name, customers_company, customers_street_address, customers_suburb, customers_city, customers_postcode, customers_state, customers_country, customers_telephone, customers_email_address, customers_address_format_id, delivery_name, delivery_company, delivery_street_address, delivery_suburb, delivery_city, delivery_postcode, delivery_state, delivery_country, delivery_address_format_id, billing_name, billing_company, billing_street_address, billing_suburb, billing_city, billing_postcode, billing_state, billing_country, billing_address_format_id, payment_method, cc_type, cc_owner, cc_number, cc_expires, currency, currency_value, date_purchased, orders_status, last_modified, total_weight from " . TABLE_ORDERS . " where orders_id = '" . (int)$order_id . "'");
       $order = tep_db_fetch_array($order_query);





par contre je vous demandais pour:

Citation
4) Dans contrib/orders, il suffit d'utiliser <?php echo $order->info['total_weight'];?> pour faire afficher le poids total.


et je vous ai mis que je l'avais inclus dans:

Code
<tr>
               <td align="right" colspan="15"><?php echo TABLE_HEADING_WEIGHT . ' : ' . $order->info['total_weight'];?></td>
          <td align="right" colspan="15"><?php echo $order->info['total_weight'];?></td>
              </tr>
    </p><p>


et que cela n'a rien changé, à part ajouté un champ affichant quand même zéro.













Bonbec
Re,
Citation (laurentgo @ 22 Sep 2017, 14:32) *
... par contre je vous demandais pour:
Citation
4) Dans contrib/orders, il suffit d'utiliser <?php echo $order->info['total_weight'];?> pour faire afficher le poids total.

et je vous ai mis que je l'avais inclus dans:
Code
<tr>
               <td align="right" colspan="15"><?php echo TABLE_HEADING_WEIGHT . ' : ' . $order->info['total_weight'];?></td>
          <td align="right" colspan="15"><?php echo $order->info['total_weight'];?></td>
              </tr>
    </p><p>

et que cela n'a rien changé, à part ajouté un champ affichant quand même zéro.

Logiquement ceci suffit :
Code
<tr>
       <td align="right" colspan="15"><?php echo TABLE_HEADING_WEIGHT . ' : ' . $order->info['total_weight'];?></td>
</tr>

Mais c'est le fait que ce soit à zéro qui me chiffonne. Soit la valeur n'est pas enregistrée dans la BDD, soit elle n'est pas récupérée.
Je vais regarder de nouveau mon code puisque je l'ai installé sur mon site et chez moi çà fonctionne.
Regardez dans votre BDD si le champ total_weight contient quelque chose.
laurentgo
J'ai modifié:

<tr>
<td align="right" colspan="15"><?php echo TABLE_HEADING_WEIGHT . ' : ' . $order->info['total_weight'];?></td>
</tr>

puis j'ai fait une simulation.

je suis allé dans la BDD et toute la colonne "total_weight" est à 0.00, chaque commande génère bien un "total_weight", mais à 0.00

Raison edit modération : suppression du lien vers PhpMyAdmin pour la sécurité de votre site.
badcape
' soir Bonbec et Laurentgo,
je suis votre échange et ça fait des années que je "bidouille" plus sur Ms2 mais il ne serait pas plus simple de récupérer la donnée shipping_weight -j'me souviens plus dans quel fichier c'était- de la commande concernée?
cool.gif
laurentgo
Bonjour,

j'ai trouvé du "shipping_weight" dans le module colissimo (catalogue\include\modules\shipping\colissimo.php :

Code
/***** Public functions *****/
      function quote($method_id = '') {
       global $order, $shipping_weight, $shipping_num_boxes;</p><p>  if (tep_not_null($method_id)) {
        if (($method_id != 'NORMAL') and ($method_id != 'ECONOM') and
         ($method_id != 'RECOMM') and ($method_id != 'RECOMMCR')) return;
       }</p><p>  $this->quotes = array('id' => $this->code,
                               'module' => MODULE_SHIPPING_COLISSIMO_TEXT_TITLE,
                               'methods' => array());</p><p>  if (tep_not_null($this->icon))
        $this->quotes['icon'] = tep_image($this->icon, $this->title);</p><p>  /* Récupération du colisage effectué par osCommerce (Voir fractionnement des colis dans la classe 'shipping'). */
       $this->poids_unitaire = $shipping_weight;
       $this->nb_boites = $shipping_num_boxes;





laurentgo



BOnjour,

Je n'avance plus sad.gif Si Bonbec pouvait continuer à m'aider...

bonne journée




Bonbec
Bonjour Laurent,

Je suis de retour.
Je vais installer une MS2.2 vierge pour tester ce que j'avais suggéré pour voir ce qui ne va pas.
Comme cela fonctionne sur ma version bidouillée, peut-être que c'est une de mes modifs pour autre chose qui joue un rôle.
La suite dans la soirée.

PS : les tests sont fait en local ou en live ?
Bonbec
Re,

J'ai une version MS2.2 mais je ne peux pas la faire fonctionner, n'ayant pas de vieille version de PHP.
Je n'ai pas le temps de la modifier pour la passer en PHP5.x

Je repose ma question : les tests, c'est en local ou en live ? Ce serait pour voir si $cart->show_weight() contient bien quelque chose avant l'enregistrement (fichier : catalog/checkout_process.php)


laurentgo
Bonjour bonbec;

mille excuses pour le retard de réponse....

tous mes essais sont en live, règlement compris.

encore désolé, et merci de t'en préoccuper smile.gif

La mienne, de Ms2 est toujours en php4.




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-2024 Invision Power Services, Inc.