Vì vậy, tôi đã dành hàng giờ đồng hồ hàng giờ để googling, đọc, nghiên cứu ect, nhưng không ai (kể cả Alan Storm!) Đã đánh vần điều này với tôi. Có vẻ như toàn bộ internet quan tâm đến việc thêm JS hoặc CSS vào một trang cụ thể của Magento 2, nhưng điều tôi đang tìm kiếm là thêm JS / CSS vào một khối cụ thể .
Vì vậy, đây là câu hỏi của tôi một cách ngắn gọn:
Cách tốt nhất để thêm JS (và thêm CSS) vào một khối cụ thể , để nếu khối đó hiện diện trên trang (*) thì JS / CSS được tải, nếu khối đó không có, không có CSS / JS? ?
* Điều này có nghĩa là bất kỳ khối nào cũng có thể được thiết lập, trên một trang / mẫu thông qua layout.xml, trên một trang tùy chỉnh từ mô-đun của tôi, thông qua phương thức toHtml của một khối / trang hoặc quan trọng nhất là một khối được nhúng trong WYSIWYG của một danh mục / mô tả sản phẩm / Khối CMS / Trang CMS.
Tôi đã đọc ALOT về những bài viết tuyệt vời của Alan (Kudos một lần nữa cho anh chàng này !!), chưa kể đến những bài viết khác về điều này , tuy nhiên tôi có cảm giác mọi người muốn thêm vào một trang, một trang cụ thể, không phải ở đâu khối được sử dụng.
Tôi cảm thấy tôi quen thuộc với các kỹ thuật khác nhau tuy nhiên tôi có thể đang thiếu một cái gì đó ở đây vì vậy tôi muốn có sự đồng thuận từ cộng đồng, cũng như một chút bài đăng ký cho tất cả các giao diện người dùng thông qua các nhà phát triển đầy đủ ngoài kia đang tìm kiếm câu hỏi tương tự và cân nhắc các lựa chọn như tôi.
Trước đây, trong Magento 1, tôi sẽ tìm đến hàm tạo khối, lấy bố cục, lấy tham chiếu đầu và gọi addJs / addCss ở đó hoặc nếu có thể sử dụng các phương thức trong layout.xml. Điều này có nghĩa là JS đã được "thêm" vào danh sách thay đổi trên hàm tạo khối (trước khi mức chủ đề sẽ xuất ra khối đầu). Nhưng điều này dường như không thể bây giờ.
Tôi đã đọc về cách tiếp tục thêm JS / CSS (đây không phải là "làm thế nào để tôi ???" đơn giản hơn "đây là cách chính xác / mag2 ???") và quen thuộc với những điều này kỹ thuật:
- /view/[area[/layout/[default/page_id[.xml kỹ thuật, sử dụng các
<head></head>
phần tử gốc - Thêm một khối Head vào mô-đun của tôi, được thêm vào head.additable, với một số loại logic liên quan đến việc nếu khối của tôi được tải
- bằng cách sử dụng \ Asset \ GroupedCollection và \ Asset \ Rep Storage Object để tiêm từ người quản lý trang / Mẫu (điều này dường như không phù hợp với các khối), thực sự là thứ tự tải ??
- Sử dụng RequireJS và áp dụng cấu hình requestJS cho mô-đun của tôi
Tôi có bỏ lỡ điều gì không ??
Mọi người tin rằng cách chính xác sẽ là sử dụng thư viện RequireJS và các thuộc tính x-magento-init hoặc chỉ một tập lệnh có require("my_module", function(){ ... })
cú pháp trong tập lệnh nội tuyến. Nhưng điều này có vẻ klunky với tôi? Tôi sẽ phải thiết lập các tập lệnh để tải tập lệnh, buộc phải nội tuyến ít nhất một số mã JS của tôi, tuy nhiên có vẻ như cách nói dễ hiểu nhất "đây là khối của tôi, bây giờ yêu cầu tôi một số JS", bằng cách đưa mã này vào phtml của tôi.
Tuy nhiên, tôi thực sự muốn có thể thực hiện điều này thông qua PHP, với tư cách là một lập trình viên phụ trợ / ngăn xếp, tôi lý tưởng muốn gói gọn JS và (lý tưởng) cho phép nhóm mặt trước của tôi viết điều này như họ muốn. Nói ngắn gọn, hãy tải (Back End Dev đến Frond End Dev "đây là phtml, ghi đè trong chủ đề nếu bạn thích, tương tự như vậy là tập tin js, libs phụ thuộc của nó và đây là css cho khối").
Điều này cho thấy __construct
phương pháp với Phụ thuộc được tiêm trên hệ thống Tài sản. Tuy nhiên tôi không thể làm việc này, điều này dường như được xác nhận trong bài viết nhanh của Alan Storms tại đây: Magento Quickies: Magento 2: Thêm tập tin tài sản Frontend theo lập trình
Lưu ý ký tắt "Vì vậy, bất kỳ suy nghĩ về việc tạo các khối mang tài sản frontend của họ với họ là ra khỏi cửa sổ." ... bummer :(
Cảm ơn các bạn đã dành thời gian để đọc và xem xét . Tôi mong muốn được nghe phản hồi của bạn!
Tái bút hoặc thêm vào cuộc thảo luận hoặc đề xuất một giải pháp vững chắc!