我应该将来自与我开发的扩展程序接口的第三方库的.php,.js,.html,.css文件放在哪里?


10

假设我要开发一个Magento扩展程序,该扩展程序可以与开放源代码图表程序包或图库或不属于该扩展程序本身的任何东西接口。下载(与扩展名分开)时,第三方库以其自己的单个.zip格式包含所有.php,.js,.html和.css。

我应该放在可怜的站点所有者上,谁希望将我的扩展程序与第3方lib一起安装,将原始第3方.zip分开并将它们放在.js在/ js中,.php在/ lib中的负担。 CSS在/皮肤等?

还是对于任何第3方.zip,都有一个公认的“垃圾场”,可以方便地按原样解压缩下载文件并完成它?

Answers:


6

我不知道这个问题是否有一个正确的答案,因为这实际上取决于您所包含的代码。

如果您想包括第三方PHP库,例如用于外部API的sdk,则应将其放在Magento项目的/ lib目录中,以便使用它的扩展可以包括它。

但是,您也使用js和CSS作为示例。如果您使用扩展程序中的第三方js来输出代码(例如,一些呈现画布图表的js),则应该将其放置在/ js目录中,以便扩展程序可以将其包含在内。对于CSS,可能应该将其添加到基本/默认主题和外观目录中。

不幸的是,Magento 1扩展系统无法轻松分发此类内容,因为文件分散在整个项目中,而不是自身包含在单个目录中。Magento Composer安装程序Modman之类的工具对此有所帮助。


4

当下载(与扩展名分开)时,第三方扩展名以其自己的单个.zip以及所有.php,.js,.html和.css一起出现。

我一直都是从源头上引用占卜规则的爱好者,尽管它可能与Magento 1模棱两可。

如果第三方库许可允许捆绑,则应将其解压缩并与扩展一起重新打包,因为没有本机机制可解压缩单独的子库(我可能错了)。

这些资产的存放位置取决于文件的类型和内部组织。纯JS库应该被淘汰./js/。在服务器端执行的文件属于./lib/,请注意,./lib/可以通过(基本上是PSR-0)自动加载方案(请参阅Zend Framework 1自动加载约定)自动加载下面的任何PHP类。没有下./lib/可以(应)经由客户机访问(参考文献./lib/.htaccess)。


谢谢本。您的回答是有道理的,但这确实意味着网站所有者无法轻易地将3rd party库升级到最新版本,而与与其接口的Magento扩展无关。除非仔细了解所有内容如何组合在一起,否则即使将所有位放入正确的插槽中也是痛苦的。从扩展和第三方库的版本保持一致的意义上来说,这是一种祝福,但是当新版第三方库提供错误修复和新功能并同时继续向后兼容时,这是一件痛苦的事情。
朋友

1
“这是意义上的祝福扩展和第三方lib中的版本保持一致......”这是票!他们的改变就是你的改变。借助Composer,在Magento 2中这一切都变得容易一些。
2015年

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目录中。

的确,如果两个扩展名依赖相同的资源包,则可能存在重复的文件。他们也可能使用同一资源包的不同版本。但基本上,您的扩展程序应仅使用扩展程序的资源(并且可以依赖默认Magento的资源),并且不应依赖其他扩展程序的资源,除非您的扩展程序是第三方扩展程序的“扩展版本”。


谢谢。您的回答支持开发人员的观点,而不是网站所有者的观点。但是我想这就是Magento的方式吗?我知道其他CMS已同意将第三方档案/库解压缩的位置,并按照原始格式将所有文件保持在一起。
朋友

1
是。我知道分离软件包资源令人沮丧。Magento要求它。没有简单的方法。Magento的最佳做法,说:“你应该把所有js, css, imagesbase\default包”。另请参阅我的编辑代码
Rajeev K Tomy 2015年

嗨,拉杰耶夫...将外部资源/ lib文件放在“ your_extension”下的另一个后果是,它也不能由其他可能使用该资源/ lib的扩展共享。因此,最终在同一页面上加载了多个副本,可能有不同的CLASHING版本。哎哟!
朋友

请看我的编辑
Rajeev K Tomy 2015年

0

Magento有自己的软件包管理器,称为Magento Connect。您应该从官方文档中查看本指南,以全面了解软件包的外观。了解结构后,即可从Magento安装中打包模块。


谢谢您的回答,但这不是我要的。这与如何打包我的扩展名无关,而与在Magento文件树中放置不属于核心或我的扩展名但需要包含在系统中的第三方文件有关。我告诉用户在哪里放置这些文件?第三方档案是否有标准位置?
2015年

它实际上与我发送给您的链接有关。就像其他扩展文件一样,js和css也有自己的软件包文件夹。php文件可以在lib根文件夹下,也可以在lib文件夹内的module文件夹内。
mbalparda

好的谢谢。因此,您的答案是:是的,Magento网站建设者必须解压第三方存档,将PHP,JS,HTML和CSS部分从该存档中拉出,然后将这些文件重新分发到Magento文件树中的相应插槽中。不允许最佳做法是允许站点生成器将整个第三方归档文件解压缩到为此目的而指定的某个公认的目录中,在该目录中,相关扩展名将根据需要包含第三方文件。
2015年

是。文档中描述的打包过程已经涵盖了您描述的所有内容。
mbalparda

好吧,我已经阅读了该文档,但是没有提及我的问题。它仅讨论您开发的扩展文件中要打包的文件。它没有说明将不属于扩展名的第3方文件放置在何处,例如日历,图像库或制图包。您可能不希望将它们与正在开发的扩展打包在一起,以便可以独立更新它们。然后问题变成了将第三方文件放在哪里?这些最佳实践方法是什么?
2015年

0

基本上,Magento会用它自己的结构来保持.php.phtmljscssimages文件。

对于magento扩展开发人员来说,遵循magento方式非常重要。检查此链接

所以,

  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. 您的'html files should go toapp / design / frontend或adminhtml / template`文件夹

PS前端表示您的扩展程序是否用于前台存储,而adminthml表示您的扩展程序是否用于管理区域。

有一些特定的方法可以将这些文件保存在magento中,因此您应该遵循它们。

我还将检查magento / zend框架中是否已提供您所需的/复制功能。例如,在magento中已经建立了创建pdf,发送电子邮件,阅读xml等功能。

希望这可以帮助。

更新1

如果您只想将文件保存在某个地方,则可以在任何地方保存。您甚至可以在magento根目录中创建新文件夹。但这不是magento的最佳做法,它会在执行这些文件时加载服务器。您要检查此https://magentotherightway.com/


感谢您的链接和解释。但是我不是在问扩展本身。我问的是将扩展中未包含的第三方代码放在哪里。是否有一个公认的单一地点?
2015年

如果您只想将文件保存在某个地方,则可以在任何地方保存。您甚至可以在magento根目录中创建新文件夹。但这不是magento的最佳做法,它会在执行这些文件时加载服务器。您想检查一下此magentotherightway.com
Adarsh Khatri

分布式扩展永远不要安装到local代码池中。
Benmarks 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.