Użyj pliku config-config.js, aby załadować pliki potrzebne na wszystkich stronach

9

Wiem, jak używać require-config.jsniestandardowego motywu, ale chciałbym używać niestandardowego pliku javascript ( myfile.js) na wszystkich stronach. W którym katalogu powinienem dodać require-config.jsi jak go używać, aby działał tak, jak powinien?

Proszę nie odwoływać się do oficjalnej strony Magento.

Anitr
źródło
Możesz bezpośrednio wywołać js wewnątrz tagu xml head tag i masz js na każdej stronie.
Rakesh Jesadiya,
Dziękuję za Twoją odpowiedź. Ale jeśli chciałbym użyć wymaganej konfiguracji i załadować do niej pliki, nie tak jak w Magento 1?
Anitr
Obsługuje również w Magento 2, możesz sprawdzić układ folderów motywu modułu / default_head_block.xml
Rakesh Jesadiya
Tak, wiem. Chcę jednak poprawnie użyć pliku config-config.js.
Anitr

Odpowiedzi:

17

requirejs-config.jsużywa do tworzenia mapowania zasobów JavaScript . Możemy znaleźć wszystkie wymagają configs pod adresem: pub/static/_requirejs.

O ile mi wiadomo, poprawny sposób ładowania naszego niestandardowego skryptu za pomocą Require Js: użycie szablonu do wywołania naszego skryptu . Stworzymy nowy szablon z Magento\Framework\View\Element\Templatejego klasą bloków.

Jeśli chcemy, aby załadować pliki js na wszystkich stronach i nie chcesz, aby utworzyć nowy moduł, nasz blok powinien odwoływać się do before.body.endlubafter.body.start container w default.xml- moduł Theme Magento.

wprowadź opis zdjęcia tutaj

app / design / frontend / Vendor / Theme / 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>

app / design / frontend / Vendor / Theme / Requjs-config.js

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

app / design / frontend / Vendor / Theme / Magento_Theme / web / js / Customcript.js

define('jquery', function($) {

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

    }(jQuery)
);

Nasz szablon wywoła nasz skrypt: app / design / frontend / Vendor / Theme / Magento_Theme / templates / custom_js.phtml

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

Wyczyść pamięć podręczną Magento i uruchom wdrażanie zawartości statycznej: php bin/magento setup:static-content:deploy

Khoa TruongDinh
źródło
Wzywam mój skrypt \app\design\frontend\Enim\blank\Magento_CatalogWidget\templates\product\widget\content\grid.phtml, ale w katalogu Theme mam skrypt Requjs-config.js i skrypt (app / design / frontend / Vendor / Theme / Requjs-config.js). Czy to jest ok? Problem polega na tym, że dzwonię do mojego skryptu z wielu różnych miejsc.
Anitr,
Twój skrypt wpływa tylko na templa‌​tes\product\widget\c‌​ontent\grid.phtmlwywołanie szablonu .
Khoa TruongDinh
Tak, w porządku - problem tkwi w tym: magento.stackexchange.com/questions/149019 /... Zastanawiam się, czy ten problem jest w jakiś sposób związany z wywołaniem requestjs.
Anitr,
@KhoaTruongDinh Jestem trochę zaskoczony. Nie przetestowałem jeszcze poprawnie, ale czy mam rację sądząc, że funkcja in custom_js.phtmljest traktowana jako zwykłe wywołanie zwrotne, wykonywane po wykonaniu zawartego w niej kodu customscript.js? A może powinienem wykonać kod zadeklarowany customscript.jsz wewnątrz funkcji w custom_js.phtml?
Powódź Jozuego
1
@KhoaTruongDinh Zastanawiam się również, dlaczego odpowiedź Ivety mówi, że after.body.startnależy się zmienić before.body.end?
Powódź Jozuego
5

Plik Requirejs-config: app / code / Vendor / Module / view / frontend / Requjs-config.js

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

Twój plik js powinien znajdować się w: app / code / Vendor / Module / view / frontend / web / js / myfile.js

Teraz możesz użyć dowolnego miejsca w pliku szablonu, korzystając z poniższej metody:

<srcipt>
 require(["jquery","myfile"],function($,myfile){
     $(document).ready(function(){
        //call your js here...
     })
 })
</script>
Rakesh Jesadiya
źródło
Tak, to jest poprawne. Zapytałem jednak, czy ktoś wie, jak go używać w folderze Theme, niezależnie od modułu - powinien być ładowany na całej stronie, nie tylko na jednym module.
Anitr
możesz go również użyć w folderze motywów, wystarczy wywołać powyższy skrypt i możesz użyć swojego js
Rakesh Jesadiya
daj mi znać, jeśli masz jakiś problem
Rakesh Jesadiya,
Działa dzięki. Ale wciąż mam problemy z inną rzeczą: magento.stackexchange.com/questions/149019/…
Anitr,
Cześć. Daj mi znać, gdzie umieścić plik pierwszego kroku?
Priya,
2

Dostępna jest łatwiejsza wersja deps. Zależności w pliku wymagań.js-config.js załadują plik podczas ładowania samego pliku wymagań (wszędzie w sklepie). Oto przykład, jak powinien wyglądać plik Requjs-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 ...
Andrei
źródło
1

Jako alternatywne podejście do rekomendacji Khoa, która jest doskonałą praktyką programistyczną Magento, możesz wkleić JavaScript w pliku .phtml w następujący sposób:

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

Następnie połącz swój plik phtml z pliku default.xml zgodnie z opisem w odpowiedzi Khoa, chociaż polecam dodać go do pliku before.body.end. Następnie wywołaj skrypt JS z poziomu copyright.phtml , w ten sposób:

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

copyright.phtml jest ładowany na każdej stronie, nawet na stronach takich jak kasa, gdzie stopka jest pomijana.

Iveta Allogenes
źródło