Di mana saya meletakkan file .php, .js, .html, .css dari lib pihak ke-3 yang berinteraksi dengan ekstensi yang saya kembangkan?

10

Katakanlah saya ingin mengembangkan ekstensi Magento yang antarmuka untuk, katakanlah, paket charting Sumber Terbuka atau galeri gambar atau apa pun yang BUKAN bagian dari ekstensi itu sendiri. Saat diunduh (terpisah dari ekstensi) lib pihak ke-3 datang dengan .zip sendiri dengan semua .php, .js, .html, dan .css bersamaan.

Apakah saya menempatkan pemilik situs yang miskin yang ingin memasang ekstensi saya bersama dengan lib pihak ke-3, beban menarik pihak ke-3 asli .zip terpisah dan buat mereka meletakkan .js di / js, .php in / lib,. css di / skin dll?

Atau apakah ada "tempat pembuangan" yang diterima secara umum untuk pihak ke-3 mana pun. Zip di mana orang dapat dengan mudah mengekstrak unduhan SEBAGAIMANA ADANYA dan selesai dengan itu?

fris
sumber

Jawaban:

6

Saya tidak tahu apakah ada jawaban yang benar untuk pertanyaan ini karena sangat tergantung pada kode yang Anda sertakan.

Jika Anda ingin menyertakan pustaka php pihak ke-3, misalnya sdk untuk API eksternal, maka pustaka tersebut harus diletakkan di direktori / lib proyek Magento Anda sehingga dapat dimasukkan oleh ekstensi Anda yang mengkonsumsinya.

Namun Anda juga menggunakan js dan css sebagai contoh. Jika Anda menggunakan js dari pihak ketiga dalam ekstensi Anda untuk kode output, misalnya beberapa js yang merender bagan kanvas, maka ini kemungkinan besar akan dimasukkan ke dalam direktori / js sehingga dapat dimasukkan oleh ekstensi Anda. Untuk css, mungkin harus ditambahkan ke tema dasar / default dan direktori skin.

Unfortunatley sistem ekstensi Magento 1 tidak membuatnya mudah untuk mendistribusikan hal semacam ini karena file-file tersebut tersebar di seluruh proyek daripada hanya berisi satu dir. Alat-alat seperti Magento Composer Installer dan Modman membantu dengan ini.

Andrew Kett
sumber
4

Saat diunduh (terpisah dari ekstensi) ekstensi pihak ke-3 datang dengan .zip sendiri dengan semua .php, .js, .html, dan .css bersamaan.

Saya selalu menjadi penggemar meramalkan konvensi dari sumber itu sendiri, meskipun itu bisa ambigu dengan Magento 1.

Asalkan lisensi perpustakaan pihak ketiga memungkinkan untuk bundling, Anda harus membongkar dan mengemasnya bersama dengan ekstensi Anda, karena tidak ada mekanisme asli untuk membongkar sub-perpustakaan yang terpisah (saya mungkin salah).

Ke mana aset-aset ini pergi tergantung pada jenis dan organisasi internal file. Pustaka JS murni harus di bawah ./js/. File-file yang dieksekusi di sisi-server berada di bawah ./lib/, mencatat bahwa setiap kelas PHP di bawah ./lib/dapat di-autoload oleh skema autoload (pada dasarnya PSR-0) (ref. Zend Framework 1 konvensi autoload). Tidak ada yang di bawah ./lib/dapat (harus) diakses melalui klien (ref. ./lib/.htaccess)

tanda batas
sumber
Ben terima kasih. Jawaban Anda masuk akal, tetapi itu berarti bahwa pemilik situs tidak dapat dengan mudah memutakhirkan lib pihak ke-3 ke versi terbaru, terlepas dari ekstensi Magento yang terhubung dengannya. Kecuali jika dipahami secara intim bagaimana semuanya tergantung bersama dan bahkan saat itu adalah rasa sakit untuk menempatkan semua bit di slot yang tepat. Ini adalah berkah dalam arti bahwa versi ekstensi dan lib pihak ke-3 tetap konsisten, tetapi menyebalkan ketika versi baru dari lib pihak ke-3 menawarkan perbaikan bug dan fitur-fitur baru sambil melanjutkan kompatibilitas ke belakang.
fris
1
"Ini adalah berkah dalam arti bahwa versi ekstensi dan lib pihak ke-3 tetap konsisten ..." Itulah tiketnya! Perubahan mereka adalah perubahan Anda. Ini semua sedikit lebih mudah di Magento 2 berkat Komposer.
manfaat
1

Jadi Anda ingin membuat ekstensi dan Anda menggunakan sumber daya / paket eksternal untuk membangunnya. Menurut pendapat saya, paket apa pun yang Anda gunakan dalam ekstensi Anda, ekstensi Anda harus mengikuti praktik terbaik Magento. Itu berarti Anda harus memisahkan semua js, css, gambar dari sumber daya eksternal dan harus ditempatkan dalam base\defaultdirektori paket tema.

yaitu tidak ada lokasi unik seperti itu untuk menempatkan sumber daya paket pihak ketiga. Pada akhirnya ketika Anda memberikan ekstensi yang keren, semua js, css dan gambar yang terkait dengan ekstensi Anda harus disimpan di tempat di mana pengembang lain biasanya akan mencari dan yang dalam banyak kasus adalah base/defaultpaket tema.

Pendeknya

Semua ekstensi Anda harus berada di bawah

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]

Dengan cara ini, pengembang lain dapat dengan mudah menemukan js, css dan gambar (dari sumber daya eksternal Anda juga) dari ekstensi Anda dengan sangat mudah. Karena Anda menggunakan sub direktori tambahan untuk menunjukkan file sumber daya eksternal di dalam direktori nama ekstensi Anda, itu akan memberi orang lain petunjuk terbaik bahwa ekstensi Anda bergantung pada beberapa paket pihak ketiga.

Jadi saya sarankan Anda untuk memisahkan paket eksternal dan menjadikannya bagian dari ekstensi Anda sehingga, pengembang lain dapat dengan mudah menemukan dependensi Anda. :-)

EDIT - 1

Anda seharusnya tidak membuat ekstensi ekstensi Anda untuk pemilik situs Anda. Anda dapat menghindari kesulitan ini dengan menyelaraskan ekstensi Anda dengan benar. Itu artinya, jika Anda menyimpan semua file terkait di lokasi direktori yang ditentukan, maka yang harus dilakukan oleh semua pemilik situs adalah, ambil ekstensi Anda lalu Gabungkan ekstensi Anda dari direktori root aplikasi. yaitu Sejajarkan ekstensi Anda dengan benar. Seharusnya terlihat seperti ini.

/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

EDIT - 2

Jika ada beberapa paket, yang harus dibagikan di semua aplikasi Magento (seperti perpustakaan javascript, atau paket php dll), maka Anda dapat meletakkannya di \libdirektori.

Memang benar bahwa, mungkin ada file duplikat jika dua ekstensi bergantung pada paket sumber daya yang sama. Mereka mungkin menggunakan versi berbeda dari paket sumber daya yang sama juga. Tetapi pada dasarnya, ekstensi Anda harus menggunakan sumber daya ekstensi Anda saja (dan dapat mengandalkan sumber daya Magento default) dan ekstensi tersebut tidak boleh bergantung pada sumber daya ekstensi lain, kecuali ekstensi Anda merupakan "versi perpanjangan" dari ekstensi pihak ketiga.

Rajeev K Tomy
sumber
Terima kasih. Jawaban Anda lebih menyukai sudut pandang pengembang, daripada sisi pemilik situs. Tapi kurasa memang seperti itu di Magento? Saya tahu tentang CMS lain yang telah menyetujui tempat untuk meng-unzip arsip pihak ketiga / lib, menjaga semua file tetap sama persis seperti aslinya.
fris
1
Iya. Saya tahu frustasi untuk memisahkan sumber daya paket. Magento menuntutnya. Tidak ada cara mudah untuk itu. Praktik terbaik Magento mengatakan "Anda harus menyimpan semuanya js, css, imagesdalam base\defaultpaket". Lihat juga kode edit saya
Rajeev K Tomy
Hai Rajeev ... Konsekuensi lebih lanjut dari meletakkan sumber daya eksternal / file lib di bawah "your_extension" adalah bahwa ia tidak dapat dibagi oleh ekstensi lain yang juga dapat menggunakan sumber daya / lib. Jadi, Anda berakhir dengan banyak salinan, mungkin versi CLASHING yang berbeda, dimuat pada halaman yang sama. Aduh!
fris
lihat hasil edit saya
Rajeev K Tomy
0

Magento memiliki pengelola paket sendiri yang disebut Magento Connect. Anda harus memeriksa panduan ini dari dokumentasi resmi untuk memahami sepenuhnya bagaimana penampilan paket. Anda dapat mengemas modul Anda dari instalasi Magento setelah Anda memahami strukturnya.

mbalparda
sumber
Terima kasih atas jawaban Anda tetapi itu tidak cukup dengan apa yang saya tanyakan. Ini bukan tentang cara mengemas ekstensi saya, ini tentang di mana di pohon file Magento untuk menempatkan file pihak ke-3 yang TIDAK bagian dari inti atau ekstensi saya, tetapi perlu dimasukkan sebagai bagian dari sistem. Di mana saya memberi tahu pengguna untuk meletakkan file-file itu? Apakah ada tempat (atau bintik) standar untuk file pihak ketiga?
fris
Ini sebenarnya terkait dengan tautan yang saya kirimkan kepada Anda. Js dan css memiliki folder sendiri untuk paket sama seperti file ekstensi lainnya. File php dapat berada di bawah folder lib root atau di dalam folder modul di dalam folder lib.
mbalparda
Oke terima kasih. Jadi jawaban Anda adalah: Ya, pembuat situs Magento harus membuka ritsleting arsip pihak ketiga, menarik bagian PHP, JS, HTML, dan CSS dari arsip itu dan mendistribusikan kembali file-file itu dalam slot yang sesuai di pohon file Magento. Ini BUKAN dianggap praktik terbaik untuk memungkinkan pembuat situs untuk cukup membuka ritsleting seluruh arsip pihak ke-3 di beberapa direktori yang disepakati bersama untuk tujuan ini dari mana ekstensi terkait akan menyertakan file pihak ke-3 sesuai kebutuhan.
fris
Iya. Semua yang Anda jelaskan sudah tercakup dalam proses pengemasan yang dijelaskan dalam dokumentasi.
mbalparda
Yah saya sudah membaca dokumentasi itu, tetapi tidak mengatakan apa-apa tentang pertanyaan saya. Itu hanya berbicara tentang file yang merupakan bagian dari ekstensi yang Anda kembangkan dan ingin Anda paketkan. Tidak disebutkan di mana harus meletakkan file pihak ke-3 yang BUKAN bagian dari ekstensi, seperti kalender atau galeri gambar atau paket charting. Anda mungkin tidak ingin mengemasnya dengan ekstensi yang Anda kembangkan, sehingga dapat diperbarui secara mandiri. Pertanyaannya kemudian menjadi tempat untuk meletakkan file pihak ketiga? Apa pendekatan praktik terbaik bagi mereka?
fris
0

Pada dasarnya Magento menggunakan struktur itu sendiri untuk terus .php, .phtml, js, css, imagesfile.

Untuk pengembang ekstensi Magento, sangat penting bagi Anda untuk mengikuti cara Magento. Periksa tautan ini .

Begitu,

  1. .phpFile Anda harus berada di bawah app/code/communityfolder
  2. jsFile Anda dapat masuk ke jsfolder atau di skin/frontend or adminhtml/your_theme_pack/your_theme/jsfolder
  3. cssFile Anda dapat masuk ke skin/frontend or adminhtml/your_theme_pack/your_theme/cssfolder
  4. imagesFile Anda dapat masuk ke skin/frontend or adminhtml/your_theme_pack/your_theme/imagesfolder
  5. files should go toFolder ' app html / desain / tampilan depan atau adminhtml / templat` Anda

Frontend PS berarti jika ekstensi Anda untuk toko depan dan adminthml berarti jika ekstensi Anda untuk area admin.

Ada cara khusus untuk menyimpan file-file ini di magento, jadi Anda harus mengikuti mereka.

Saya juga akan memeriksa apakah fungsi yang Anda inginkan / salin sudah tersedia di kerangka magento / zend. Misalnya membuat pdf, mengirim email, membaca xml dll sudah dibangun di magento.

Semoga ini membantu.

Perbarui 1

Jika Anda ingin hanya menyimpan file Anda di suatu tempat maka Anda dapat menyimpannya di mana saja. Anda bahkan dapat membuat folder baru di dalam root magento. Tapi ini bukan praktik terbaik untuk magento, yang akan memuat server Anda saat mengeksekusi file-file itu. Anda ingin memeriksa https://magentotherightway.com/ ini

Adarsh ​​Khatri
sumber
Terima kasih atas tautannya dan penjelasannya. Tapi saya tidak bertanya tentang ekstensi itu sendiri. Saya bertanya tentang di mana harus meletakkan kode pihak ke-3 yang tidak termasuk dalam ekstensi. Apakah ada lokasi TUNGGAL yang disepakati secara umum?
fris
Jika Anda ingin hanya menyimpan file Anda di suatu tempat maka Anda dapat menyimpannya di mana saja. Anda bahkan dapat membuat folder baru di dalam root magento. Tapi ini bukan praktik terbaik untuk magento, yang akan memuat server Anda saat mengeksekusi file-file itu. Anda ingin memeriksa magentotherightway.com
Adarsh ​​Khatri
Ekstensi yang didistribusikan tidak boleh dipasang ke localcodepool.
patok