Onde coloco arquivos .php, .js, .html, .css de uma biblioteca de terceiros que faz interface com uma extensão que desenvolvo?

10

Digamos que eu queira desenvolver uma extensão Magento que faça interface com, digamos, um pacote de gráficos de código-fonte aberto ou uma galeria de imagens ou qualquer outra coisa que NÃO faça parte da própria extensão. Quando baixada (separada da extensão), a lib de terceiros vem em seu próprio arquivo .zip, com todos os seus arquivos .php, .js, .html e .css juntos.

Coloco no proprietário do site pobre que deseja instalar minha extensão junto com a lib de terceiros, o ônus de separar o .zip original de terceiros e fazê-los colocar .js em / js, .php em / lib,. css em / skin etc?

Ou existe um "depósito de lixo" geralmente aceito para qualquer arquivo .zip de terceiros, onde é possível descompactar convenientemente o download COMO ESTÁ e terminar com ele?

fris
fonte

Respostas:

6

Não sei se existe uma única resposta correta para essa pergunta, pois ela realmente depende do código que você está incluindo.

Se você deseja incluir uma biblioteca php de terceiros, por exemplo, um sdk para uma API externa, ela deve ser colocada no diretório / lib do seu projeto Magento para que possa ser incluída pela extensão que a consome.

No entanto, você também está usando js e css como exemplos. Se você estiver usando js de terceiros em sua extensão para gerar o código de saída, por exemplo, alguns js que renderizam um gráfico de tela, é mais provável que isso seja colocado no diretório / js para que possa ser incluído na sua extensão. Para css, provavelmente deve ser adicionado ao tema base / padrão e aos diretórios de capa.

Infelizmente, o sistema de extensão Magento 1 não facilita a distribuição desse tipo de coisa, pois os arquivos são espalhados por todo o projeto, em vez de serem contidos em um único diretório. Ferramentas como o Magento Composer Installer e Modman ajudam um pouco com isso.

Andrew Kett
fonte
4

Quando baixadas (separadas da extensão), as extensões de terceiros vêm em seu próprio arquivo .zip, com todos os seus arquivos .php, .js, .html e .css juntos.

Eu sempre fui fã de convenções divinas da própria fonte, embora possa ser ambígua com o Magento 1.

Desde que a licença de biblioteca de terceiros permita o empacotamento, você deve descompactá-lo e reembalá-lo junto com sua extensão, porque não há mecanismo nativo para descompactar uma sub-biblioteca separada (eu posso estar errado).

A localização desses ativos depende do tipo e da organização interna dos arquivos. As bibliotecas JS puras devem estar abaixo ./js/. Os arquivos executados no lado do servidor pertencem a ./lib/, observando que qualquer classe PHP abaixo ./lib/pode ser carregada automaticamente pelo esquema de carregamento automático (essencialmente PSR-0) (consulte a convenção de carregamento automático do Zend Framework 1). Nada abaixo ./lib/pode ser (deve ser) acessado através do cliente (ref. ./lib/.htaccess).

benmarks
fonte
Obrigado Ben. Sua resposta faz sentido, mas significa que os proprietários do site não podem atualizar facilmente a biblioteca de terceiros para a versão mais recente, independentemente da extensão Magento que faz interface com ela. A menos que compreendam intimamente como tudo se encaixa e mesmo assim é doloroso colocar todos os bits nos slots corretos. Isso é uma bênção no sentido de que as versões da extensão e da lib de terceiros permanecem consistentes, mas é um problema quando novas versões da lib de terceiros oferecem correções de bugs e novos recursos, enquanto continuam a compatibilidade com versões anteriores.
Fris
1
"Esta é uma bênção no sentido de que versões de extensão e lib de terceiros permanecem consistentes ..." Esse é o bilhete! As mudanças deles são suas. Tudo isso é um pouco mais fácil no Magento 2, graças ao Composer.
benmarks 13/07/2015
1

Então, você deseja criar uma extensão e usar um pacote / recurso externo para construí-la. Na minha opinião, seja qual for o pacote que você usou na sua extensão, ela deve seguir as práticas recomendadas do Magento. Isso significa que você deve separar todas as imagens js, css e do recurso externo e colocar nos base\defaultdiretórios dos pacotes de temas.

ou seja, não existe um local único para a colocação de recursos de pacotes de terceiros. Por fim, quando você entrega uma extensão legal, todos os js, css e imagens relacionados à sua extensão devem ser mantidos em um local onde normalmente um outro desenvolvedor irá procurar e que, na maioria dos casos, é o base/defaultpacote de temas.

Em resumo

Todos os seus js de extensão devem estar sob

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]

Dessa forma, outro desenvolvedor pode encontrar facilmente js, css e imagens (também dos seus recursos externos) da sua extensão. Como você está usando um subdiretório extra para indicar os arquivos de recursos externos dentro do diretório de nomes de extensões, isso dará a outras pessoas uma melhor pista de que sua extensão depende de alguns pacotes de terceiros.

Portanto, recomendo que você separe os pacotes externos e faça parte da sua extensão para que outro desenvolvedor possa encontrar facilmente suas dependências. :-)

EDIT - 1

Você não deve sobrecarregar sua extensão para o proprietário do site. Você pode evitar essa dificuldade alinhando corretamente sua extensão. Isso significa que, se você salvar todos os arquivos relacionados nos locais de diretório especificados, o que todo proprietário de um site deve fazer é pegar sua extensão e mesclar sua extensão no diretório raiz do aplicativo. ou seja, alinhe sua extensão corretamente. Deve ficar assim.

/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

Se houver alguns pacotes que devem ser compartilhados em todos os aplicativos Magento (como uma biblioteca javascript ou um pacote php etc), você poderá colocá-los no \libdiretório

É verdade que, pode haver um arquivo duplicado se duas extensões dependem dos mesmos pacotes de recursos. Eles também podem usar uma versão diferente do mesmo pacote de recursos. Mas, basicamente, sua extensão deve usar apenas o recurso da sua extensão (e pode depender dos recursos padrão do Magento) e não deve depender dos recursos de outras extensões, a menos que sua extensão seja uma "versão extensível" de uma extensão de terceiros.

Rajeev K Tomy
fonte
Obrigado. Sua resposta favorece o ponto de vista do desenvolvedor, e não o lado do proprietário do site. Mas acho que é assim no Magento? Conheço outros CMS que concordaram em descompactar arquivos / bibliotecas de terceiros, mantendo todos os arquivos do mesmo jeito que estão no original.
Fris
1
Sim. Eu sei que é frustrante separar um recurso de pacote. Magento exige isso. Não existe uma maneira fácil para isso. As melhores práticas do Magento dizem "Você deve manter tudo js, css, imagesno base\defaultpacote". Veja também o meu código de edição
Rajeev K Tomy
Oi Rajeev ... Uma outra conseqüência de colocar os arquivos externos de recursos / lib em "sua_extensão" é que ele não pode ser compartilhado por outras extensões que também podem usar o recurso / lib. Então você acaba com várias cópias, possivelmente versões diferentes do CLASHING, carregadas na mesma página. Ai!
Fris
veja minhas edições, por favor
Rajeev K Tomy
0

O Magento possui seu próprio gerenciador de pacotes chamado Magento Connect. Você deve verificar este guia na documentação oficial para entender completamente como deve ser a aparência do pacote. Você pode compactar seu módulo a partir de uma instalação Magento depois de entender a estrutura.

mbalparda
fonte
Obrigado por sua resposta, mas não é exatamente o que eu estava perguntando. Não é sobre como empacotar minha extensão, é sobre onde, na árvore de arquivos Magento, colocar arquivos de terceiros que NÃO fazem parte do núcleo ou da minha extensão, mas precisam ser incluídos como parte do sistema. Onde digo aos usuários para colocar esses arquivos? Existe um ponto (ou pontos) padrão para arquivos de terceiros?
Fris
Na verdade, está relacionado ao link que enviei a você. Js e css têm suas próprias pastas para pacotes, como qualquer outro arquivo de extensão. Os arquivos php podem estar na pasta lib raiz ou dentro da pasta do módulo dentro de uma pasta lib.
Mllpp
Ok, obrigada. Portanto, sua resposta é: Sim, os construtores de sites Magento devem descompactar o arquivo de terceiros, extrair as partes PHP, JS, HTML e CSS desse arquivo e redistribuir esses arquivos nos slots apropriados na árvore de arquivos Magento. NÃO é considerado uma prática recomendada permitir que o construtor de sites simplesmente descompacte todo o arquivo de terceiros em um diretório comum acordado designado para esse fim a partir do qual as extensões associadas incluirão os arquivos de terceiros, conforme necessário.
fris
Sim. Tudo o que você descreveu já está coberto no processo de embalagem descrito na documentação.
Mbalparda
Bem, eu li essa documentação, mas não diz nada sobre a minha pergunta. Ele fala apenas sobre os arquivos que fazem parte da extensão que você desenvolve e deseja empacotar. Não diz onde colocar arquivos de terceiros que NÃO fazem parte da extensão, como um calendário, uma galeria de imagens ou um pacote de gráficos. Você pode não querer empacotá-las com a extensão que está desenvolvendo, para que possam ser atualizadas independentemente. A questão então se torna onde colocar os arquivos de terceiros? Qual é a abordagem de melhores práticas para eles?
Fris
0

Basicamente, o Magento usa sua própria estrutura para armazenar .php , .phtml, js, css, imagesarquivos.

Para o desenvolvedor de extensões magento, é muito importante que você siga o caminho magento. Verifique este link .

Assim,

  1. Seu .php arquivos devem ir para a app/code/communitypasta
  2. Seus jsarquivos podem ir parajs pasta ou na skin/frontend or adminhtml/your_theme_pack/your_theme/jspasta
  3. Seu css arquivos podem ir para a skin/frontend or adminhtml/your_theme_pack/your_theme/csspasta
  4. Seu images arquivos podem ir para a skin/frontend or adminhtml/your_theme_pack/your_theme/imagespasta
  5. Sua files should go topasta 'html app / design / frontend ou adminhtml / template`

O front-end PS significa se sua extensão é para armazenamento frontal e adminthml significa se sua extensão é para a área administrativa.

Há uma maneira específica de armazenar esses arquivos no magento, então você deve segui-los.

Eu também verificaria se suas funções desejadas / de cópia já estão disponíveis no framework magento / zend. Por exemplo, criar pdf, enviar e-mail, ler xml, etc. já estão compilados no magento.

Espero que isto ajude.

Atualização 1

Se você quiser apenas manter seus arquivos em algum lugar, poderá em qualquer lugar. Você pode até criar uma nova pasta dentro da raiz do magento. Mas essa não é uma prática recomendada para o magento, que carregará seu servidor ao executar esses arquivos. Você deseja verificar este https://magentotherightway.com/

Adarsh ​​Khatri
fonte
Obrigado pelo link e pela explicação. Mas não estou perguntando sobre a extensão em si. Estou perguntando sobre onde colocar o código de terceiros não incluído na extensão. Existe um local único acordado para isso?
Fris
Se você quiser apenas manter seus arquivos em algum lugar, poderá em qualquer lugar. Você pode até criar uma nova pasta dentro da raiz do magento. Mas essa não é uma prática recomendada para o magento, que carregará seu servidor ao executar esses arquivos. Você deseja verificar este magentotherightway.com
Adarsh ​​Khatri
As extensões distribuídas nunca devem ser instaladas no conjunto de localcódigos.
benmarks 13/07/2015