Где я могу разместить файлы .php, .js, .html, .css из сторонних библиотек, которые взаимодействуют с разрабатываемым мною расширением?

10

Допустим, я хочу разработать расширение Magento, которое взаимодействует, скажем, с пакетом диаграмм с открытым исходным кодом или галереей изображений или чем-то, что НЕ является частью самого расширения. При загрузке (отдельно от расширения) сторонняя библиотека поставляется в отдельном .zip со всеми своими .php, .js, .html и .css вместе.

Поместить ли я на бедного владельца сайта, который хочет установить мое расширение вместе со сторонней библиотекой lib, бремя разрыва оригинального стороннего .zip и заставить их поместить .js в / js, .php в / lib,. css в / skin и т.д?

Или существует общепринятая «свалка» для любых сторонних .zips, где можно легко разархивировать загрузку как есть и покончить с этим?

ВКИ
источник

Ответы:

6

Я не знаю, есть ли один правильный ответ на этот вопрос, так как это действительно зависит от кода, который вы включаете.

Если вы хотите включить стороннюю библиотеку php, например, sdk для внешнего API, то ее следует поместить в каталог / lib вашего проекта Magento, чтобы он мог быть включен вашим расширением, которое ее использует.

Однако вы также используете js и css в качестве примеров. Если вы используете в своем расширении js от стороннего производителя для вывода кода, например, некоторых js, которые отображают диаграмму холста, это, скорее всего, должно быть помещено в каталог / js, чтобы оно могло быть включено вашим расширением. Для css его, вероятно, следует добавить в тему base / default и каталоги скинов.

К сожалению, система расширений Magento 1 не позволяет легко распространять подобные вещи, поскольку файлы распространяются по всему проекту, а не содержатся в одном каталоге. Такие инструменты, как Magento Composer Installer и Modman, помогают в этом.

Эндрю Кетт
источник
4

При загрузке (отдельно от расширения) сторонние расширения поставляются в отдельном .zip со всеми его .php, .js, .html и .css вместе.

Я всегда был поклонником гадания соглашений от самого источника, хотя это может быть неоднозначным с Magento 1.

При условии, что лицензия на стороннюю библиотеку допускает пакетирование, вы должны распаковать ее и перепаковать вместе с вашим расширением, потому что нет собственного механизма для распаковки отдельной суббиблиотеки (я могу ошибаться).

Куда обращаться эти ресурсы, зависит от типа и внутренней организации файлов. Чистые библиотеки JS должны пойти под ./js/. Файлы, которые выполняются на стороне сервера, относятся к ./lib/классу, отмечая, что любой класс PHP ./lib/может быть автоматически загружен по схеме (по существу, PSR-0) (см. Соглашение об автозагрузке Zend Framework 1). Ничто не ./lib/может быть (должно быть) доступно через клиента (ссылка ./lib/.htaccess).

benmarks
источник
Спасибо Бен. Ваш ответ имеет смысл, но он означает, что владельцы сайтов не могут легко обновить стороннюю библиотеку до последней версии, независимо от расширения Magento, которое взаимодействует с ней. Если только вы не поймете, как все это тесно связано, и даже тогда будет неудобно помещать все биты в правильные места. Это благословение в том смысле, что версии расширений и сторонних библиотек остаются согласованными, но боль, когда новые версии сторонних библиотек предлагают исправления ошибок и новые функции при сохранении обратной совместимости.
Фри
1
«Это благословение в том смысле, что версии расширений и сторонних библиотек остаются неизменными ...» Это билет! Их изменения - это ваши изменения. Это все немного проще в Magento 2 благодаря Composer.
отметки
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, imagesв base\defaultупаковке». Также смотрите мой код редактирования
Rajeev K Tomy
Привет Раджив ... Еще одним последствием помещения внешних ресурсов / файлов lib в "your_extension" является то, что они не могут использоваться другими расширениями, которые также могут использовать ресурс / lib. Таким образом, вы получите несколько копий, возможно, разных версий CLASHING, загруженных на одну и ту же страницу. Ой!
Фри
посмотрите мои правки, пожалуйста
Rajeev K Tomy
0

У Magento есть собственный менеджер пакетов под названием Magento Connect. Вы должны проверить это руководство из официальной документации, чтобы полностью понять, как должен выглядеть пакет. Вы можете упаковать свой модуль из установки Magento, как только вы поймете структуру.

mbalparda
источник
Спасибо за ваш ответ, но это не совсем то, что я спрашивал. Речь идет не о том, как упаковать мое расширение, а о том, где в дереве файлов Magento размещать сторонние файлы, которые НЕ являются частью ядра или моего расширения, но должны быть включены как часть системы. Где я могу сказать пользователям, чтобы положить эти файлы? Есть ли стандартное место (или пятна) для сторонних файлов?
Фри
Это на самом деле связано со ссылкой, которую я вам отправил. Js и css имеют свои собственные папки для пакетов, как и любой другой файл расширения. Файлы php могут находиться либо в корневой папке lib, либо внутри папки модуля внутри папки lib.
Мбалпарда
Хорошо спасибо. Итак, ваш ответ: Да. Создатели сайтов Magento должны разархивировать сторонний архив, извлечь части PHP, JS, HTML и CSS из этого архива и перераспределить эти файлы в соответствующие слоты в дереве файлов Magento. НЕ считается наилучшей практикой, позволяющей разработчику сайта просто разархивировать весь сторонний архив в какой-то общепринятый каталог, предназначенный для этой цели, откуда соответствующее расширение будет включать сторонние файлы по мере необходимости.
Фри
Да. Все, что вы описали, уже включено в процесс упаковки, описанный в документации.
mbalparda
Я прочитал эту документацию, но она ничего не говорит о моем вопросе. Он говорит только о файлах, которые являются частью расширения, которое вы разрабатываете и хотите упаковать. Здесь не сказано, куда помещать сторонние файлы, которые НЕ являются частью расширения, такие как календарь, галерея изображений или пакет диаграмм. Возможно, вы не захотите упаковывать их с разрабатываемым расширением, чтобы их можно было обновлять независимо. Тогда возникает вопрос, куда поместить сторонние файлы? Каков наилучший подход для тех?
Фрис
0

В основном Magento использует собственную структуру для хранения .php, .phtml, js, css, imagesфайлы.

Для разработчика расширений 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. Ваша files should go toпапка 'html app / design / frontend или adminhtml / template`

PS frontend означает, что ваше расширение предназначено для front store, а adminthml означает, что ваше расширение предназначено для области администратора.

Есть специальный способ хранения этих файлов в magento, поэтому вы должны следовать им.

Я также проверил бы, доступны ли ваши желаемые / копирующие функции в magento / zend framework. Например, создание pdf, отправка электронной почты, чтение xml и т. Д. Уже встроены в magento.

Надеюсь это поможет.

Обновление 1

Если вы хотите просто где-то хранить свои файлы, вы можете хранить их где угодно. Вы даже можете создать новую папку в корне magento. Но это не лучшая практика для magento, который будет загружать ваш сервер при выполнении этих файлов. Вы хотите проверить это https://magentotherightway.com/

Адарш Хатри
источник
Спасибо за ссылку и объяснение. Но я не спрашиваю о самом расширении. Я спрашиваю о том, где разместить сторонний код, не включенный в расширение. Существует ли общепринятое ЕДИНОЕ местоположение для этого?
Фрис
Если вы хотите просто где-то хранить свои файлы, вы можете хранить их где угодно. Вы даже можете создать новую папку в корне magento. Но это не лучшая практика для magento, который будет загружать ваш сервер при выполнении этих файлов. Вы хотите проверить это magentotherightway.com
Adarsh ​​Khatri
Распределенные расширения никогда не должны устанавливаться в localпул кодов.
отметки