JS'de Magento 2'yi Genişletme / Geçersiz Kılma


34

Magento2 scriptleri yüklemek için RequireJS kullandığından ve daha fazla cilt klasörü bulunmadığından bir sorunla karşılaştım:

Magento'nun JS modülünü değiştirilmiş versiyonumla nasıl değiştirebilirim?

Örneğin - Magento_Checkout uzantısına ait olan opc-checkout-method.js . Requestjs-config.js dosyasında, gördüğüm kadarıyla tanımlanmadı.

Uzantım , Magento_Checkout uygulamasından sonra yüklenir , bu nedenle, bunun sonucu, sonuçta ihtiyaç duyulan-yapılandırma dosyasının sonuna eklenir.

Yoksa tüm betiği değiştirmeden başka bir şekilde mi yapmalıyım?


1
Dosya tarafından yüklenen nesne üzerindeki işlev (ler) i değiştirmek yerine dosyayı değiştirmemeniz gerektiğini hayal ediyorum.
— Peter O'Callaghan

Yanıtlar:


93

Daha fazla cilt klasörü yok ama yine de temaları kullanabilirsiniz.

Bir kavramın kanıtı olarak, size bununla örnek verdim op-checkout-method.js.

Ön koşullar:

  • Magento2-beta11 yüklü
  • Varsayılan tema etkin (boş).
  • pub/staticKlasörde dosya oluşturulmadı (pub / static / frontend klasörünü kaldırın)

Eylemler:

  • Kopyalanan op-checkout-method.js's modülü yerden açabilirsiniz app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.jsboş temaya içinapp/design/frontend/Magento/blank/Magento_Checkout/web/js/opc-checkout-method.js
  • klon dosyası düzenlenebilir ve bir ilave console.log('something')ya da alert('something')içinde _createbir fonksiyonu mage.opcCheckoutMethodParçacık.
  • tarayıcı önbelleğini temizle.

Sonuç:

  • Ödeme sayfası yüklendiğinde, uyarımın görüntülendiğini veya konsolda oturum açan metni görüyorum.

İlgili Bilgi:

Eğer cli'den kaçarsam php dev/tools/Magento/Tools/View/deploy.php(statik kaynakları yayınlayan script) yeni js dosyam yerleştirilirpub/static/frontend/Magento/blank/en_US/Magento_Checkout/js/opc-checkout-method.js

[DÜZENLE]

Bir modül üzerinden yapmanın bir yolunu buldum.

Buna [Namespace]/[Module]/view/frontend/requirejs-config.jsek olarak:

var config = {
    map: {
        '*': {
            'Magento_Checkout/js/opc-checkout-method':'[Namespace]_[Module]/js/opc-checkout-method'
        }
    }
};

Ardından [Namespace]/[Module]/view/frontend/web/js/opc-checkout-method.jsiçeriğinizle dosyayı oluşturun .

Test amacıyla orijinal dosyayı klonladım console.logve _createfonksiyona tekrar bir tane daha ekledim .

Ayrıca, kamu kaynaklarını ön uç için yeniden oluşturmayı da unutmayın.


Sağol Marius! Uzantı içinde benzer şeyler yapmak mümkün mü?
— DmitryR

Bunu bir uzantıdan yaptığınızı sanmıyorum. Ödeme şablonunu tamamen değiştirmediyseniz magento 1'de bu mümkün değildi. Ama bunu yapmanın bir yolunu arayacağım.
— Marius

Tekrar teşekkürler, Marius. Varsayılan olanı geçersiz kılan özelleştirilmiş bir ödeme gerçekleştirmeye çalışıyorum ve JS geçersiz kılmalarına bağlı kaldım.
— DmitryR

1
@DmitryR. Cevabımdaki güncellememe bakın.
— Marius

requjs-config.js için yer şimdi Satıcı / Modül / görünüm / frontend / necessjs-config.js
— Eugen Bogdanovich

11

Varsayılan JS bileşenlerini genişletme / değiştirme hakkında resmi belge: http://devdocs.magento.com/guides/v2.0/javascript-dev-guide/javascript/custom_js.html

Geribildirim açığız!


3
MagentoSE'ye hoş geldiniz. Bu cevabı, sadece bağlantı yerine, cevabı buraya eklerseniz gelecekteki kullanıcılar için daha yararlı olacaktır. Bağlantı gelecekte kırılırsa, arama yapanlar referans verdiğiniz bilgileri bulamazlar.
— AreDubya

2
Bu adil bir nokta ancak 404s riskinin en aza indirilmesi için konular hareket ettiğinde 301 yönlendirmeleri ekliyoruz.
— Steve Johnson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.