ใช้ require-config.js เพื่อโหลดไฟล์ที่จำเป็นในทุกหน้า


9

ฉันรู้วิธีใช้require-config.jsในธีมที่กำหนดเอง แต่ฉันต้องการใช้ไฟล์จาวาสคริปต์ที่กำหนดเอง ( myfile.js) ในทุกหน้า ฉันควรเพิ่มไดเรกทอรีใดrequire-config.jsและจะใช้งานอย่างไรจึงจะทำงานได้ตามที่ควร

กรุณาอย่าอ้างอิงถึงหน้าวีโอไอพีอย่างเป็นทางการ


คุณสามารถโทรหา js โดยตรงภายในแท็ก head head ของเค้าโครง XML และคุณได้ js ในแต่ละหน้า
Rakesh Jesadiya

ขอบคุณสำหรับคำตอบ. แต่ถ้าฉันต้องการใช้ require-config และโหลดไฟล์ด้วยไม่เหมือนใน Magento 1?
Anitr

นอกจากนี้ยังรองรับวีโอไอพี 2 คุณสามารถตรวจสอบรูปแบบโฟลเดอร์โมดูล / ชุดรูปแบบ / default_head_block.xml
Rakesh Jesadiya

ใช่ฉันรู้. แต่ฉันต้องการใช้ require-config.js วิธีที่ถูกต้อง
Anitr

คำตอบ:


17

requirejs-config.jsใช้สำหรับการสร้างแผนที่ทรัพยากร JavaScript เราสามารถหาทั้งหมดต้อง configs pub/static/_requirejsใต้:

เท่าที่ผมรู้วิธีที่ถูกต้องในการโหลดสคริปต์ที่กำหนดเองของเราผ่านทางต้อง Js: ใช้แม่แบบที่จะเรียกสคริปต์ของเรา เราจะสร้างเทมเพลตใหม่ด้วยMagento\Framework\View\Element\Templateคลาสบล็อก

หากเราต้องการโหลดไฟล์ js ในทุกหน้าและไม่ต้องการสร้างโมดูลใหม่บล็อกของเราควรอ้างอิงถึงbefore.body.endหรือafter.body.start containerในdefault.xml- โมดูล Magento Theme

ป้อนคำอธิบายรูปภาพที่นี่

app / ออกแบบ / ส่วนหน้า / ผู้ขาย / ธีม / Magento_Theme / รูปแบบ / 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 / ออกแบบ / ส่วนหน้า / ผู้ขาย / ธีม / requirejs-config.js

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

app / ออกแบบ / ส่วนหน้า / ผู้ขาย / ธีม / Magento_Theme / เว็บ / js / customscript.js

define('jquery', function($) {

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

    }(jQuery)
);

เทมเพลตของเราจะเรียกสคริปต์ของเรา: แอพ / การออกแบบ / ส่วนหน้า / ผู้ขาย / ธีม / Magento_Theme / แม่แบบ / custom_js.phtml

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

ล้าง Magento Cache และเรียกใช้การปรับใช้เนื้อหาแบบคงที่: php bin/magento setup:static-content:deploy


ฉันเรียกใช้สคริปต์ของฉัน\app\design\frontend\Enim\blank\Magento_CatalogWidget\templates\product\widget\content\grid.phtmlแต่ฉันมี requirejs-config.js และสคริปต์ในโฟลเดอร์ Theme (แอป / ออกแบบ / ส่วนหน้า / ผู้ขาย / ธีม / requirejs-config.js) ตกลงไหม ปัญหาคือฉันเรียกสคริปต์ของฉันจากหลาย ๆ ที่
Anitr

สคริปต์ของคุณจะมีผลเฉพาะเมื่อtempla‌​tes\product\widget\c‌​ontent\grid.phtmlมีการเรียกแม่แบบ
Khao TruongDinh

ใช่ไม่เป็นไร - ปัญหาอยู่ที่ปัญหานั้น: magento.stackexchange.com/questions/149019//ฉันสงสัยว่าปัญหานี้เชื่อมต่อกับการโทรที่ต้องใช้
Anitr

@KhoaTruongDinh ฉันรู้สึกสับสนเล็กน้อยจากสิ่งนี้ ฉันไม่ได้ทดสอบอย่างถูกต้อง แต่ฉันขวาในการคิดว่าฟังก์ชั่นในการcustom_js.phtmlจะถือว่าเป็นโทรกลับปกติดำเนินการหลังจากการดำเนินการของรหัสที่มีอยู่ภายในcustomscript.js? หรือฉันจะต้องรันโค้ดที่ประกาศcustomscript.jsจากภายในฟังก์ชันในcustom_js.phtmlหรือไม่
Joshua Flood

1
@KhoaTruongDinh ฉันยังสงสัยว่าทำไมคำตอบของ Iveta ระบุว่าคุณafter.body.startควรเปลี่ยนเป็นbefore.body.end?
น้ำท่วมโจชัว

5

ไฟล์ Requirejs-config: แอพ / รหัส / ผู้ขาย / โมดูล / ดู / ส่วนหน้า / requirejs-config.js

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

ไฟล์ js ของคุณควรอยู่ใน: แอพ / รหัส / ผู้ขาย / โมดูล / ดู / ส่วนหน้า / เว็บ / js / myfile.js

ตอนนี้คุณสามารถใช้ที่ใดก็ได้ในไฟล์เทมเพลตโดยวิธีด้านล่าง:

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

ใช่ที่ถูกต้อง. แต่ฉันถามว่าใครรู้วิธีใช้ในโฟลเดอร์ Theme ไม่ขึ้นกับโมดูล - ควรโหลดข้ามหน้าไม่ใช่เฉพาะในโมดูลเดียว
Anitr

คุณสามารถใช้มันในโฟลเดอร์ธีมเช่นกันเพียงแค่เรียกสคริปต์ข้างต้นและคุณสามารถใช้ js ของคุณ
Rakesh Jesadiya

โปรดแจ้งให้เราทราบหากคุณมีปัญหาใด ๆ
Rakesh Jesadiya

มันได้ผลขอบคุณ แต่ถึงกระนั้นฉันกำลังมีปัญหาในสิ่งอื่น ๆ : magento.stackexchange.com/questions/149019//
Anitr

สวัสดีโปรดแจ้งให้เราทราบว่าจะวางไฟล์ขั้นตอนที่ 1 ได้ที่ไหน
Priya

2

depsมีรุ่นที่ง่ายขึ้นโดยใช้เป็น การพึ่งพาในrequirejs-config.jsจะโหลดไฟล์ของคุณเมื่อโหลด requirejs เอง (ทุกที่ในร้าน) นี่คือตัวอย่างวิธีที่requirejs-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

เป็นวิธีทางเลือกสำหรับคำแนะนำของ Khoa ซึ่งเป็นวิธีปฏิบัติที่ดีเยี่ยมของวีโอไอพีคุณสามารถวาง JavaScript ของคุณในไฟล์. phtml ดังนี้:

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

จากนั้นลิงก์ไฟล์ phtml ของคุณจาก default.xml ตามที่อธิบายไว้ในคำตอบของ Khoa แม้ว่าฉันจะแนะนำให้เพิ่มเข้าไปก่อน before.body.end จากนั้นเรียกสคริปต์ JS ของคุณจากภายในcopyright.phtmlดังนี้:

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

copyright.phtml ได้รับการโหลดในทุกหน้าแม้กระทั่งในหน้าเว็บเช่นชำระเงินซึ่งส่วนท้ายถูกตัดออก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.