私が開発した拡張機能とインターフェースするサードパーティのライブラリからの.php、.js、.html、.cssファイルをどこに置きますか?


10

たとえば、オープンソースのグラフ作成パッケージや画像ギャラリーなど、拡張機能自体の一部ではないものにインターフェイスするMagento拡張機能を開発したいとします。(拡張機能とは別に)ダウンロードすると、サードパーティのlibは、すべての.php、.js、.html、および.cssをまとめた独自の単一の.zipで提供されます。

私の拡張機能をサードパーティのlibと一緒にインストールしたい貧しいサイト所有者に配置しますか?元のサードパーティの.zipを分離して、.jsを/ jsに、.phpを/ libに配置する負担になります。 / skinなどのcss?

または、ダウンロードしたままの状態で簡単に解凍して処理できるサードパーティの.zipについて、一般に受け入れられている「ダンピンググラウンド」はありますか?

回答:


6

この質問に対する正解が1つだけであるかどうかはわかりません。実際に含めるコードに依存しているためです。

サードパーティのphpライブラリ(外部APIのsdkなど)を含める場合は、Magentoプロジェクトの/ libディレクトリに配置して、それを使用する拡張機能に含めることができるようにする必要があります。

ただし、例としてjsおよびcssも使用しています。拡張機能でサードパーティのjsを使用してコードを出力している場合(キャンバスチャートをレンダリングする一部のjsなど)、これを/ jsディレクトリに配置して、拡張機能に含めることができます。cssの場合、おそらくbase / defaultテーマとスキンディレクトリに追加する必要があります。

残念ながら、Magento 1拡張システムでは、ファイルが単一のディレクトリに含まれているのではなく、プロジェクト全体に分散されているため、この種のことを簡単に配布できません。Magento ComposerインストーラーModmanなどのツールは、これをいくらか支援します。


4

ダウンロードすると(拡張機能とは別に)サードパーティの拡張機能は、すべての.php、.js、.html、.cssをまとめた独自の.zipで提供されます。

Magento 1ではあいまいになる可能性もありますが、私は常にソース自体から慣習を説明することのファンでした。

サードパーティのライブラリライセンスでバンドルできる場合、別のサブライブラリをアンパックするためのネイティブメカニズムがないため(間違っている可能性があります)、それをアンパックして、拡張機能とともに再パッケージする必要があります。

これらのアセットがどこに移動するかは、ファイルのタイプと内部構成によって異なります。純粋なJSライブラリはに分類され./js/ます。サーバー側で実行されるファイルはに属し./lib/、その下のすべてのPHPクラス./lib/は(本質的にPSR-0)自動ロードスキーム(Zend Framework 1の自動ロード規則を参照)によって自動ロードできることに注意してください。./lib/クライアント(参照./lib/.htaccess)を介して下にアクセスすることはできません(アクセスする必要があります)。


ベンに感謝します。あなたの答えは理にかなっていますが、それはサイト所有者がサードパーティのlibを、それに接続するMagento拡張機能とは無関係に、最新バージョンに簡単にアップグレードできないことを意味します。すべてがどのようにつながっているかをよく理解していない限り、すべてのビットを正しいスロットに配置するのは苦痛です。これは、エクステンションとサードパーティlibのバージョンが一貫しているという点で祝福ですが、サードパーティlibの新しいバージョンがバグ修正と新機能を提供する一方で、下位互換性を維持するのは苦痛です。
fris

1
「これは拡張機能とサードパーティのlibのバージョンが一貫しているという意味での祝福です...」それがチケットです!彼らの変化はあなたの変化です。Magento 2では、Composerのおかげでこれが少し簡単になりました。
ベンマークス、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ディレクトリに配置できます。

2つの拡張機能が同じリソースパッケージに依存している場合、重複ファイルが存在する可能性があるのは事実です。同じリソースパッケージの異なるバージョンを使用する場合もあります。ただし、基本的に、拡張機能は拡張機能のリソースのみを使用する必要があり(デフォルトのMagentoのリソースに依存できます)、拡張機能がサードパーティの拡張機能の「拡張バージョン」でない限り、他の拡張機能のリソースに依存しないでください。


ありがとうございました。あなたの答えは、サイト所有者側ではなく、開発者の視点を支持します。しかし、それはMagentoでの方法だと思いますか?サードパーティのアーカイブ/ライブラリを解凍し、すべてのファイルを元のファイルと同じ方法で保管することに合意した他のCMSを知っています。
fris

1
はい。パッケージリソースを分離するのはイライラすることです。Magentoはそれを要求します。簡単な方法はありません。Magentoのベストプラクティスでは、「すべてjs, css, imagesbase\defaultパッケージに収めるべき」と述べています。私の編集コードも参照してください
Rajeev K Tomy

こんにちはRajeev ...外部のresource / libファイルを「your_extension」の下に置くことのさらなる結果は、resource / libを使用する可能性のある他の拡張機能と共有できないことです。したがって、同じページにロードされた複数のコピー(おそらく異なるCLASHINGバージョン)が作成されます。痛い!
fris

編集内容をご覧ください
Rajeev K Tomy

0

Magentoには、Magento Connectと呼ばれる独自のパッケージマネージャーがあります。パッケージがどのように見えるかを完全に理解するには、公式ドキュメントからこのガイドを確認する必要があります。構造を理解したら、Magentoインストールからモジュールをパックできます。


答えてくれてありがとうございます。それは私の拡張機能をどのようにパッケージするかではなく、Magentoファイルツリーのどこに、コアまたは私の拡張機能の一部ではないが、システムの一部として含める必要があるサードパーティのファイルを置くかについてです。これらのファイルを置くようにユーザーにどこに指示しますか?サードパーティのファイル用の標準​​的なスポットはありますか?
fris

それは実際に私があなたに送ったリンクに関連しています。Jsとcssには、他の拡張ファイルと同様に、パッケージ用の独自のフォルダーがあります。Phpファイルは、ルートlibフォルダーの下、またはlibフォルダー内のモジュールフォルダー内に配置できます。
mbalparda 2015

はい、ありがとうございます。したがって、あなたの答えは次のとおりです。はいMagentoサイトビルダーは、サードパーティのアーカイブを解凍し、そのアーカイブからPHP、JS、HTML、CSSのパーツをプルして、Magentoファイルツリーの適切なスロットにこれらのファイルを再配布する必要があります。サイトビルダーがサードパーティのアーカイブ全体を、この目的のために指定された一般に合意されたディレクトリに単純に解凍できるようにすることはベストプラクティスとは見なされていません。関連する拡張機能に必要に応じてサードパーティのファイルが含まれます。
fris

はい。説明した内容はすべて、ドキュメントに記載されている梱包プロセスですでにカバーされています。
mbalparda

私はそのドキュメントを読みましたが、私の質問については何も言っていません。開発する拡張機能の一部であり、パッケージ化したいファイルについてのみ話します。カレンダーや画像ギャラリー、グラフ作成パッケージなど、拡張機能の一部ではないサードパーティのファイルをどこに置くかについては触れていません。独自に更新できるように、これらを開発中の拡張機能と一緒にパッケージ化したくない場合があります。質問はサードパーティのファイルをどこに置くかになりますか?それらのためのベストプラクティスアプローチは何ですか?
fris

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 or adminhtml / template`フォルダー

PSフロントエンドは拡張機能がフロントストア用かどうかを意味し、adminthmlは拡張機能が管理領域用かどうかを意味します。

これらのファイルをmagentoで保持するための特定の方法があるため、それらに従う必要があります。

また、希望の機能/コピー機能がmagento / zendフレームワークですでに利用可能かどうかも確認します。たとえば、PDFの作成、電子メールの送信、XMLの読み取りなどは、すでにmagentoに組み込まれています。

お役に立てれば。

アップデート1

ファイルをどこかに保持したい場合は、どこにでも保持できます。magentoルート内に新しいフォルダーを作成することもできます。しかし、これは、これらのファイルを実行するときにサーバーに負荷をかけるmagentoのベストプラクティスではありません。これをチェックしたいhttps://magentotherightway.com/


リンクと説明をありがとう。しかし、私は拡張自体については尋ねていません。拡張機能に含まれていないサードパーティのコードをどこに置くかについて質問しています。一般的に合意された単一の場所はありますか?
fris

ファイルをどこかに保持したい場合は、どこにでも保持できます。magentoルート内に新しいフォルダーを作成することもできます。しかし、これは、これらのファイルを実行するときにサーバーに負荷をかけるmagentoのベストプラクティスではありません。このmagentotherightway.com
Adarsh Khatri

分散拡張機能はコードプールにインストールしないでlocalください。
ベンマークス2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.