Quindi ho trascorso ore e ore letteralmente a cercare, leggere, studiare ect, ma nessuno (nemmeno Alan Storm!) Me lo ha spiegato. Sembra che Internet sia interessato ad aggiungere JS o CSS a una determinata pagina di Magento 2, ma quello che sto cercando è l'aggiunta di JS / CSS a un blocco particolare .
Quindi, ecco la mia domanda in breve:
Qual è il modo migliore per aggiungere JS (e inoltre CSS) a un blocco particolare , in modo che se il blocco è presente sulla pagina (*) viene caricato JS / CSS, se il blocco non è presente, nessun CSS / JS? ?
* Ciò significa che è possibile impostare un blocco, su una pagina / modello tramite layout.xml, su una pagina personalizzata dal mio modulo, tramite il metodo toHtml di un blocco / pagina o, soprattutto, un blocco incorporato in un WYSIWYG di una categoria / descrizione del prodotto / blocco CMS / pagina CMS.
Ho letto MOLTI grandi articoli di Alan (ancora complimenti a questo ragazzo !!), per non parlare delle risme di altri articoli intorno a questo , tuttavia ho la sensazione che tutti vogliano aggiungere a una pagina, una pagina specifica, non dove mai il viene utilizzato il blocco.
Sento di avere familiarità con le varie tecniche, tuttavia potrei mancare qualcosa qui, quindi mi piacerebbe un consenso da parte della comunità, così come forse un po 'di segnale per tutti i front end attraverso gli sviluppatori full stack che cercano domande simili e ponderando le opzioni come me.
In precedenza, in Magento 1, guardavo al costruttore di blocchi, ottenevo il layout, ottenevo il riferimento principale e chiamavo addJs / addCss lì, o se possibile utilizzavo i metodi in layout.xml. Ciò significherebbe che JS è stato "aggiunto" all'elenco delle risorse sul costruttore di blocchi (prima che il livello del tema emettesse il blocco head). Ma questo non sembra possibile ora.
Ho letto su come fare per aggiungere JS / CSS (questo non è un semplice "come faccio ???" questo è un più consise "qual è il modo corretto / mag2 ???") e ho familiarità con questi tecniche:
- /view/[area lasting/layout/[default/page_id×.xml tecnica, usando gli
<head></head>
elementi root - Aggiunta di un blocco Head al mio modulo, aggiunto in head.additional, con una sorta di logica per quanto riguarda se il mio blocco è caricato
- usando gli oggetti \ Asset \ GroupedCollection e \ Asset \ Repository per iniettare dal costruttore di una pagina / modello (questo non sembra ork con i blocchi però), potenzialmente l'ordine di caricamento ??
- Utilizzo di RequireJS e applicazione di una configurazione requestJS al mio modulo
Mi sono perso qualcosa ??
Si ritiene che il modo corretto sarebbe quello di utilizzare la libreria RequireJS e gli attributi x-magento-init o solo uno script con una require("my_module", function(){ ... })
sintassi in uno script inline. Ma questo mi sembra klunky? Dovrei impostare degli script per caricare gli script, sono costretto a incorporare almeno alcuni dei miei JS, tuttavia sembra il modo più delicato di dire "ecco il mio blocco, ora mi richiede un po 'di JS", inserendolo nel mio phtml.
Tuttavia, mi piacerebbe davvero poterlo fare tramite PHP, come programmatore backend / stack mi piacerebbe idealmente incapsulare il JS e (idealmente) consentire al mio team di front-end di scrivere questo come lo desiderano. In breve, prenditi cura del caricamento (Back End Dev to Frond End Dev "ecco il phtml, sostituisci il tema se vuoi, allo stesso modo ecco il file js, le sue librerie dipendenti ed ecco i css per il blocco").
Questo suggerisce il __construct
metodo con dipendenze iniettate sul sistema delle attività. Non riesco comunque a farlo funzionare, questo sembra essere confermato nell'articolo rapido di Alan Storms qui: Magento Quickies: Magento 2: Aggiunta di file di risorse frontend a livello di codice
Nota il segno "Quindi qualsiasi pensiero sulla creazione di blocchi che portano con sé i loro asset frontend è fuori dalla finestra." ... bummer :(
Grazie ragazzi per aver dedicato del tempo a leggere e considerare . Non vedo l'ora di sentire le tue risposte!
PS> Ovviamente questo è StackExchange, quindi segnerò la risposta come il miglior corso per quello che sto cercando di ottenere (blocco del caricamento di risorse specifiche), tuttavia cercherò di elencare anche come riferimenti nella parte inferiore del mio post tutte le risposte che si aggiungono alla discussione o suggeriscono una soluzione solida!