Aide - Recherche - Membres - Calendrier
Version complète : [Résolu] Alerte Javascript si Qté produit = 0 /Master Products
Forum osCommerce-fr > Adapter OsCommerce MS2 > Echanges développeurs
concorde44
Bonjour,
J'ai installé master Products
Dans certains pages product-info, j'ai la liste de mes produits esclaves, avec un drop-down qui va de 0 (par défaut) à 10 pour les qtés de chaque article.
Et en dessous un bouton unique "ajouter au panier".
Par défaut, les qtés sont à zéro, il est aisé pour le client de cliquer dessus et de tomber sur la page shopping cart "votre panier est vide".

aussi j'essaye sans succès de tester si , au clic sur le bouton acheter, au moins une des quantités est différente de 0 pour continuer sinon alert java "veuillez ajouter au moins un produit à votre panier".

Voici ce que j'ai essayé dans le product_info :
J'ai encapsulé le bouton au panier par :

CODE
<a href="#" onClick="java script:validepanier();">
<?php  echo tep_draw_hidden_field('products_id', $product_info['products_id']) . tep_image_submit('button_in_cart.gif', IMAGE_BUTTON_IN_CART);
?>
</a>


Et dans le head du product info :
CODE
&lt;script language="javascript"><!--
function validepanier() {
var qte = 0;
form=document.cart_quantity;
for (a = 0; form['qty[' + a + ']'] != null; a++)
if (form['qty[' + a + ']'].value > 0)
{
qte = 1;
alert(' test ok 1 produit au panier ');
break;
}
                                    
else
{
alert('qté = 0');
return false;
}
}
//--></script>


Je pense que c'est document.cart_quantity; qu'il ne sait pas lire. Auriez vous une piste ?
Merci
Seb
xaglo
je ne suis pas spécialiste javascript (doux euphémisme) mais "document.cart_quantity" ne me semble pas valide comme valeur de contrôle. Il devrait être de la forme "document.nom_formulaire.nom_champ.value"
Ensuite je ne comprend pas ce que tu fais avec la boucle form['qty[' + a + ']'] et je doute de sa validité, mais bon, je ne connais pas ton script et je suis définitivement nul en javascript blush.gif

Enfin, pas la peine d'ajouter une balise <a> pour intégrer ton "onClick". La fonction tep_image_submit() crée déjà le lien!!!
Pour ajouter le contrôle, il suffit de mettre un quatrième argument à ton formulaire tep_draw_form('nom', lien, 'post', 'onSubmit="return validepanier();"')

Espérant que tout cela t'aide

Bon code
concorde44
Merci Xaglo,
Je ne connaissais pas l'astuce du tep_draw_form.

Finalement en épluchant des posts du forum US, j'ai trouvé une solution différente. Je la posterais sem. prochaine quand je serasi sur mon poste de travail. Il faut passer par application_top dans les "case" : case_buy_now ou dans mon cas case add_slave.

Seb
concorde44
Voici la solution trouvée, modifiée et que j'ai appliquée. (au départ il fallait jouer avec le messagestack, mais je préfèreais la soluce java et alert, plus visible)
Fonctionne pour la contrib Master products :

Dans catalog/includes/application_top.php
Modifier case 'add_slave' de cette façon (teste si au moins une qté est différente de 0)
CODE
//Master Products
     // customer adds multiple products from the master_listing page
     case 'add_slave' :
                             reset($HTTP_POST_VARS);
                             // BOF prevent redirect if zero quantity
                             $count_nonzero_products = '0';
                             // EOF prevent redirect if zero quantity
                            
                             while ( list( $key, $val ) = each( $HTTP_POST_VARS ) ) {
                               if (substr($key,0,11) == "Qty_ProdId_") {
                                 $prodId = substr($key,11);
                                 $qty = $val;
                                
                             // BOF prevent redirect if zero quantity
                                if ($qty > '0'){
                                $count_nonzero_products = $count_nonzero_products + 1;  
                             // EOF prevent redirect if zero quantity                        
                                
                                 if(isset($HTTP_POST_VARS["id_$prodId"]) && is_array($HTTP_POST_VARS["id_$prodId"])) {                                
                                   // We have attributes
                                   $cart->add_cart($prodId, $cart->get_quantity(tep_get_uprid($prodId,$HTTP_POST_VARS["id_$prodId"]))+$qty, $HTTP_POST_VARS["id_$prodId"]);
                                 } else {
                                   // No attributes
                                   $cart->add_cart($prodId, $cart->get_quantity($prodId)+$qty);
                                 }
                               }
                              }                        
                             }

   tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters)));
                            
                             break;
     //Master Products EOF


Et dans le catalog/includes/product_info.php rajouter à la suite du bouton acheter:
CODE
<?php  echo tep_draw_hidden_field('products_id', $product_info['products_id']) . tep_image_submit('button_in_cart.gif', IMAGE_BUTTON_IN_CART);

// alerte java si qté=0
if ($count_nonzero_products == '0') {
echo "&lt;script language=javascript><!--
setTimeout('alert(\'Merci de renseigner au moins une quantié à ajouter au panier!\')',1000);

//--></script>";
}
?>


J'ai rajouté un timeout sinon l'alerte se faisait sur une page blanche.

Seb
Ninouche
Bonjour,
j'essaie de l'installer mais ça ne fonctionne pas. Peut-être à cause de mes petites modifications, voilà mon code:
Code
<?php
   if ($product_check['total'] >= 1) {
      include (DIR_WS_INCLUDES . 'products_next_previous.php');
   }
   ?>

      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '30'); ?></td>
      </tr>
      <tr>
        <td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox3">
          <tr class="infoBoxContents2">
            <td><table border="0" width="100%" cellspacing="0" cellpadding="2">
              <tr>
                <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                <td class="main"><?php echo '<a href="' . tep_href_link(FILENAME_PRODUCT_REVIEWS, tep_get_all_get_params()) . '">' . tep_image_button('button_reviews.gif', IMAGE_BUTTON_REVIEWS) . '</a>'; ?></td>  
<!-- BOF Printer Friendly Product Info Page //-->
                <td class="main" align="center"><?php echo '<a href="' . tep_href_link(FILENAME_PRODUCT_PRINT, tep_get_all_get_params()) . '" target="_blank">' . tep_image_button('button_print_view.gif', IMAGE_BUTTON_PRINT_VIEW) . '</a>' ?></td>
<!-- EOF Printer Friendly Product Info Page //-->
                <td class="main" align="right">

        <!--<table border="0" align="right">
             <tr>
            <td align="center">
                 <?php echo TEXT_ENTER_QUANTITY . ":" . tep_draw_input_field('cart_quantity', $pf->adjustQty(1), 'size="6"'); ?>
            </td></tr>
             <tr><td align="center">//-->

                      <?php echo tep_draw_hidden_field('products_id', $product_info['products_id']) . tep_image_submit('button_in_cart.gif', IMAGE_BUTTON_IN_CART); ?>
                    <!--</td></tr>
              </table>//-->
                </td>
                <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
              </tr>
            </table></td>
          </tr>
        </table></td>
      </tr>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
      <tr>
        <td>
<?php
    if ((USE_CACHE == 'true') && empty($SID)) {
      echo tep_cache_also_purchased(3600);
    } else {
      include(DIR_WS_MODULES . FILENAME_ALSO_PURCHASED_PRODUCTS);
    }
  }
?>
        </td>
      </tr>
    </table></form></td>
<!-- Master Products EOF //-->
et le voici modifié
Code
<?php
   if ($product_check['total'] >= 1) {
      include (DIR_WS_INCLUDES . 'products_next_previous.php');
   }
   ?>

      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '30'); ?></td>
      </tr>
      <tr>
        <td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox3">
          <tr class="infoBoxContents2">
            <td><table border="0" width="100%" cellspacing="0" cellpadding="2">
              <tr>
                <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
                <td class="main"><?php echo '<a href="' . tep_href_link(FILENAME_PRODUCT_REVIEWS, tep_get_all_get_params()) . '">' . tep_image_button('button_reviews.gif', IMAGE_BUTTON_REVIEWS) . '</a>'; ?></td>  
<!-- BOF Printer Friendly Product Info Page //-->
                <td class="main" align="center"><?php echo '<a href="' . tep_href_link(FILENAME_PRODUCT_PRINT, tep_get_all_get_params()) . '" target="_blank">' . tep_image_button('button_print_view.gif', IMAGE_BUTTON_PRINT_VIEW) . '</a>' ?></td>
<!-- EOF Printer Friendly Product Info Page //-->
                <td class="main" align="right">

        <!--<table border="0" align="right">
             <tr>
            <td align="center">
                 <?php echo TEXT_ENTER_QUANTITY . ":" . tep_draw_input_field('cart_quantity', $pf->adjustQty(1), 'size="6"'); ?>
            </td></tr>
             <tr><td align="center">//-->

                      <?php echo tep_draw_hidden_field('products_id', $product_info['products_id']) . tep_image_submit('button_in_cart.gif', IMAGE_BUTTON_IN_CART);

// alerte java si qté=0
if ($count_nonzero_products == '0') {
echo "<script language=javascript><!--
setTimeout('alert(\'Merci de renseigner au moins une quantié à ajouter au panier!\')',1000);

//--></script>";
}?>
                    <!--</td></tr>
              </table>//-->
                </td>
                <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
              </tr>
            </table></td>
          </tr>
        </table></td>
      </tr>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
      <tr>
        <td>
<?php
    if ((USE_CACHE == 'true') && empty($SID)) {
      echo tep_cache_also_purchased(3600);
    } else {
      include(DIR_WS_MODULES . FILENAME_ALSO_PURCHASED_PRODUCTS);
    }
  }
?>
        </td>
      </tr>
    </table></form></td>
<!-- Master Products EOF //-->

Le problème est qu'on peut toujours accéder au panier avec des quantités à 0
concorde44
Et tu as modifié ton : catalog/includes/application_top.php
comme expliqué dans mon dernier post ?

Seb
Ninouche
Oui, j'avais ça
Code
    //Master Products                        
      // customer adds multiple products from the master_listing page
      case 'add_slave' :    
                           foreach ($HTTP_POST_VARS as $keyA => $valueA) {
                               if (substr($keyA,0,11) == "Qty_ProdId_") {  
                               $prodId = substr($keyA,11);  
                               if ($valueA <= 0 ) continue;  
                               $cart->add_cart($prodId, $cart->get_quantity(tep_get_uprid($prodId, $HTTP_POST_VARS['id']))+($valueA), $HTTP_POST_VARS['id']);
                             }  
                           }
                           tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters)));
                           break;  

    //Master Products EOF                                              
      // performed by the 'buy now' button in product listings and review page
      case 'buy_now' :        if (isset($HTTP_GET_VARS['products_id'])) {
                                if (tep_has_product_attributes($HTTP_GET_VARS['products_id'])) {
                                  tep_redirect(tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $HTTP_GET_VARS['products_id']));
                                } else {
                                  $cart->add_cart($HTTP_GET_VARS['products_id'], $cart->get_quantity($HTTP_GET_VARS['products_id'])+1);
                                }
                              }
                              tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters)));
                              break;
que j'ai remplacé par
Code
    //Master Products
     // customer adds multiple products from the master_listing page
     case 'add_slave' :
                             reset($HTTP_POST_VARS);
                             // BOF prevent redirect if zero quantity
                             $count_nonzero_products = '0';
                             // EOF prevent redirect if zero quantity
                            
                             while ( list( $key, $val ) = each( $HTTP_POST_VARS ) ) {
                               if (substr($key,0,11) == "Qty_ProdId_") {
                                 $prodId = substr($key,11);
                                 $qty = $val;
                                
                             // BOF prevent redirect if zero quantity
                                if ($qty > '0'){
                                $count_nonzero_products = $count_nonzero_products + 1;  
                             // EOF prevent redirect if zero quantity                        
                                
                                 if(isset($HTTP_POST_VARS["id_$prodId"]) && is_array($HTTP_POST_VARS["id_$prodId"])) {                                
                                   // We have attributes
                                   $cart->add_cart($prodId, $cart->get_quantity(tep_get_uprid($prodId,$HTTP_POST_VARS["id_$prodId"]))+$qty, $HTTP_POST_VARS["id_$prodId"]);
                                 } else {
                                   // No attributes
                                   $cart->add_cart($prodId, $cart->get_quantity($prodId)+$qty);
                                 }
                               }
                              }                        
                             }

   tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters)));
                            
                             break;
     //Master Products EOF
      
      // performed by the 'buy now' button in product listings and review page
      case 'buy_now' :        if (isset($HTTP_GET_VARS['products_id'])) {
                                if (tep_has_product_attributes($HTTP_GET_VARS['products_id'])) {
                                  tep_redirect(tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $HTTP_GET_VARS['products_id']));
                                } else {
                                  $cart->add_cart($HTTP_GET_VARS['products_id'], $cart->get_quantity($HTTP_GET_VARS['products_id'])+1);
                                }
                              }
                              tep_redirect(tep_href_link($goto, tep_get_all_get_params($parameters)));
                              break;
Ninouche
En fait, ce que je ne t'ai pas montré c'est que j'ai intégré la fameuse ligne TEXT_QUANTITY qui se baladait toute seule dans un tableau
Code
<?php
    }
//Master Products  
    if (tep_not_null($product_info['products_url'])) {
?>
      <tr>
        <td class="main"><?php echo sprintf(TEXT_MORE_INFORMATION, tep_href_link(FILENAME_REDIRECT, 'action=url&goto=' . urlencode($product_info['products_url']), 'NONSSL', true, false)); ?></td>
      </tr>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
<?php
    }    
?>
      </tr>    
<?php
    $reviews_query = tep_db_query("select count(*) as count from " . TABLE_REVIEWS . " where products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "'");
    $reviews = tep_db_fetch_array($reviews_query);
    if ($reviews['count'] > 0) {
?>
      <tr>
        <td class="main"><?php echo TEXT_CURRENT_REVIEWS . ' ' . $reviews['count']; ?></td>
      </tr>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
<?php
    }

    if ($product_info['products_date_available'] > date('Y-m-d H:i:s')) {
?>
      <tr>
        <td align="center" class="smallText"><?php echo sprintf(TEXT_DATE_AVAILABLE, tep_date_long($product_info['products_date_available'])); ?></td>
      </tr>
<?php
    } else {
?>
      <!--<tr>
        <td align="center" class="smallText"><?php //echo sprintf(TEXT_DATE_ADDED, tep_date_long($product_info['products_date_added'])); ?></td>
      </tr>//-->
<?php
    }
?>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>
<?php

$master_query = tep_db_query("select products_id from " . TABLE_PRODUCTS . " where products_master LIKE  '%" . $HTTP_GET_VARS['products_id'] . "%'");
$results = tep_db_fetch_array($master_query);
if (($results['products_id'] != null) && ($product_info['products_master_status'] == 1)) { ?>

   <!--<tr>
    <td align="left" class="main">&nbsp;<?php echo TEXT_SLAVE_PRODUCTS; ?></td>
   </tr>-->
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
      </tr>

      <tr class="tableau">
        <td><table border="0" width="400" cellspacing="1" cellpadding="1" class="tableau" align="center" >
          <tr class="tableau">
            <td border="1" BORDERCOLOR="#808080" BGCOLOR="#ffffff"><?php include(DIR_WS_MODULES . FILENAME_MASTER_PRODUCTS); ?></td>
          </tr>
          <?php
    if ($product_info['products_price']>0) {
  
    $qty_array = array();
  
    for ($i=0; $n2 = (($product_info['products_quantity'] < 20) ? $product_info['products_quantity'] : 20), $i <= $n2; $i++) {
       
    $qty_array[] = array('id' => $i, 'text' => $i);
}
?>
      <tr class="tableau">
        <td border="1" BORDERCOLOR="#808080" BGCOLOR="#e0e0f5"><table border="0" width="100%" cellspacing="0" cellpadding="0">
          <tr>
            <td align="center" class="main"><?php echo '<B>' . TEXT_QUANTITY . '<b>'; ?></td>
            <td align="center" class="main"><?php if ($product_info['products_quantity'] > 0) {
      echo tep_draw_pull_down_menu('Qty_ProdId_' . $product_info['products_id'], $qty_array);
      } elseif ((STOCK_CHECK == 'false')&& ($product_info['products_quantity'] < 1)) {
          $qty_array = array();
            for ($i=0; $ns = 20, $i <= $ns; $i++) {
            $qty_array[] = array('id' => $i, 'text' => $i);
        }    
      echo tep_draw_pull_down_menu('Qty_ProdId_' . $product_info['products_id'], $qty_array);
      } else {
      echo TEXT_STOCK;
}
    echo tep_draw_separator('pixel_trans.gif', '30', '10');
?>
            </td>
          </tr>
        </table></td>
      </tr>
<?php
}
?>  
        </table></td>
       </tr>
<?php    
  }
?>
      <tr>
        <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '50'); ?></td>
      </tr>

peut-être que ça vient de là?
Ce que j'aimerais aussi c'est que la quantité de chaque ligne s'additionne automatique dans cette ligne, pourrais tu m'aider?
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.