Dove inserisco i file .php, .js, .html, .css da una libreria di terze parti che si interfaccia con un'estensione che sviluppo?


10

Diciamo che voglio sviluppare un'estensione Magento che si interfacci, per esempio, con un pacchetto di grafici Open Source o una galleria di immagini o qualunque cosa NON faccia parte dell'estensione stessa. Una volta scaricata (separata dall'estensione) la lib di terze parti arriva nel suo unico .zip con tutti i suoi .php, .js, .html e .css insieme.

Metto sul povero proprietario del sito che desidera installare la mia estensione insieme alla lib di terze parti, l'onere di separare .zip di terze parti originale e farli mettere .js in / js, .php in / lib,. css in / skin ecc?

Oppure esiste una "discarica" ​​generalmente accettata per qualsiasi .zip di terze parti in cui è possibile decomprimere comodamente il download così com'è ed essere eseguito con esso?

Risposte:


6

Non so se esiste una sola risposta corretta a questa domanda poiché dipende davvero dal codice che stai includendo.

Se vuoi includere una libreria php di terze parti, ad esempio un SDK per un'API esterna, allora dovrebbe essere messo nella directory / lib del tuo progetto Magento in modo che possa essere incluso dalla tua estensione che lo consuma.

Comunque stai anche usando js e css come esempi. Se stai usando js di terze parti nella tua estensione per generare il codice di output, ad esempio alcuni js che eseguono il rendering di un diagramma di tela, questo dovrebbe probabilmente essere inserito nella directory / js in modo che possa essere incluso dalla tua estensione. Per i CSS, probabilmente dovrebbe essere aggiunto al tema base / predefinito e alle dir skin.

Sfortunatamente il sistema di estensione Magento 1 non semplifica la distribuzione di questo genere di cose poiché i file sono distribuiti in tutto il progetto piuttosto che autonomi in una singola directory. Strumenti come Magento Composer Installer e Modman aiutano in qualche modo con questo.


4

Una volta scaricata (separata dall'estensione), le estensioni di terze parti sono disponibili in un unico .zip con tutti i suoi .php, .js, .html e .css insieme.

Sono sempre stato un fan delle divinità delle convenzioni dalla fonte stessa, anche se può essere ambiguo con Magento 1.

A condizione che la licenza della libreria di terze parti consenta il raggruppamento, è necessario decomprimerlo e riconfezionarlo insieme all'estensione, poiché non esiste un meccanismo nativo per decomprimere una sotto-libreria separata (potrei sbagliarmi).

La destinazione di queste risorse dipende dal tipo e dall'organizzazione interna dei file. Le librerie Pure JS dovrebbero andare sotto ./js/. I file che vengono eseguiti sul lato server appartengono ./lib/, notando che qualsiasi classe PHP sotto ./lib/può essere caricata automaticamente dallo schema di caricamento automatico (essenzialmente PSR-0) (rif. Convenzione di caricamento automatico Zend Framework 1). Nulla sotto ./lib/può essere (dovrebbe essere) accessibile tramite il client (rif. ./lib/.htaccess).


Grazie Ben. La tua risposta ha senso, ma significa che i proprietari dei siti non possono facilmente aggiornare la libreria di terze parti all'ultima versione, indipendentemente dall'estensione Magento che si interfaccia ad essa. A meno che non capisca intimamente come tutto si blocca insieme e anche allora è doloroso mettere tutti i bit negli slot giusti. Questa è una benedizione nel senso che le versioni di estensione e lib di terze parti rimangono coerenti, ma un dolore quando le nuove versioni della lib di terze parti offrono correzioni di bug e nuove funzionalità pur continuando la retrocompatibilità.
fris,

1
"Questa è una benedizione nel senso che le versioni di estensione e lib di terze parti rimangono coerenti ..." Questo è il biglietto! I loro cambiamenti sono i tuoi cambiamenti. Tutto questo è un po 'più semplice in Magento 2 grazie a Composer.
benmark

1

Quindi vuoi creare un'estensione e stai usando una risorsa / pacchetto esterno per costruirla. A mio avviso, qualunque pacchetto tu abbia usato nella tua estensione, la tua estensione dovrebbe seguire le migliori pratiche di Magento. Ciò significa che dovresti separare tutte le immagini js, css, dalla risorsa esterna e dovrebbero essere inserite nelle base\defaultdirectory dei pacchetti di temi.

vale a dire che non esiste una posizione così unica per posizionare risorse di pacchetti di terze parti. Alla fine, quando fornisci un'estensione interessante, tutti i js, i CSS e le immagini relativi alla tua estensione dovrebbero essere conservati in un posto in cui un altro sviluppatore guarderà normalmente e che in quasi tutti i casi è il base/defaultpacchetto tematico.

In breve

Tutte le estensioni js dovrebbero rientrare

skin\frontent\base\default\js\[your_extension]\[all_of_your_js_files]
skin\frontent\base\default\css\[your_extension]\[all_of_your_css_files]
skin\frontent\base\default\images\[your_extension]\[all_of_your_images]

//for third parties, you can create an inner directory, to specify it
skin\frontent\base\default\js\[your_extension]\[your_external_resource]\[resource_js_files]
skin\frontent\base\default\css\[your_extension]\[your_external_resource]\[resource_css_files]
skin\frontent\base\default\images\[your_extension]\[your_external_resource]\[resource_image_files]

In questo modo, un altro sviluppatore può facilmente trovare js, css e immagini (anche delle tue risorse esterne) della tua estensione. Dato che stai utilizzando una sottodirectory aggiuntiva per indicare i file di risorse esterni all'interno della directory dei nomi delle tue estensioni, fornirà ad altri la migliore idea che la tua estensione si basi su alcuni pacchetti di terze parti.

Quindi ti consiglio di separare i pacchetti esterni e renderli parte dell'estensione in modo che un altro sviluppatore possa facilmente trovare le tue dipendenze. :-)

MODIFICA - 1

Non devi gravare sull'estensione per il proprietario del tuo sito. Puoi evitare questa difficoltà allineando correttamente l'estensione. Ciò significa che, se si salvano tutti i file correlati nelle posizioni di directory specificate, quindi tutto ciò che un proprietario del sito dovrebbe fare è, prendere l'estensione e quindi Unire l'estensione dalla directory radice dell'applicazione. cioè Allineare correttamente l'estensione. Dovrebbe sembrare come questo.

/app
|_____code\community\Namespace\Module\...
|_____design
|        |_____frontend\base\defalt\...
|        |_____adminhtml\base\defalt\...

/skin
|_____frontend\base\default\js|css|images\[your_extension]\all_theme_related_files
|_____frontend\base\default\js|css|images\[your_extension]\all_theme_related_files

MODIFICA - 2

Se ci sono alcuni pacchetti, che dovrebbero condividere tra tutte le applicazioni Magento (come una libreria javascript, un pacchetto php ecc.), Puoi metterli nella \libdirectory.

È vero che potrebbe esistere un file duplicato se due estensioni si basano sugli stessi pacchetti di risorse. Possono utilizzare anche versioni diverse dello stesso pacchetto di risorse. Fondamentalmente, la tua estensione dovrebbe usare solo la risorsa della tua estensione (e può fare affidamento sulle risorse predefinite di Magento) e non dovrebbe fare affidamento sulle risorse di altre estensioni, a meno che la tua estensione non sia una "versione di estensione" di un'estensione di terze parti.


Grazie. La tua risposta favorisce il punto di vista dello sviluppatore, piuttosto che il lato del proprietario del sito. Ma immagino che sia così a Magento? Conosco altri CMS che hanno concordato luoghi per decomprimere archivi / librerie di terze parti, mantenendo tutti i file insieme come sono nell'originale.
fris,

1
Sì. So che è frustrante separare una risorsa pacchetto. Magento lo richiede. Non esiste un modo semplice per farlo. Le migliori pratiche di Magento dicono "Dovresti tenere tutto js, css, imagesnel base\defaultpacchetto". Vedi anche il mio codice di modifica
Rajeev K Tomy,

Ciao Rajeev ... Un'ulteriore conseguenza di mettere i file di risorse / lib esterni in "tua_estensione" è che non possono essere condivisi da altre estensioni che potrebbero usare anche la risorsa / lib. Quindi finisci con più copie, possibilmente diverse versioni di CLASHING, caricate sulla stessa pagina. Ahia!
fris,

vedere le mie modifiche per favore
Rajeev K Tomy,

0

Magento ha un proprio gestore di pacchetti chiamato Magento Connect. È necessario controllare questa guida dalla documentazione ufficiale per comprendere appieno come dovrebbe apparire il pacchetto. Puoi comprimere il tuo modulo da un'installazione Magento dopo aver compreso la struttura.


Grazie per la tua risposta, ma non è proprio quello che stavo chiedendo. Non si tratta di impacchettare la mia estensione, ma di dove nell'albero dei file Magento mettere file di terze parti che NON fanno parte del core o della mia estensione, ma devono essere inclusi come parte del sistema. Dove devo dire agli utenti di mettere quei file? Esiste uno spot (o spot) standard per i file di terze parti?
fris,

In realtà è correlato al link che ti ho inviato. Js e css hanno le loro cartelle per i pacchetti proprio come qualsiasi altro file di estensione. I file php possono trovarsi nella cartella lib root o nella cartella del modulo all'interno di una cartella lib.
mbalparda,

Ok grazie. Quindi la tua risposta è: Sì, i costruttori di siti Magento devono decomprimere l'archivio di terze parti, estrarre le parti PHP, JS, HTML e CSS dall'archivio e ridistribuire quei file negli slot appropriati nella struttura dei file di Magento. NON è considerata la migliore prassi consentire al costruttore del sito di decomprimere semplicemente l'intero archivio di terze parti in una directory concordata appositamente designata a tale scopo da dove le estensioni associate includeranno i file di terze parti secondo necessità.
Fris

Sì. Tutto ciò che hai descritto è già coperto nel processo di imballaggio descritto nella documentazione.
mbalparda,

Bene, ho letto quella documentazione, ma non dice nulla sulla mia domanda. Parla solo di file che fanno parte dell'estensione sviluppata e che si desidera impacchettare. Non dice dove inserire i file di terze parti che NON fanno parte dell'estensione, come un calendario o una galleria di immagini o un pacchetto di creazione di grafici. Potresti non voler comprimerli con l'estensione che stai sviluppando, in modo che possano essere aggiornati in modo indipendente. La domanda diventa allora dove mettere i file di terze parti? Qual è l'approccio delle migliori pratiche per quelli?
fris,

0

Fondamentalmente Magento usa la propria struttura alla presa .php, .phtml, js, css, imagesi file.

Per lo sviluppatore di estensioni magento è molto importante seguire la strada magento. Controlla questo link .

Così,

  1. I tuoi .phpfile dovrebbero andare sotto la app/code/communitycartella
  2. I tuoi jsfile possono andare nella jscartella o nella skin/frontend or adminhtml/your_theme_pack/your_theme/jscartella
  3. I tuoi cssfile possono andare nella skin/frontend or adminhtml/your_theme_pack/your_theme/csscartella
  4. I tuoi imagesfile possono andare nella skin/frontend or adminhtml/your_theme_pack/your_theme/imagescartella
  5. La tua files should go tocartella 'html app / design / frontend o adminhtml / template`

PS frontend indica se l'estensione è per il front store e adminthml indica se l'estensione è per l'area di amministrazione.

Esistono modi specifici per conservare questi file in magento, quindi è necessario seguirli.

Vorrei anche verificare se le funzioni desiderate / di copia sono già disponibili in Magento / Zend Framework. Ad esempio la creazione di pdf, l'invio di e-mail, la lettura di xml ecc. Sono già integrate in magento.

Spero che sia di aiuto.

Aggiornamento 1

Se vuoi semplicemente conservare i tuoi file da qualche parte, puoi tenerli ovunque. Puoi persino creare una nuova cartella all'interno della radice di Magento. Ma questa non è la migliore pratica per magento, che caricherà il tuo server quando eseguirai quei file. Vuoi controllare questo https://magentotherightway.com/


Grazie per il link e la spiegazione. Ma non sto chiedendo l'estensione stessa. Sto chiedendo dove inserire il codice di terze parti non incluso nell'estensione. Esiste un SINGOLO luogo concordato per questo?
fris,

Se vuoi semplicemente conservare i tuoi file da qualche parte, puoi tenerli ovunque. Puoi persino creare una nuova cartella all'interno della radice di Magento. Ma questa non è la migliore pratica per magento, che caricherà il tuo server quando eseguirai quei file. Vuoi controllare questo magentotherightway.com
Adarsh ​​Khatri il

Le estensioni distribuite non devono mai essere installate nel localcodepool.
benmark
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.