ฉันจะวางไฟล์. php, .js, .html, .css จาก lib บุคคลที่สามที่เชื่อมต่อกับส่วนขยายที่ฉันพัฒนาได้อย่างไร


10

สมมติว่าฉันต้องการพัฒนาส่วนขยายของวีโอไอพีที่เชื่อมต่อกับแพคเกจการสร้างแผนภูมิโอเพนซอร์สหรือแกลเลอรี่ภาพหรือสิ่งที่ไม่ได้เป็นส่วนหนึ่งของส่วนขยายนั้น เมื่อดาวน์โหลด (แยกต่างหากจากส่วนขยาย) lib ของบุคคลที่สามจะมาพร้อมกับ. zip เดี่ยวพร้อมด้วย. php, .js, .html และ. css ทั้งหมด

ฉันจะวางบนเจ้าของไซต์ที่ไม่ดีที่ประสงค์จะติดตั้งส่วนขยายของฉันร่วมกับ lib ของบุคคลที่สามภาระในการดึงบุคคลที่สามที่เป็นต้นฉบับ. zip และทำให้พวกเขาวาง. js ใน / js, .php in / lib, CSS ใน / ผิวหนัง ฯลฯ ?

หรือมี "พื้นที่การทุ่มตลาด" ที่ยอมรับกันทั่วไปสำหรับไฟล์. zip ของบุคคลที่สามที่หนึ่งสามารถคลายการดาวน์โหลดตามที่สะดวกและทำได้ด้วยหรือไม่

คำตอบ:


6

ฉันไม่ทราบว่ามีคำตอบที่ถูกต้องสำหรับคำถามนี้หรือไม่เนื่องจากขึ้นอยู่กับรหัสที่คุณรวมอยู่ด้วย

หากคุณต้องการรวมไลบรารี่ php ของบุคคลที่สามเช่น sdk สำหรับ API ภายนอกก็ควรใส่ไว้ในไดเรกทอรี / lib ของโปรเจค Magento ของคุณเพื่อให้สามารถรวมไว้ในส่วนขยายที่ใช้งานได้

อย่างไรก็ตามคุณยังใช้ js และ css เป็นตัวอย่าง หากคุณใช้ js จากบุคคลที่สามในส่วนขยายของคุณไปยังรหัสขาออกเช่น js บางตัวที่แสดงแผนภูมิแบบผืนผ้าใบสิ่งนี้น่าจะมากกว่าที่จะใส่ไว้ในไดเรกทอรี / js เพื่อรวมไว้ในส่วนขยายของคุณ สำหรับ css ควรเพิ่มไปยังธีมฐาน / ค่าเริ่มต้นและสกิน dirs

โชคไม่ดีที่ระบบส่วนขยายของ Magento 1 ไม่ได้ทำให้ง่ายต่อการเผยแพร่สิ่งนี้เนื่องจากไฟล์จะถูกกระจายออกไปทั่วทั้งโครงการมากกว่าที่จะมีอยู่ในตัวเดียว เครื่องมือเช่นMagento Composer InstallerและModmanช่วยด้วยสิ่งนี้บ้าง


4

เมื่อดาวน์โหลด (แยกต่างหากจากส่วนขยาย) ส่วนขยายของบุคคลที่สามจะมาพร้อมกับไฟล์. zip เดี่ยวพร้อมด้วย. php, .js, .html และ. css ทั้งหมด

ฉันเป็นแฟนตัวยงของการประชุมที่มาจากแหล่งต่าง ๆ เสมอแม้ว่ามันจะคลุมเครือกับ Magento 1

ให้สิทธิ์ใช้งานไลบรารี่ของบุคคลที่สามที่อนุญาตสำหรับการรวมคุณควรนำมันออกและบรรจุใหม่พร้อมกับส่วนขยายของคุณเนื่องจากไม่มีกลไกดั้งเดิมสำหรับการแยกไลบรารีย่อยแยกต่างหาก (ฉันอาจผิด)

แหล่งข้อมูลเหล่านี้ขึ้นอยู่กับประเภทและการจัดระเบียบภายในของไฟล์ ห้องสมุด JS ./js/บริสุทธิ์ควรจะไปอยู่ภายใต้ ไฟล์ที่ถูกดำเนินการด้านเซิร์ฟเวอร์อยู่ภายใต้./lib/โดยสังเกตว่าคลาส PHP ใด ๆ ที่อยู่ภายใต้./lib/สามารถโหลดอัตโนมัติโดยโครงร่าง autoload (เป็นหลัก PSR-0) (อ้างอิงจากหลักการประชุม Zolo Framework 1 autoload) ไม่มีสิ่งใดที่./lib/สามารถเข้าถึงได้ (ควรจะ) ผ่านทางลูกค้า (อ้างอิง./lib/.htaccess)


ขอบคุณเบ็น คำตอบของคุณสมเหตุสมผล แต่ก็หมายความว่าเจ้าของไซต์ไม่สามารถอัพเกรด lib บุคคลที่สามเป็นเวอร์ชันล่าสุดได้โดยอิสระจากส่วนขยาย Magento ที่เชื่อมต่อกับมัน เว้นแต่จะเข้าใจอย่างถ่องแท้ว่าทุกอย่างรวมเข้าด้วยกันอย่างไรและถึงแม้จะเป็นความเจ็บปวดก็ตามที่จะนำบิตทั้งหมดใส่ในช่องที่เหมาะสม นี่เป็นพรในแง่ที่ว่าเวอร์ชันของส่วนขยายและ lib ของบุคคลที่สามยังคงสอดคล้องกัน แต่ความเจ็บปวดเมื่อ lib รุ่นที่ 3 ใหม่เสนอการแก้ไขข้อบกพร่องและคุณสมบัติใหม่ในขณะที่ยังคงทำงานร่วมกันได้
58

1
"นี่เป็นคำอวยพรในแง่ที่ว่าเวอร์ชันการขยายและ lib ของบุคคลที่สามยังคงสอดคล้องกัน ... "นั่นคือตั๋ว! การเปลี่ยนแปลงของพวกเขาคือการเปลี่ยนแปลงของคุณ ทั้งหมดนี้เป็นเรื่องง่ายขึ้นใน Magento 2 ต้องขอบคุณ Composer
benmarks

1

ดังนั้นคุณต้องการสร้างส่วนขยายและคุณกำลังใช้ทรัพยากร / แพ็คเกจภายนอกสำหรับการสร้างมัน ในความคิดของฉันไม่ว่าคุณจะใช้แพ็คเกจใดในส่วนขยายของคุณส่วนขยายของคุณควรเป็นไปตามแนวทางปฏิบัติที่ดีที่สุดของ Magento นั่นหมายความว่าคุณควรแยก js, css, อิมเมจทั้งหมดออกจากทรัพยากรภายนอกและควรวางไว้ในbase\defaultไดเร็กทอรีแพ็คเกจแพ็คเกจ

เช่นไม่มีตำแหน่งที่ไม่ซ้ำกันดังกล่าวสำหรับการวางทรัพยากรแพ็คเกจของบุคคลที่สาม ในที่สุดเมื่อคุณส่งส่วนขยายที่ยอดเยี่ยม js, css และรูปภาพทั้งหมดที่เกี่ยวข้องกับส่วนขยายของคุณควรถูกเก็บไว้ในสถานที่ซึ่งนักพัฒนาคนอื่นจะดูเป็นปกติและในกรณีส่วนใหญ่คือbase/defaultแพ็คเกจธีม

ในระยะสั้น

ส่วนขยาย js ทั้งหมดของคุณควรอยู่ภายใต้

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]

ด้วยวิธีนี้ผู้พัฒนารายอื่นสามารถค้นหา js, css และรูปภาพ (จากแหล่งข้อมูลภายนอกของคุณด้วย) ของส่วนขยายของคุณได้อย่างง่ายดายมาก เนื่องจากคุณใช้ไดเรกทอรีย่อยพิเศษเพื่อระบุไฟล์ทรัพยากรภายนอกภายในไดเรกทอรีชื่อส่วนขยายของคุณมันจะให้เบาะแสที่ดีที่สุดแก่คนอื่น ๆ ว่าส่วนขยายของคุณนั้นอาศัยแพคเกจของบุคคลที่สาม

ดังนั้นฉันขอแนะนำให้คุณแยกแพคเกจภายนอกและทำให้พวกเขาเป็นส่วนหนึ่งของส่วนขยายของคุณเพื่อให้นักพัฒนารายอื่นสามารถค้นหาการอ้างอิงของคุณได้อย่างง่ายดาย :-)

แก้ไข - 1

คุณไม่ควรสร้างภาระส่วนขยายให้กับเจ้าของเว็บไซต์ของคุณ คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยจัดตำแหน่งส่วนขยายให้เหมาะสม ซึ่งหมายความว่าหากคุณบันทึกไฟล์ที่เกี่ยวข้องทั้งหมดในตำแหน่งไดเรกทอรีที่ระบุสิ่งที่เจ้าของเว็บไซต์ควรทำคือคว้าส่วนขยายของคุณแล้วรวมส่วนขยายของคุณจากไดเรกทอรีรากของแอปพลิเคชัน เช่นจัดตำแหน่งส่วนขยายให้เหมาะสม ควรมีลักษณะเช่นนี้

/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

แก้ไข - 2

หากมีแพ็กเกจบางตัวซึ่งควรแชร์ผ่านแอปพลิเคชั่น Magento ทั้งหมด (เช่นไลบรารี javascript หรือ php แพ็คเกจ ฯลฯ ) จากนั้นคุณสามารถวางไว้ใน\libไดเรกทอรี

เป็นความจริงที่ว่าอาจมีไฟล์ซ้ำกันหากส่วนขยายสองรายการขึ้นอยู่กับแพ็คเกจทรัพยากรเดียวกัน พวกเขาอาจใช้แพ็คเกจทรัพยากรเดียวกันเวอร์ชันอื่นด้วย แต่โดยทั่วไปแล้วส่วนขยายของคุณควรใช้ทรัพยากรของส่วนขยายของคุณเท่านั้น (และสามารถพึ่งพาทรัพยากรของวีโอไอพีที่เป็นค่าเริ่มต้น) และไม่ควรพึ่งพาทรัพยากรของส่วนขยายอื่น ๆ เว้นแต่ว่าส่วนขยายของคุณจะเป็น


ขอบคุณ. คำตอบของคุณสนับสนุนมุมมองของนักพัฒนามากกว่าด้านเจ้าของไซต์ แต่ฉันคิดว่านั่นเป็นวิธีที่อยู่ในวีโอไอพี ฉันรู้ว่า CMS'es อื่น ๆ ที่ได้ตกลงที่จะเปิดเครื่องรูดไฟล์เก็บถาวร / libs ของบุคคลที่สามทำให้ไฟล์ทั้งหมดเข้าด้วยกันอย่างที่เป็นในแบบดั้งเดิม
58

1
ใช่. ฉันรู้ว่ามันน่าผิดหวังที่แยกทรัพยากรแพ็คเกจออก วีโอไอพีต้องการมัน ไม่มีวิธีที่ง่ายสำหรับมัน Magento best practice กล่าวว่า "คุณควรเก็บไว้js, css, imagesในbase\defaultแพ็คเกจ" โปรดดูรหัสการแก้ไขของฉันด้วย
Rajeev K Tomy

สวัสดี Rajeev ... ผลที่ตามมาเพิ่มเติมจากการวางไฟล์ทรัพยากร / lib ภายนอกภายใต้ "your_extension" คือไม่สามารถใช้ร่วมกันโดยส่วนขยายอื่น ๆ ที่อาจใช้ทรัพยากร / lib ดังนั้นคุณจะจบลงด้วยการทำสำเนาหลายชุดซึ่งอาจเป็นเวอร์ชั่นที่แตกต่างกันของ CLASHING ที่โหลดในหน้าเดียวกัน อุ๊ย!
58

ดูการแก้ไขของฉันได้โปรด
Rajeev K Tomy

0

Magento มีผู้จัดการแพ็คเกจของตัวเองชื่อ Magento Connect คุณควรตรวจสอบคู่มือนี้จากเอกสารอย่างเป็นทางการเพื่อให้เข้าใจอย่างถ่องแท้ว่าแพคเกจควรมีลักษณะอย่างไร คุณสามารถแพ็คโมดูลของคุณได้จากการติดตั้ง Magento เมื่อคุณเข้าใจโครงสร้าง


ขอบคุณสำหรับคำตอบของคุณ แต่มันก็ไม่ใช่สิ่งที่ฉันถาม มันไม่เกี่ยวกับวิธีการจัดแพคเกจส่วนขยายของฉันมันเกี่ยวกับตำแหน่งที่อยู่ในแผนผังไฟล์ Magento เพื่อวางไฟล์ของบุคคลที่สามที่ไม่ได้เป็นส่วนหนึ่งของคอร์หรือส่วนขยายของฉัน แต่จำเป็นต้องรวมเป็นส่วนหนึ่งของระบบ ฉันจะบอกผู้ใช้ให้วางไฟล์เหล่านั้นได้ที่ไหน มีจุดมาตรฐาน (หรือจุด) สำหรับไฟล์บุคคลที่สาม?
fris

มันเกี่ยวข้องกับลิงค์ที่ฉันส่งให้คุณ Js และ css มีโฟลเดอร์ของตัวเองสำหรับแพ็คเกจเหมือนกับไฟล์นามสกุลอื่น ๆ ไฟล์ Php สามารถอยู่ในโฟลเดอร์ root lib หรือภายในโฟลเดอร์โมดูลภายในโฟลเดอร์ lib
mbalparda

โอเคขอบคุณ. ดังนั้นคำตอบของคุณคือ: ใช่ผู้สร้างไซต์ Magento จะต้องแตกไฟล์เก็บถาวรของบุคคลที่สามดึงส่วน PHP, JS, HTML และ CSS ออกจากไฟล์เก็บถาวรนั้นและกระจายไฟล์เหล่านั้นในช่องที่เหมาะสมในแผนผังไฟล์ Magento ไม่ถือว่าเป็นการปฏิบัติที่ดีที่สุดที่จะอนุญาตให้ตัวสร้างไซต์บีบอัดไฟล์เก็บถาวรของบุคคลที่สามทั้งหมดในบางไดเรกทอรีที่ตกลงกันโดยทั่วไปซึ่งกำหนดไว้สำหรับจุดประสงค์นี้โดยที่ส่วนขยายที่เกี่ยวข้องจะรวมไฟล์ของบุคคลที่สามตามต้องการ
FRIS

ใช่. ทุกสิ่งที่คุณอธิบายมีอยู่ในกระบวนการบรรจุที่อธิบายไว้ในเอกสารประกอบแล้ว
mbalparda

ฉันได้อ่านเอกสารนั้นแล้ว แต่มันไม่ได้พูดอะไรเกี่ยวกับคำถามของฉัน มันพูดถึงเฉพาะไฟล์ที่เป็นส่วนหนึ่งของส่วนขยายที่คุณพัฒนาและต้องการทำแพ็คเกจ ไม่ได้บอกตำแหน่งที่จะวางไฟล์ของบุคคลที่สามที่ไม่ได้เป็นส่วนหนึ่งของส่วนขยายเช่นปฏิทินหรือแกลเลอรี่รูปภาพหรือแพ็คเกจการสร้างแผนภูมิ คุณอาจไม่ต้องการจัดทำแพ็คเกจเหล่านี้พร้อมกับส่วนขยายที่คุณกำลังพัฒนาเพื่อให้สามารถอัปเดตได้อย่างอิสระ คำถามจะกลายเป็นที่ที่จะวางไฟล์ของบุคคลที่สาม? วิธีปฏิบัติที่ดีที่สุดสำหรับสิ่งเหล่านั้นคืออะไร?
fris

0

โดยทั่วไปวีโอไอพีใช้โครงสร้างของตัวเองที่จะถือ.php, .phtml, js, css, imagesไฟล์

สำหรับนักพัฒนาส่วนต่อของวีโอไอพีมันสำคัญมากที่คุณต้องทำตามวีโอไอพี ตรวจสอบลิงค์นี้

ดังนั้น,

  1. .phpไฟล์ของคุณควรอยู่ในapp/code/communityโฟลเดอร์
  2. jsไฟล์ของคุณสามารถไปที่jsโฟลเดอร์หรือในskin/frontend or adminhtml/your_theme_pack/your_theme/jsโฟลเดอร์
  3. cssไฟล์ของคุณสามารถไปที่skin/frontend or adminhtml/your_theme_pack/your_theme/cssโฟลเดอร์
  4. imagesไฟล์ของคุณสามารถไปที่skin/frontend or adminhtml/your_theme_pack/your_theme/imagesโฟลเดอร์
  5. files should go toโฟลเดอร์' แอปhtml / design / frontend หรือ adminhtml / template` ของคุณ

PS frontend หมายถึงถ้าส่วนขยายของคุณใช้สำหรับร้านค้าด้านหน้าและ adminthml หมายความว่าส่วนขยายของคุณใช้สำหรับพื้นที่ผู้ดูแลระบบ

มีวิธีเฉพาะในการเก็บไฟล์เหล่านี้ในวีโอไอพีดังนั้นคุณควรปฏิบัติตาม

ฉันจะตรวจสอบด้วยว่าฟังก์ชั่นที่คุณต้องการ / การคัดลอกมีอยู่ในกรอบวีโอไอพี / zend หรือไม่ ตัวอย่างเช่นการสร้าง PDF, ส่งอีเมล, อ่าน xml และอื่น ๆ นั้นได้สร้างในรูปแบบวีโอไอพีแล้ว

หวังว่านี่จะช่วยได้

อัปเดต 1

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


ขอบคุณสำหรับลิงค์และคำอธิบาย แต่ฉันไม่ได้ถามเกี่ยวกับการขยายตัว ฉันถามว่าจะใส่รหัสของบุคคลที่สามไม่รวมอยู่ในส่วนขยายได้อย่างไร มีสถานที่เดียวที่ตกลงกันโดยทั่วไปหรือไม่
fris

หากคุณต้องการเก็บไฟล์ไว้ที่ใดที่หนึ่ง คุณสามารถสร้างโฟลเดอร์ใหม่ได้ภายในรูทวีโอไอพี แต่นี่ไม่ใช่วิธีปฏิบัติที่ดีที่สุดสำหรับวีโอไอพีซึ่งจะโหลดเซิร์ฟเวอร์ของคุณเมื่อเรียกใช้ไฟล์เหล่านั้น คุณต้องการตรวจสอบเว็บไซต์ของ magentotherightway.com
Adarsh ​​Khatri

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