Tôi đặt các tệp .php, .js, .html, .css từ lib của bên thứ 3 có giao diện với tiện ích mở rộng tôi phát triển ở đâu?


10

Giả sử tôi muốn phát triển tiện ích mở rộng Magento có giao diện với gói biểu đồ nguồn mở hoặc bộ sưu tập hình ảnh hoặc bất cứ thứ gì KHÔNG phải là một phần của chính tiện ích mở rộng. Khi được tải xuống (tách biệt với tiện ích mở rộng), lib của bên thứ 3 có dạng .zip duy nhất với tất cả .php, .js, .html và .css của nó.

Tôi có đặt cho chủ sở hữu trang web nghèo muốn cài đặt tiện ích mở rộng của mình cùng với lib của bên thứ 3 không, gánh nặng kéo bên thứ ba ban đầu .zip ra và khiến họ đặt .js vào / js, .php in / lib ,. css trong / da vv?

Hoặc có một "bãi rác" được chấp nhận chung cho bất kỳ bên thứ 3 nào .zips nơi người ta có thể giải nén thuận tiện khi tải xuống AS IS và được thực hiện với nó không?

Câu trả lời:


6

Tôi không biết nếu có một câu trả lời đúng cho câu hỏi này vì nó thực sự phụ thuộc vào mã mà bạn đang đưa vào.

Nếu bạn muốn bao gồm thư viện php của bên thứ 3, ví dụ: sdk cho API bên ngoài, thì nó nên được đặt trong thư mục / lib của dự án Magento để tiện ích mở rộng có thể được bao gồm bởi tiện ích mở rộng của bạn.

Tuy nhiên, bạn cũng đang sử dụng js và css làm ví dụ. Nếu bạn đang sử dụng js từ bên thứ ba trong tiện ích mở rộng của mình cho mã đầu ra, ví dụ: một số j hiển thị biểu đồ canvas, thì điều này rất có thể sẽ được đưa vào thư mục / js để tiện ích mở rộng có thể được đưa vào. Đối với css, có lẽ nên thêm nó vào chủ đề cơ sở / mặc định và thư mục giao diện.

Unfortunatley hệ thống mở rộng Magento 1 không giúp phân phối loại này dễ dàng vì các tệp được trải ra trong toàn bộ dự án thay vì nằm trong một thư mục duy nhất. Công cụ như Magento Composer InstallerModman giúp phần nào với điều này.


4

Khi được tải xuống (tách biệt với tiện ích mở rộng), các tiện ích mở rộng của bên thứ 3 có dạng .zip riêng với tất cả .php, .js, .html và .css cùng nhau.

Tôi luôn là người hâm mộ các quy ước bói toán từ chính nguồn, mặc dù nó có thể mơ hồ với Magento 1.

Được cung cấp giấy phép thư viện của bên thứ ba cho phép đóng gói, bạn nên giải nén và đóng gói lại cùng với tiện ích mở rộng của mình, vì không có cơ chế riêng nào để giải nén thư viện con riêng biệt (tôi có thể sai).

Các tài sản này đi đâu phụ thuộc vào loại và tổ chức nội bộ của các tệp. Các thư viện thuần túy nên đi theo ./js/. Các tệp được thực thi phía máy chủ thuộc về ./lib/, lưu ý rằng bất kỳ lớp PHP nào bên dưới ./lib/đều có thể được tự động tải bởi lược đồ tự động tải (về cơ bản là PSR-0) (tham chiếu quy ước tự động Zend Framework 1). Không có gì dưới ./lib/có thể được (nên) được truy cập thông qua máy khách (ref. ./lib/.htaccess).


Cảm ơn Ben. Câu trả lời của bạn có ý nghĩa, nhưng điều đó có nghĩa là chủ sở hữu trang web không thể dễ dàng nâng cấp lib của bên thứ 3 lên phiên bản mới nhất, độc lập với tiện ích mở rộng Magento có giao diện với nó. Trừ khi hiểu một cách mật thiết làm thế nào tất cả được gắn kết với nhau và thậm chí sau đó, thật đau đớn khi đặt tất cả các bit vào đúng vị trí. Đây là một điều may mắn theo nghĩa là các phiên bản mở rộng và lib của bên thứ 3 vẫn nhất quán, nhưng thật đau đớn khi các phiên bản mới của lib bên thứ 3 cung cấp sửa lỗi và các tính năng mới trong khi tiếp tục tương thích ngược.
fris

1
"Đây là một phước lành theo nghĩa các phiên bản mở rộng và lib của bên thứ 3 vẫn nhất quán ..." Đó là vé! Những thay đổi của họ là những thay đổi của bạn. Đây là tất cả dễ dàng hơn một chút trong Magento 2 nhờ Trình soạn thảo.
đánh dấu

1

Vì vậy, bạn muốn tạo một phần mở rộng và bạn đang sử dụng một tài nguyên / gói bên ngoài để xây dựng nó. Theo tôi, bất kỳ gói nào bạn đã sử dụng trong tiện ích mở rộng của mình, tiện ích mở rộng của bạn nên tuân theo các thực tiễn tốt nhất của Magento. Điều đó có nghĩa là bạn nên tách tất cả js, css, hình ảnh khỏi tài nguyên bên ngoài và nên đặt trong các base\defaultthư mục gói chủ đề.

tức là không có vị trí duy nhất như vậy tồn tại để đặt tài nguyên gói của bên thứ ba. Cuối cùng, khi bạn cung cấp một tiện ích mở rộng thú vị, tất cả js, css và hình ảnh liên quan đến tiện ích mở rộng của bạn nên được giữ ở nơi mà một nhà phát triển khác thường sẽ tìm và trong hầu hết các trường hợp làbase/default gói chủ đề.

Nói ngắn gọn

Tất cả js mở rộng của bạn nên đến

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]

Bằng cách này, một nhà phát triển khác có thể dễ dàng tìm thấy js, css và hình ảnh (của các tài nguyên bên ngoài của bạn) của tiện ích mở rộng của bạn rất dễ dàng. Vì bạn đang sử dụng một thư mục con phụ để chỉ ra các tệp tài nguyên bên ngoài trong thư mục tên tiện ích mở rộng của mình, nó sẽ cung cấp cho người khác một manh mối tốt nhất rằng tiện ích mở rộng của bạn đang dựa vào một số gói của bên thứ ba.

Vì vậy, tôi khuyên bạn nên tách các gói bên ngoài và biến chúng thành một phần của tiện ích mở rộng để nhà phát triển khác có thể dễ dàng tìm thấy các phụ thuộc của bạn. :-)

CHỈNH SỬA - 1

Bạn không nên tạo gánh nặng mở rộng cho chủ sở hữu trang web của mình. Bạn có thể tránh được khó khăn này bằng cách căn chỉnh chính xác phần mở rộng của bạn. Điều đó có nghĩa là, nếu bạn lưu tất cả các tệp có liên quan trong các vị trí thư mục được chỉ định, thì tất cả những gì chủ sở hữu trang web nên làm là lấy tiện ích mở rộng của bạn và sau đó Hợp nhất tiện ích mở rộng của bạn từ thư mục gốc của ứng dụng. tức là căn chỉnh phần mở rộng của bạn đúng cách. Nó sẽ giống như thế này.

/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

Nếu có một số gói, sẽ chia sẻ trên tất cả các ứng dụng Magento (chẳng hạn như thư viện javascript hoặc gói php, v.v.), thì bạn có thể đặt chúng vào \libthư mục.

Đúng là, có thể tồn tại tệp trùng lặp nếu hai phần mở rộng dựa trên cùng các gói tài nguyên. Họ cũng có thể sử dụng phiên bản khác nhau của cùng một gói tài nguyên. Nhưng về cơ bản, tiện ích mở rộng của bạn chỉ nên sử dụng tài nguyên của tiện ích mở rộng của bạn (và có thể dựa vào tài nguyên mặc định của Magento) và không nên dựa vào tài nguyên của tiện ích mở rộng khác, trừ khi tiện ích mở rộng của bạn là "phiên bản mở rộng" của tiện ích mở rộng bên thứ ba.


Cảm ơn bạn. Câu trả lời của bạn ủng hộ quan điểm của nhà phát triển, thay vì phía chủ sở hữu trang web. Nhưng tôi đoán đó là cách nó ở Magento? Tôi biết về các CMS khác đã đồng ý giải nén tài liệu lưu trữ / lib của bên thứ ba, giữ tất cả các tệp cùng nhau giống như bản gốc.
fris

1
Đúng. Tôi biết thật bực bội khi tách ra một nguồn tài nguyên gói. Magento yêu cầu nó. Không có cách dễ dàng cho nó. Thực hành tốt nhất Magento nói "Bạn nên giữ tất cả js, css, imagestrong base\defaultgói". Cũng xem mã chỉnh sửa của tôi
Rajeev K Tomy

Xin chào Rajeev ... Một hậu quả nữa của việc đặt các tệp tài nguyên / lib bên ngoài trong "your_extension" là nó không thể được chia sẻ bởi các tiện ích mở rộng khác cũng có thể sử dụng tài nguyên / lib. Vì vậy, bạn kết thúc với nhiều bản sao, có thể là các phiên bản CLASHING khác nhau, được tải trên cùng một trang. Ôi!
fris

vui lòng xem các chỉnh sửa của tôi
Rajeev K Tomy

0

Magento có trình quản lý gói riêng của mình được gọi là Magento Connect. Bạn nên kiểm tra hướng dẫn này từ tài liệu chính thức để hiểu đầy đủ về giao diện của gói. Bạn có thể đóng gói mô-đun của mình từ bản cài đặt Magento khi bạn hiểu cấu trúc.


Cảm ơn câu trả lời của bạn nhưng nó không hoàn toàn như những gì tôi đã hỏi. Đây không phải là về cách đóng gói tiện ích mở rộng của tôi, mà là về vị trí trong cây tệp Magento để đặt các tệp của bên thứ 3 KHÔNG phải là một phần của lõi hoặc tiện ích mở rộng của tôi, nhưng cần được đưa vào như một phần của hệ thống. Tôi bảo người dùng đặt những tập tin đó ở đâu? Có một vị trí tiêu chuẩn (hoặc các điểm) cho các tệp của bên thứ 3 không?
fris

Nó thực sự có liên quan đến liên kết tôi đã gửi cho bạn. Js và css có các thư mục riêng cho các gói giống như bất kỳ tệp mở rộng nào khác. Các tệp php có thể nằm trong thư mục lib gốc hoặc bên trong thư mục mô-đun bên trong thư mục lib.
mbalparda

Ok, cảm ơn bạn. Vì vậy, câu trả lời của bạn là: Có, những người xây dựng trang Magento phải giải nén kho lưu trữ của bên thứ 3, rút ​​các phần PHP, JS, HTML và CSS ra khỏi kho lưu trữ đó và phân phối lại các tệp đó trong các khe thích hợp trong cây tệp Magento. KHÔNG được coi là cách thực hành tốt nhất để cho phép người xây dựng trang web giải nén toàn bộ kho lưu trữ của bên thứ 3 trong một số thư mục được thỏa thuận chung được chỉ định cho mục đích này từ đó (các) tiện ích mở rộng được liên kết sẽ bao gồm các tệp của bên thứ 3 khi cần.
fris

Đúng. Tất cả mọi thứ bạn mô tả đã được đề cập trong quy trình đóng gói được mô tả trong tài liệu.
mbalparda

Vâng, tôi đã đọc tài liệu đó, nhưng nó không nói gì về câu hỏi của tôi. Nó chỉ nói về các tệp là một phần của tiện ích mở rộng bạn phát triển và muốn đóng gói. Nó không cho biết nơi đặt các tệp của bên thứ 3 KHÔNG phải là một phần của tiện ích mở rộng, như lịch hoặc thư viện hình ảnh hoặc gói biểu đồ. Bạn có thể không muốn gói những thứ này với tiện ích mở rộng mà bạn đang phát triển để chúng có thể được cập nhật độc lập. Câu hỏi sau đó trở thành nơi để đặt các tập tin bên thứ ba? Cách tiếp cận thực hành tốt nhất cho những người là gì?
fris

0

Về cơ bản Magento sử dụng cấu trúc riêng của nó để giữ .php, .phtml, js, css,images tập tin.

Đối với nhà phát triển mở rộng magento, điều rất quan trọng là bạn phải tuân theo cách magento. Kiểm tra liên kết này .

Vì thế,

  1. Các .phptập tin của bạn sẽ nằm trong app/code/communitythư mục
  2. Các jstập tin của bạn có thể đi đến jsthư mục hoặc trong skin/frontend or adminhtml/your_theme_pack/your_theme/jsthư mục
  3. Các csstập tin của bạn có thể đi đến skin/frontend or adminhtml/your_theme_pack/your_theme/cssthư mục
  4. Các imagestập tin của bạn có thể đi đến skin/frontend or adminhtml/your_theme_pack/your_theme/imagesthư mục
  5. Thư mục ' files should go toứng dụng / thiết kế / frontend hoặc adminhtml / template` của bạn

PS frontend có nghĩa là nếu tiện ích mở rộng của bạn dành cho cửa hàng trước và adminthml có nghĩa là nếu tiện ích mở rộng của bạn dành cho khu vực quản trị.

Có một cách cụ thể để giữ các tệp này trong magento, vì vậy bạn nên theo dõi chúng.

Tôi cũng sẽ kiểm tra xem các chức năng sao chép / mong muốn của bạn đã có sẵn trong khung magento / zend chưa. Ví dụ: tạo pdf, gửi email, đọc xml, v.v. đã được xây dựng trong magento.

Hi vọng điêu nay co ich.

Cập nhật 1

Nếu bạn muốn giữ tập tin của mình ở đâu đó thì bạn có thể giữ ở bất cứ đâu. Bạn thậm chí có thể tạo thư mục mới trong root magento. Nhưng đây không phải là cách thực hành tốt nhất cho magento, nó sẽ tải lên máy chủ của bạn khi thực thi các tệp đó. Bạn muốn kiểm tra https://magentotherightway.com/


Cảm ơn các liên kết và giải thích. Nhưng tôi không hỏi về phần mở rộng chính nó. Tôi đang hỏi về nơi đặt mã bên thứ 3 không có trong tiện ích mở rộng. Có một vị trí SINGLE thường được đồng ý cho nó?
fris

Nếu bạn muốn giữ tập tin của mình ở đâu đó thì bạn có thể giữ ở bất cứ đâu. Bạn thậm chí có thể tạo thư mục mới trong root magento. Nhưng đây không phải là cách thực hành tốt nhất cho magento, nó sẽ tải lên máy chủ của bạn khi thực thi các tệp đó. Bạn muốn kiểm tra magentotherightway.com
Adarsh ​​Khatri

Các phần mở rộng phân tán không bao giờ nên cài đặt vào localcodepool.
đánh dấu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.