Magento 2 — Как я могу изменить количество продукта (на странице продукта) с помощью php или js?

#javascript #php #magento #e-commerce #magento2

#javascript #php #magento #электронная коммерция #magento2

Вопрос:

Я ищу способ изменить значение поля количества из кода вместо изменения его вручную на странице продукта.

$Uitkomst должно быть на входе после отправки формы.

Я не смог найти ответ на свою проблему, поэтому буду признателен за любую помощь.

Заранее спасибо.

значение, которое мне нужно для ввода количества, поступает из этой формы:

 <form action="?" method="POST">
   <table>
      <tr>
         <td>
            <input name="breedte" type="text" maxlength="40" placeholder="Breedte (in millimeters)" required>
         </td>
      </tr>
      <tr>
         <td>
            <input name="lengte" type="text" maxlength="40"  placeholder="Lengte (in millimeters)" required>
         </td>
      </tr>
      <tr>
         <td>
            <input type="submit" value="Toevoegen aan winkelwagen">
         </td>
      </tr>
   </table>
</form>
<?php
   if (isset($_POST["lengte"]))
   {
       $Lengte = $_POST["lengte"];
       $Breedte = $_POST["breedte"];
       $Uitkomst = $Lengte * $Breedte;
       echo $Uitkomst;
       
   }
   ?>     
<div class="control">
   <input
      name="qty"
      id="qty"
      value="<?= block->getProductDefaultQty() * 
         1 ?>"
      title="<?= $block->escapeHtmlAttr(__('Qty')) ?>"
      class="input-text qty"
      />
</div>
  

Ответ №1:

Также изменен ответ abit.

Это не обновляет страницу, это то, что вам нужно?

     <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <form onsubmit="event.preventDefault();fillQty();" id="form_id">
       <table>
          <tr>
             <td>
                <input name="breedte" type="text" maxlength="40" placeholder="Breedte (in millimeters)" required>
             </td>
          </tr>
          <tr>
             <td>
                <input name="lengte" type="text" maxlength="40"  placeholder="Lengte (in millimeters)" required>
             </td>
          </tr>
          <tr>
             <td>
                <input type="submit" value="Toevoegen aan winkelwagen">
             </td>
          </tr>
       </table>
    </form>    
    <div class="control">
       <input
          type="text"
          name="qty"
          id="qty"
          value="<?= block->getProductDefaultQty() * 
             1 ?>"
          title="<?= $block->escapeHtmlAttr(__('Qty')) ?>"
          class="input-text qty"
          />
    </div>
    <script>
      function fillQty() {
        $('#qty').val($('input[name="breedte"]').val() * $('input[name="lengte"]').val());
        return false;
      };
    </script>  

Комментарии:

1. .js, который вы прокомментировали, на самом деле, похоже, ничего не делал. По-прежнему возникает та же проблема, я получаю пустую страницу, когда пытаюсь ее открыть. Спасибо за помощь.

2. js, который вы прокомментировали, обновляет страницу при отправке формы, хотя я столкнулся с проблемой «белого экрана».

3. Честно говоря, я действительно не понял вопроса… sry, не могли бы вы объяснить еще немного, может быть, я смогу помочь лучше.

4. Да, конечно, вот моя проблема: мне нужна форма на странице моего продукта, эта форма есть, чтобы клиент мог указать, какой длины (длины) и ширины (ширины) будет его продукт, когда он закажет. поскольку цена моего продукта указана за единицу, мне нужна форма для умножения 2 введенных чисел (следовательно, Lengte * breedte), и ответ должен быть введен в поле qty, чтобы цена продукта зависела от введенных значений. если вам нужны какие-либо дополнительные пояснения, не стесняйтесь спрашивать. Милан Джейкобс.

Ответ №2:

Я нашел решение своей проблемы,

в файле CustomForm.phtml я помещаю

 <?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

/** @var $block MagentoCatalogBlockProductView */
?>
<?php $_helper = $this->helper('MagentoCatalogHelperOutput');?>
<?php $_product = $block->getProduct(); ?>
<div>
    <div class="CalculatorForm">
        <form onsubmit="event.preventDefault();fillQty();" id="form_id">
            <table>
                <tr>
                    <td>
                        <input name="breedte" type="number" maxlength="40" placeholder="Breedte (in millimeters)" required>
                    </td>
                </tr>
                <tr>
                    <td>
                        <input name="lengte" type="number" maxlength="40"  placeholder="Lengte (in millimeters)" required>
                    </td>  
                </tr>  
                <tr>
                    <td>
                        <input type="submit" value="Bereken prijs">
                    </td>
                </tr>
            </table>
        </form>
        <div class="field qty">
            <!--<?php #if ($block->shouldRenderQuantity()) :?>-->
            <label class="label" for="qty"><span><?= $block->escapeHtml(__('Qty')) ?></span></label>
            <div class="control">
                <input type="number"
                    name="qty"
                    id="qty"
                    min="0"
                    value="<?= $block->getProductDefaultQty() * 1 ?>"
                    title="<?= $block->escapeHtmlAttr(__('Qty')) ?>"
                    class="input-text qty"
                    data-validate="<?= $block->escapeHtmlAttr(json_encode($block->getQuantityValidators())) ?>"
                />
            </div>
            <?php #endif; ?>
            <script>
                function fillQty(){
                    $('#qty').val($('input[name="breedte"]').val() * $('input[name="lengte"]').val());
                    return false;};
            </script>
        </div>
    </div>
</div>
  

и в исходном файле addtocart.phtml я помещаю

 <?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

/** @var $block MagentoCatalogBlockProductView */
?>
<?php $_helper = $this->helper('MagentoCatalogHelperOutput');?>
<?php $_product = $block->getProduct();?>
<?php $_product = $block->getProduct(); ?>
<?php $buttonTitle = __('Add to Cart'); ?>
<?php if ($_product->isSaleable()) :?>
<div class="box-tocart">
    <div class="fieldset">
        <div class="control">
            <?php if ($block->shouldRenderQuantity()) :?>
                <input type="number"
                    name="qty"
                    id="qty"
                    min="0"
                    value="<?= $block->getProductDefaultQty() * 1 ?>"
                    title="<?= $block->escapeHtmlAttr(__('Qty')) ?>"
                    class="input-text qty"
                    data-validate="<?= $block->escapeHtmlAttr(json_encode($block->getQuantityValidators())) ?>"
                />
            <?php endif ?>
        </div>
        <div class="actions">
            <button 
                type="submit"
                title="<?= $block->escapeHtmlAttr($buttonTitle) ?>"
                class="action primary tocart"
                id="product-addtocart-button">
                <span>
                    <?= $block->escapeHtml($buttonTitle) ?>
                </span>
            </button>
            <?= $block->getChildHtml('', true) ?>
        </div>
        <?php endif; ?>
        <script type="text/x-magento-init">
        {
            "#product_addtocart_form": {
                "Magento_Catalog/js/validate-product": {}
        }
        </script> 
    </div>
</div>
  

Я также вставил <script src="{{MEDIA_URL}}jQuery-3.3.1.js?v=1.x"></script> заголовок html в серверную часть magento.

это решило мою проблему. спасибо всем.