Alterando o texto do botão "Adicionar ao carrinho" no Magento 2.1.0 (Substituindo arquivo js)

13


Alterei o texto "Adicionar ao carrinho" para "Desejo isso" substituindo " vendor\magento\module-catalog\view\frontend\templates\product\list.phtml".
Mas, quando clico no botão "Quero este" (ou seja, "Adicionar ao carrinho"), o produto é adicionado ao carrinho e, em seguida, novamente o texto "Adicionar ao carrinho" aparece no botão.

Acho que o produto foi adicionado via chamada ajax, é por isso que um texto recém-adicionado não é exibido após a chamada ajax e o texto "Adicionar ao carrinho" é exibido.

Eu tentei isso:

Eu criei uma extensão personalizada Ved_Mymodule .

Eu verifiquei se a extensão está ativa.

Depois disso, segui estas etapas:

app / code / Ved / Mymodule / view / frontend / requirejs-config.js:

var config = {
    map: {
        '*': {
            catalogAddToCart:'Ved_Mymodule/js/customCatalogAddToCart'
        }
    }
};

app / code / Ved / Mymodule / view / frontend / web / js / customCatalogAddToCart.js:

define([
    'jquery',
    'mage/translate',
    'jquery/ui'
], function($, $t) {
    "use strict";

$.widget('Ved_Mymodule.customCatalogAddToCart',$.mage.catalogAddToCart, {

    //Override function
    disableAddToCartButton: function(form) {
        var addToCartButtonTextWhileAdding = this.options.addToCartButtonTextWhileAdding || $t('Adding...');
        var addToCartButton = $(form).find(this.options.addToCartButtonSelector);
        addToCartButton.addClass(this.options.addToCartButtonDisabledClass);
        addToCartButton.find('span').text(addToCartButtonTextWhileAdding);
        addToCartButton.attr('title', addToCartButtonTextWhileAdding);
        console.log('Hello 1');
    },

    enableAddToCartButton: function(form) {
        var addToCartButtonTextAdded = this.options.addToCartButtonTextAdded || $t('Added');
        var self = this,
            addToCartButton = $(form).find(this.options.addToCartButtonSelector);

        addToCartButton.find('span').text(addToCartButtonTextAdded);
        addToCartButton.attr('title', addToCartButtonTextAdded);

        setTimeout(function() {
            var addToCartButtonTextDefault = 'heya..'; //self.options.addToCartButtonTextDefault || $t('Add to Cart..');
            addToCartButton.removeClass(self.options.addToCartButtonDisabledClass);
            addToCartButton.find('span').text(addToCartButtonTextDefault);
            addToCartButton.attr('title', addToCartButtonTextDefault);
        }, 1000);

        console.log('Hello 2');
    }

});

return $.Ved_Mymodule.customCatalogAddToCart;
});

Estou tentando imprimir mensagens falsas no console.

Depois disso: executei a implantação de conteúdo estático. Reindexar os dados. Cache limpo e liberado.

Mas as mudanças não estão aparecendo.

vedu
fonte
Renomeie requirejs-config.jse corrija o local app/code/Ved/Mymodule/view/frontend/requirejs-config.js.
Khoa TruongDinh
As alterações são feitas como você disse, mas ainda não obtêm sucesso. Mas se eu substituir o tema, ele estará funcionando.
26416

Respostas:

10

Você deve substituir o arquivo js do caminho

vendor/magento/module-catalog/view/frontend/web/js/catalog-add-to-cart.js  

Para

app/design/frontend/YourTheme/Packadge/Magento_Catalog/web/js/catalog-add-to-cart.js

Você precisa alterar o texto que deseja deste arquivo.

Deixe-me saber se você tem alguma dúvida.

Suresh Chikani
fonte
Muito obrigado, funcionou. Anteriormente, eu estava tentando substituí-lo usando um módulo personalizado (eu o mencionei na minha pergunta), mas não funcionou. Ao copiar o arquivo para o meu tema, funcionou. Mas não se esqueça fazer fogo: php configuração bin / magento: upgrade
Vedu
@Suresh Chikani, por que js é melhor que o tradutor de idiomas?
Birjitsinh Zala 19/12/19
Algum tempo, o código de conversão CSV não está funcionando. Nesse caso, você precisa mudar para o texto JS.
Suresh Chikani
7

você precisa substituir catalog-add-to-cart.js do path,

vendor/magento/module-catalog/view/frontend/web/js

O texto está mudando daqui após uma chamada ajax. você pode alterar o texto aqui.

Rushvi
fonte
6

O texto foi alterado por Javascript após a chamada do Ajax. Podemos dar uma olhada:

fornecedor / magento / catalog-module / view / frontend / web / js / catalog-add-to-cart.js

Para as melhores práticas, deve usar mixins "overriding":

Podemos criar um módulo e adicionar esses arquivos:

app / code / Vendor / Module / view / frontend / requirejs-config.js

var config = {
    config: {
        mixins: {
            'Magento_Catalog/js/catalog-add-to-cart': {
                'Vendor_Module/js/catalog-add-to-cart-mixin': true
            }
        }
    }
};

app / code / Vendor / Module / view / frontend / web / js / catalog-add-to-cart-mixin.js

define([
        'jquery',
        'mage/translate',
        'jquery/ui'
    ],
    function ($, $t) {
        'use strict';

        return function (target) {
            $.widget('mage.catalogAddToCart', target, {
                options: {
                    addToCartButtonTextWhileAdding: $t('Adding Testing...'),
                    addToCartButtonTextAdded: $t('Added Testing'),
                    addToCartButtonTextDefault: $t('Add to Cart Testing')
                }
            });

            return $.mage.catalogAddToCart;
        };
    });
Khoa TruongDinh
fonte
Eu tentei seus passos, mas não obtive nenhum sucesso. Eu editei minha pergunta com meu código.
vedu
1
@Khoa TruongDinh Trabalho perfeito.
precisa saber é o seguinte
Isso é trabalhado para mim.
55840
2

Nota: o abaixo foi testado no 2.1.7


Substituir qualquer arquivo principal é considerado uma má prática.

Você pode simplesmente passar parâmetros para a função catalogAddToCart, que pode ser encontrada na parte inferior do list.phtml

Se você procurar (não edite ou copie) o arquivo catalog-add-to-cart.js, verá que ele aceita parâmetros.

fornecedor / magento / catalog-module / view / frontend / web / js / catalog-add-to-cart.js

options: {
    processStart: null,
    processStop: null,
    bindSubmit: true,
    minicartSelector: '[data-block="minicart"]',
    messagesSelector: '[data-placeholder="messages"]',
    productStatusSelector: '.stock.available',
    addToCartButtonSelector: '.action.tocart',
    addToCartButtonDisabledClass: 'disabled',
    addToCartButtonTextWhileAdding: '',
    addToCartButtonTextAdded: '',
    addToCartButtonTextDefault: ''
},

Em seguida, abra list.phtml dentro do seu tema

app / design / frontend / Namespace / theme / Magento_Catalog / template / product / list.phtml

Na parte inferior da página, você encontrará

<?php if (!$block->isRedirectToCartEnabled()) : ?>
    <script type="text/x-magento-init">
    {
        "[data-role=tocart-form], .form.map.checkout": {
            "catalogAddToCart": {}
            }
        }
    </script>
<?php endif; ?>

Basta adicionar parâmetros à função ...

<?php if (!$block->isRedirectToCartEnabled()) : ?>
    <script type="text/x-magento-init">
    {
        "[data-role=tocart-form], .form.map.checkout": {
            "catalogAddToCart": {
                "addToCartButtonTextDefault" : "<?php /* @escapeNotVerified */ echo __('Add to Cart') ?>"
            }
        }
    }
    </script>
<?php endif; ?>

No meu caso, adicionei uma tradução para 'Adicionar ao carrinho' em en_GB.csv, mas isso pode não ser adequado para seu objetivo, então vá em frente e edite-a aqui diretamente.

Dan Norris
fonte
2

Por favor, tente isso ... Para traduzir o texto das respostas "Adicionar ao carrinho", "Adicionando ..." e "Adicionado" pela json, siga as etapas abaixo.

Etapa 1: Para as alterações necessárias na página da lista de produtos. Vá para o caminho do arquivo app / design / frontend / Your_Theme_Namespace / Theme_Name / Magento_Catalog / templates / product / list.phtml e substitua o código abaixo on-line em torno de 121

<script type="text/x-magento-init">
{
    "[data-role=tocart-form], .form.map.checkout": {
        "catalogAddToCart": {
            "product_sku": "<?php /* @escapeNotVerified */  echo $_product->getSku() ?>",
            "addToCartButtonTextDefault": "<?php echo __('Add to Cart'); ?>",
            "addToCartButtonTextWhileAdding": "<?php echo __('Adding...'); ?>",
            "addToCartButtonTextAdded": "<?php echo __('Added'); ?>"
        }
    }
 }
</script>

Etapa 2: para alterações, é necessário exibir a página de visualização do produto. Vá para o caminho do arquivo app / design / frontend / Your_Theme_Namespace / Theme_Name / Magento_Catalog / templates / product / view / addtocart.phtml e substitua o código on-line em torno de 54

 <script>
    require([
        'jquery',
        'mage/mage',
        'Magento_Catalog/product/view/validation',
        'Magento_Catalog/js/catalog-add-to-cart'
    ], function ($) {
        'use strict';
        $('#product_addtocart_form').mage('validation', {
            radioCheckboxClosest: '.nested',
            submitHandler: function (form) {
                var widget = $(form).catalogAddToCart({
                    bindSubmit: false,
                    "addToCartButtonTextDefault": "<?php echo __('Add to Cart'); ?>",
                    "addToCartButtonTextWhileAdding": "<?php echo __('Adding...'); ?>",
                    "addToCartButtonTextAdded": "<?php echo __('Added'); ?>"
                });

                widget.catalogAddToCart('submitForm', $(form));

                return false;
            }
        });
    });
</script>

Execute os comandos abaixo:

  1. php bin / magento setup: static-content: deploy pt_BR ja_JP zh_Hans_CN

  2. php bin / magento cache: flush Eu tentei isso e está funcionando para mim.

Bhaumik Rana
fonte
1

Você pode estender o catálogo ao carrinho, em vez de substituir o arquivo inteiro. Isso permitirá que você substitua certas funções e adicione opções personalizadas para atender às suas necessidades - parece que você deseja fazer isso.

Essa é uma abordagem melhor, pois usa a funcionalidade original e você muda o que precisa, em vez de copiar tudo.

Apenas certifique-se de solicitá-lo em seu catálogo personalizado e adicionar ao carrinho JS, como mostrado neste exemplo.

requirejs-config.js

var config = {
    map: {
        '*': {
            catalogAddToCart:'Ved_Mymodule/js/customCatalogAddToCart'
        }
    }
};

customCatalogAddToCart.js

define([
    'jquery',
    'mage/translate',
    'jquery/ui',
    'Magento_Catalog/js/catalog-add-to-cart' // Important, require the original!
], function($, $t) {
    'use strict';

    $.widget('Ved_Mymodule.catalogAddToCart', $.mage.catalogAddToCart, {
        options: {
            customOption: 'hello!'
        },

        enableAddToCartButton: function(form) {

            console.log('extended the original add to cart.');
            console.log('my new option', this.options.customOption);

        }
    });

    return $.Ved_Mymodule.catalogAddToCart;
});

Eu usei esta solução com sucesso para editar o carrinho JS, espero que ajude!

jasonujmaalvis
fonte
0

Fazê-lo por arquivo CSV é a melhor e mais simples maneira no Magento 2!

  1. Crie a pasta i18n no seu módulo personalizado como:

    app / code / Vendor / Module / i18n

  2. Crie aqui o arquivo en_US.csv e escreva o rótulo que você deseja alterar como:

    "Add to Cart","Custom Label"

Você pode alterar um número muito bom de rótulos desta maneira, como:

"Add to Cart","Add to Order"
"Go to Checkout","Complete Order"
"Shopping Cart","Current Order"
"Proceed to Checkout","Proceed to Confirm"
"Summary","Details"
"Estimate Shipping and Tax","Aproximate Sum"
"You added %1 to your shopping cart.","Successfully added %1 to your current order."
"Add Your Review","Add Review"

É bom ver outras respostas :)

Ajwad Syed
fonte