Sử dụng request-config.js để tải các tệp cần thiết trên tất cả các trang


9

Tôi biết cách sử dụng require-config.jstrong chủ đề tùy chỉnh, nhưng tôi muốn sử dụng tệp javascript tùy chỉnh ( myfile.js) trên tất cả các trang. Tôi nên thêm vào thư mục require-config.jsnào và sử dụng nó như thế nào để nó hoạt động như bình thường?

Xin vui lòng, không tham khảo trang chính thức Magento.


Bạn có thể gọi trực tiếp js bên trong thẻ head xml layout và bạn có js trong mỗi trang.
Rakesh Jesadiya

Cảm ơn bạn vì câu trả lời. Nhưng nếu tôi muốn sử dụng tệp cấu hình và tải tập tin với nó, không giống như trong Magento 1?
Anitr

Nó cũng hỗ trợ trong magento 2, bạn có thể kiểm tra bố cục thư mục chủ đề mô-đun / tệp default_head_block.xml
Rakesh Jesadiya

Vâng tôi biết. Nhưng, tôi muốn sử dụng request-config.js đúng cách.
Anitr

Câu trả lời:


17

requirejs-config.jssử dụng để tạo ánh xạ tài nguyên JavaScript . Chúng tôi có thể tìm thấy tất cả các cấu hình yêu cầu dưới : pub/static/_requirejs.

Theo tôi biết, cách chính xác để tải tập lệnh tùy chỉnh của chúng tôi thông qua Yêu cầu Js: sử dụng mẫu để gọi tập lệnh của chúng tôi . Chúng tôi sẽ tạo mẫu mới với Magento\Framework\View\Element\Templatelớp khối của nó.

Nếu chúng tôi muốn tải các tệp js trên tất cả các trang và không muốn tạo mô-đun mới, khối của chúng tôi nên tham chiếu đến before.body.endhoặcafter.body.start container trong default.xmlmô-đun Magento Theme.

nhập mô tả hình ảnh ở đây

ứng dụng / thiết kế / frontend / Nhà cung cấp / Chủ đề / Magento_Theme / layout / default.xml

<?xml version="1.0"?>

<page layout="3columns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">

    <referenceContainer name="after.body.start">
        <block class="Magento\Framework\View\Element\Template" name="custom.js" template="Magento_Theme::custom_js.phtml"/>
    </referenceContainer>

</page>

ứng dụng / thiết kế / frontend / Nhà cung cấp / Chủ đề / allowjs-config.js

var config = {
    map: {
        '*': {
            customScript:'Magento_Theme/js/customscript'
        }
    }
};

ứng dụng / thiết kế / frontend / Nhà cung cấp / Chủ đề / Magento_Theme / web / js / Navycript.js

define('jquery', function($) {

    //Your code here
    //alert('Here');

    }(jQuery)
);

Mẫu của chúng tôi sẽ gọi tập lệnh của chúng tôi: app / design / frontend / Vendor / Theme / Magento_Theme / samples / custom_js.phtml

<script>// <![CDATA[
    require([
        'jquery',
        'customScript'
    ], function ($, script) {
        //Your code here
        //alert('Here');
    });
    // ]]>
</script>

Xóa bộ nhớ cache Magento và chạy triển khai nội dung tĩnh: php bin/magento setup:static-content:deploy


Tôi gọi tập lệnh của mình trên \app\design\frontend\Enim\blank\Magento_CatalogWidget\templates\product\widget\content\grid.phtml, nhưng tôi có yêu cầu và tập lệnh trong thư mục Chủ đề (app / design / frontend / Vendor / Theme / allowjs-config.js). Được không Vấn đề là tôi gọi kịch bản của tôi từ nhiều nơi khác nhau.
Anitr

Kịch bản của bạn chỉ ảnh hưởng khi mẫu templa‌​tes\product\widget\c‌​ontent\grid.phtmlđược gọi.
Khoa TruongDinh 7/12/2016

Vâng, điều đó ổn thôi - vấn đề là ở chỗ đó: magento.stackexchange.com/questions/149019/ , tôi tự hỏi liệu vấn đề này có liên quan đến cuộc gọi nào đó không.
Anitr

@KhoaTruongDinh Tôi hơi bối rối vì điều này. Tôi chưa được kiểm tra đúng cách, nhưng tôi có đúng không khi nghĩ rằng hàm trong custom_js.phtmlđược coi là một cuộc gọi lại thông thường, được thực hiện sau khi thực thi mã chứa trong đó customscript.js? Hoặc tôi sẽ cần phải thực thi mã được khai báo customscript.jstừ bên trong hàm trong custom_js.phtml?
Lũ Joshua

1
@KhoaTruongDinh Tôi cũng tự hỏi tại sao câu trả lời của Iveta nói rằng bạn after.body.startnên đổi thành before.body.end?
Lũ Joshua

5

Tệp Requirejs-config: app / code / Vendor / Module / view / frontend / allowjs-config.js

var config = {
    paths: {            
         'myfile': "Vendor_Modulename/js/myfile"
      },   
    shim: {
    'myfile': {
        deps: ['jquery']
    }
  }
} 

Tệp js của bạn phải ở trong: app / code / Vendor / Module / view / frontend / web / js / myfile.js

Bây giờ bạn có thể sử dụng bất cứ nơi nào trong tệp mẫu của mình bằng phương pháp bên dưới:

<srcipt>
 require(["jquery","myfile"],function($,myfile){
     $(document).ready(function(){
        //call your js here...
     })
 })
</script>

Vâng đúng rồi. Nhưng tôi đã hỏi liệu có ai biết cách sử dụng nó trong thư mục Theme không, không phụ thuộc vào Module - nó sẽ được tải trên trang, không chỉ trên một mô-đun.
Anitr

bạn cũng có thể sử dụng nó trong thư mục chủ đề, chỉ cần gọi kịch bản ở trên và bạn có thể sử dụng js của mình
Rakesh Jesadiya

xin vui lòng cho tôi biết nếu bạn có bất kỳ vấn đề
Rakesh Jesadiya

Nó hoạt động, cảm ơn. Tuy nhiên, tôi vẫn gặp vấn đề về một số thứ khác: magento.stackexchange.com/questions/149019/ Khăn
Anitr

Xin chào, xin vui lòng cho tôi biết nơi để tập tin bước 1?
Priya

2

Có một phiên bản dễ dàng hơn bằng cách sử dụng deps. Các phụ thuộc trong tệp certjs-config.js sẽ tải tệp của bạn khi tải chính bản thân nó (ở mọi nơi trong cửa hàng). Dưới đây là một ví dụ về giao diện của bạn theo yêu cầu: configjs-config.js :

var config = {
    // When load 'requirejs' always load the following files also
    deps: [
        'common-js'
    ],

    // Library file path.
    paths: {
        'common-js': 'js/Your-File-Name'
    },

    // The rest of your config file ...

1

Là một cách tiếp cận khác với khuyến nghị của Khoa, đây là cách thực hành tuyệt vời của Magento, bạn có thể dán JavaScript của mình vào tệp .phtml như thế này:

<srcipt>
require(["jquery"],function($){
 $(document).ready(function(){
    your script here...
 })
});
</script>

Sau đó, liên kết tệp phtml của bạn từ default.xml như được mô tả trong câu trả lời của Khoa, mặc dù tôi khuyên bạn nên thêm nó vào trước.body.end. Và, sau đó gọi tập lệnh JS của bạn từ bên trong bản quyền.phtml , như thế này:

<script>
jQuery(document).ready(function($) {
..call your script here ..
});
</script>

bản quyền.phtml được tải trên mỗi trang, ngay cả trên các trang như thanh toán, nơi phần chân trang bị bỏ qua.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.