Où dois-je placer les fichiers .php, .js, .html, .css à partir d'une bibliothèque tierce qui s'interface avec une extension que je développe?

10

Disons que je veux développer une extension Magento qui s'interface, disons, avec un package de graphiques Open Source ou une galerie d'images ou tout ce qui ne fait PAS partie de l'extension elle-même. Une fois téléchargée (séparée de l'extension), la bibliothèque tierce est livrée dans son propre .zip unique avec tous ses .php, .js, .html et .css ensemble.

Dois-je placer sur le pauvre propriétaire du site qui souhaite installer mon extension avec la bibliothèque tierce, la charge de séparer le .zip tiers d'origine et de le faire mettre .js dans / js, .php dans / lib,. css dans / skin etc?

Ou existe-t-il un "dépotoir" généralement accepté pour les .zips tiers où l'on peut facilement décompresser le téléchargement TEL QUEL et en finir avec?

fris
la source

Réponses:

6

Je ne sais pas s'il y a une seule bonne réponse à cette question car cela dépend vraiment du code que vous incluez.

Si vous souhaitez inclure une bibliothèque php tierce, par exemple un sdk pour une API externe, alors elle doit être placée dans le répertoire / lib de votre projet Magento afin qu'elle puisse être incluse par votre extension qui la consomme.

Cependant, vous utilisez également js et css comme exemples. Si vous utilisez js de tierces parties dans votre extension pour sortir du code, par exemple certains js qui rendent un graphique de canevas, alors cela devrait très probablement être placé dans le répertoire / js afin qu'il puisse être inclus par votre extension. Pour css, il devrait probablement être ajouté au thème de base / par défaut et aux répertoires de skin.

Malheureusement, le système d'extension Magento 1 ne facilite pas la distribution de ce genre de chose car les fichiers sont répartis sur l'ensemble du projet plutôt que contenus dans un seul répertoire. Des outils comme Magento Composer Installer et Modman aident à cela.

Andrew Kett
la source
4

Une fois téléchargées (distinctes de l'extension), les extensions tierces sont livrées dans leur propre .zip unique avec tous ses .php, .js, .html et .css ensemble.

J'ai toujours été un fan de deviner les conventions à partir de la source elle-même, bien que cela puisse être ambigu avec Magento 1.

Si la licence de bibliothèque tierce permet le regroupement, vous devez la décompresser et la reconditionner avec votre extension, car il n'y a pas de mécanisme natif pour décompresser une sous-bibliothèque distincte (je me trompe peut-être).

La destination de ces actifs dépend du type et de l'organisation interne des fichiers. Les bibliothèques JS pures devraient disparaître ./js/. Les fichiers qui sont exécutés côté serveur appartiennent à under ./lib/, notant que toute classe PHP under ./lib/peut être chargée automatiquement par le schéma de chargement automatique (essentiellement PSR-0) (réf. Convention de chargement automatique Zend Framework 1). Rien sous ./lib/ne peut (ne doit être) accessible via le client (réf. ./lib/.htaccess).

Benmarks
la source
Merci Ben. Votre réponse est logique, mais cela signifie que les propriétaires de sites ne peuvent pas facilement mettre à niveau la bibliothèque tierce vers la dernière version, indépendamment de l'extension Magento qui s'y connecte. À moins que vous ne compreniez intimement comment tout cela se tient et même alors, il est difficile de mettre tous les bits dans les bonnes fentes. C'est une bénédiction dans le sens où les versions d'extension et de bibliothèque tierce restent cohérentes, mais une douleur lorsque les nouvelles versions de la bibliothèque tierce proposent des corrections de bogues et de nouvelles fonctionnalités tout en continuant la compatibilité descendante.
Fris
1
"C'est une bénédiction dans le sens où les versions d'extension et de bibliothèque tierce restent cohérentes ..." C'est le ticket! Leurs changements sont vos changements. C'est un peu plus facile dans Magento 2 grâce à Composer.
benmarks
1

Vous voulez donc créer une extension et vous utilisez une ressource / un package externe pour la construire. À mon avis, quel que soit le package que vous avez utilisé dans votre extension, votre extension devrait suivre les meilleures pratiques de Magento. Cela signifie que vous devez séparer tous les js, css et images de la ressource externe et les placer dans base\defaultles répertoires des packages de thèmes.

c'est-à-dire qu'il n'existe aucun emplacement unique de ce type pour placer les ressources de packages tiers. En fin de compte, lorsque vous fournissez une extension sympa, tous les js, css et images liés à votre extension doivent être conservés dans un endroit où un autre développeur va normalement regarder et qui est dans presque tous les cas le base/defaultpackage de thème.

En bref

Toutes vos extensions js devraient être incluses

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]

De cette façon, un autre développeur peut facilement trouver très facilement les js, css et images (de vos ressources externes) de votre extension. Étant donné que vous utilisez un sous-répertoire supplémentaire pour indiquer les fichiers de ressources externes à l'intérieur de votre répertoire de noms d'extensions, cela donnera aux autres un meilleur indice que votre extension dépend de certains packages tiers.

Je vous recommande donc de séparer les packages externes et de les intégrer à votre extension afin qu'un autre développeur puisse facilement trouver vos dépendances. :-)

MODIFIER - 1

Vous ne devez pas alourdir votre extension pour le propriétaire de votre site. Vous pouvez éviter cette difficulté en alignant correctement votre extension. Cela signifie que si vous enregistrez tous les fichiers associés dans les emplacements de répertoire spécifiés, tout ce qu'un propriétaire de site doit faire est de récupérer votre extension, puis de fusionner votre extension à partir du répertoire racine de l'application. ie Alignez correctement votre extension. Ça devrait ressembler à ça.

/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

MODIFIER - 2

S'il y a des packages qui devraient être partagés entre toutes les applications Magento (comme une bibliothèque javascript ou un package php, etc.), vous pouvez les mettre dans le \librépertoire.

Il est vrai qu'il peut exister un fichier en double si deux extensions s'appuient sur les mêmes packages de ressources. Ils peuvent également utiliser des versions différentes du même package de ressources. Mais en gros, votre extension doit utiliser uniquement les ressources de votre extension (et peut s'appuyer sur les ressources par défaut de Magento) et elle ne doit pas s'appuyer sur les ressources d'autres extensions, sauf si votre extension est une "version d'extension" d'une extension tierce.

Rajeev K Tomy
la source
Je vous remercie. Votre réponse privilégie le point de vue du développeur, plutôt que le côté propriétaire du site. Mais je suppose que c'est comme ça à Magento? Je connais d'autres CMS qui ont convenu d'endroits pour décompresser des archives / bibliothèques tierces, en gardant tous les fichiers ensemble exactement comme ils sont dans l'original.
fris
1
Oui. Je sais qu'il est frustrant de séparer une ressource de package. Magento l'exige. Il n'y a pas de moyen facile pour cela. Les meilleures pratiques de Magento indiquent "Vous devez tout garder js, css, imagesdans le base\defaultpackage". Voir aussi mon code d'édition
Rajeev K Tomy
Salut Rajeev ... Une autre conséquence de la mise des fichiers externes de ressources / lib sous "votre_extension" est qu'ils ne peuvent pas être partagés par d'autres extensions qui peuvent également utiliser la ressource / lib. Vous vous retrouvez donc avec plusieurs copies, éventuellement différentes versions de CLASHING, chargées sur la même page. Aie!
fris
voir mes modifications s'il vous plaît
Rajeev K Tomy
0

Magento a son propre gestionnaire de packages appelé Magento Connect. Vous devriez vérifier ce guide à partir de la documentation officielle pour bien comprendre à quoi le paquet devrait ressembler. Vous pouvez emballer votre module à partir d'une installation Magento une fois que vous avez compris la structure.

mbalparda
la source
Merci pour votre réponse mais ce n'est pas tout à fait ce que je demandais. Il ne s'agit pas de savoir comment empaqueter mon extension, mais de savoir où dans l'arborescence de fichiers Magento placer les fichiers tiers qui ne font PAS partie du noyau ou de mon extension, mais doivent être inclus dans le système. Où dois-je dire aux utilisateurs de placer ces fichiers? Existe-t-il un ou des spots standard pour les fichiers tiers?
Fris
Il s'agit en fait du lien que je vous ai envoyé. Js et css ont leurs propres dossiers pour les packages comme tout autre fichier d'extension. Les fichiers php peuvent se trouver sous le dossier lib racine ou dans le dossier module à l'intérieur d'un dossier lib.
mbalparda
D'accord, merci. Votre réponse est donc: Oui, les constructeurs de sites Magento doivent décompresser l'archive tierce, extraire les parties PHP, JS, HTML et CSS de cette archive et redistribuer ces fichiers dans les emplacements appropriés de l'arborescence de fichiers Magento. Il n'est PAS considéré comme la meilleure pratique de permettre au constructeur de site de simplement décompresser l'intégralité de l'archive tierce dans un répertoire généralement convenu désigné à cet effet, à partir duquel les extensions associées incluront les fichiers tiers selon les besoins.
Fris
Oui. Tout ce que vous avez décrit est déjà couvert dans le processus d'emballage décrit dans la documentation.
mbalparda
Eh bien, j'ai lu cette documentation, mais elle ne dit rien de ma question. Il ne parle que des fichiers qui font partie de l'extension que vous développez et que vous souhaitez empaqueter. Il ne dit pas où placer les fichiers tiers qui ne font PAS partie de l'extension, comme un calendrier ou une galerie d'images ou un package de graphiques. Vous ne voudrez peut-être pas les empaqueter avec l'extension que vous développez, afin qu'ils puissent être mis à jour indépendamment. La question devient alors où placer les fichiers tiers? Quelle est l'approche des meilleures pratiques pour ceux-ci?
fris
0

Fondamentalement Magento utilise la structure propre de à détenir .php, .phtml, js, css, imagesfichiers.

Pour les développeurs d'extensions magento, il est très important de suivre la voie magento. Vérifiez ce lien .

Alors,

  1. Vos .phpfichiers doivent aller sous app/code/communitydossier
  2. Vos jsfichiers peuvent aller dans un jsdossier ou dans un skin/frontend or adminhtml/your_theme_pack/your_theme/jsdossier
  3. Vos cssfichiers peuvent aller dans le skin/frontend or adminhtml/your_theme_pack/your_theme/cssdossier
  4. Vos imagesfichiers peuvent aller dans le skin/frontend or adminhtml/your_theme_pack/your_theme/imagesdossier
  5. Votre files should go todossier «html app / design / frontend ou adminhtml / template»

Frontend PS signifie si votre extension est pour le magasin frontal et adminthml signifie si votre extension est pour la zone d'administration.

Il existe des moyens spécifiques de conserver ces fichiers dans magento, vous devez donc les suivre.

Je vérifierais également si vos fonctions souhaitées / de copie sont déjà disponibles dans le framework magento / zend. Par exemple, la création de pdf, l'envoi d'e-mails, la lecture de xml, etc. sont déjà construits dans magento.

J'espère que cela t'aides.

Mise à jour 1

Si vous souhaitez simplement conserver vos fichiers quelque part, vous pouvez les conserver n'importe où. Vous pouvez même créer un nouveau dossier dans la racine magento. Mais ce n'est pas la meilleure pratique pour magento, qui chargera votre serveur lors de l'exécution de ces fichiers. Vous souhaitez vérifier ce https://magentotherightway.com/

Adarsh ​​Khatri
la source
Merci pour le lien et l'explication. Mais je ne pose pas de question sur l'extension elle-même. Je demande où placer le code tiers non inclus dans l'extension. Existe-t-il un emplacement SINGLE convenu d'un commun accord?
Fris
Si vous souhaitez simplement conserver vos fichiers quelque part, vous pouvez les conserver n'importe où. Vous pouvez même créer un nouveau dossier dans la racine magento. Mais ce n'est pas la meilleure pratique pour magento, qui chargera votre serveur lors de l'exécution de ces fichiers. Vous voulez vérifier ce magentotherightway.com
Adarsh ​​Khatri
Les extensions distribuées ne doivent jamais être installées dans le localpool de codes.
benmarks