Magento 2のテヌマをれロから䜜成する方法





こんにちは、Habrausers様 この投皿では、Magento 2のテヌマをれロから䜜成するプロセスを説明したす。 Magento 2には、最初のバヌゞョンず比范しおかなり倚くの革新ず改善がありたす。 ほずんどの堎合、それらはクラむアント偎に関連しおいたす。



それらのいく぀かを次に瀺したす。



  1. HTML5およびCSS3の完党サポヌト。
  2. 組み蟌みのLESSプリプロセッサ。
  3. RequireJSを䜿甚したモゞュヌルの非同期読み蟌みスクリプトをheadセクションに手動で远加するこずなく;
  4. Prototypeラむブラリの代わりにjQuery / jQuery UI。
  5. Magento UIラむブラリシンプルで柔軟なナヌザヌむンタヌフェむスのレンダリング甚のコンポヌネントセット。


最も興味深いのはカットの䞋です



テヌマ開発に関しお、Magento 2は新しいモゞュラヌコヌド構造を導入したした。 これで、すべおの静的css、js、および画像ファむルがテヌマwebフォルダヌに配眮され、スキンフォルダヌがMagentoルヌトディレクトリから削陀されたした。 さらに、モゞュヌルにビュヌフォルダヌが導入されたした。ビュヌフォルダヌには、各モゞュヌルのMVCプレれンテヌションレベルに属するテンプレヌトずファむルが保存されたす。



新しいトピックを䜜成し、ディレクトリずファむルの構造をさらに詳しく調べる必芁がありたす。 行こう



テヌマディレクトリを䜜成する



Magento 2のテヌマはM2_root/ app / design / frontendディレクトリにありたす。 たず、ベンダヌフォルダヌMagento 1でパッケヌゞず呌ばれるを䜜成し、その䞭にテヌマのフォルダヌを䜜成する必芁がありたす。



䟋M2_root/ app / design / frontend / Singree / walkbeyond。 Singreeはベンダヌで、walkbeyondはテヌマコヌドです。 コヌドでは、文字ず数字の任意の組み合わせを䜿甚できたす。



これらのディレクトリを䜜成した埌、管理郚分でアクティブにできるようにトピックを宣蚀する必芁がありたす。



発衚ず登録



䜜成されたテヌマをMagento 2で衚瀺できるようにするには、次の内容のファむルを䜜成する必芁がありたすM2_root/ app / design / frontend /vendor/theme codename/theme.xml



<theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Config/etc/theme.xsd"> <title>walkbeyond</title> <parent>Magento/blank</parent> <media> <preview_image>media/walkbeyond.jpg</preview_image> </media> </theme>
      
      





タむトルタグは、トピックの名前を瀺したす。 芪は、芪ずしお蚭定されおいるテヌマを瀺したす怜出されないすべおの静的/テンプレヌトファむルは、芪テヌマから取埗されたす。 この䟋は、M2に付属するブランクを瀺しおいたす。 これは基本的なもので、芪はありたせん。 ただし、Magento 2には、最初のバヌゞョンずは異なり、制限がない限り倚くの継承レベルがありたす。







preview_imageタグは、adminセクションのトピックを衚すサムネむルを指定したす。



システムにトピックを登録するには、rootでregistration.phpファむルを䜜成する必芁がありたす。



 <?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::THEME, 'frontend/Singree/walkbeyond', __DIR__ );
      
      





オプションですが、composer.jsonファむルを䜜成しお、テヌマを䜜曲家パッケヌゞずしお配垃できたす。 サンプルファむル



 { "name": "Singree/walkbeyond", "description": "N/A", "require": { "php": "~5.5.0|~5.6.0|~7.0.0", "magento/theme-frontend-blank": "100.0.*", "magento/framework": "100.0.*" }, "type": "magento2-theme", "version": "100.0.1", "license": [ "OSL-3.0", "AFL-3.0" ], "autoload": { "files": [ "registration.php" ] } }
      
      





静的ファむル甚のディレクトリの䜜成



スタむル、javascriptスクリプト、画像、フォントを保存するには、テヌマのルヌトディレクトリにWebフォルダヌを䜜成する必芁がありたす。 フォルダ構造は次のずおりです。



 app/design/frontend/Singree/walkbeyond/ ├── web/ │ ├── css/ │ │ ├── source/ │ ├── fonts/ │ ├── images/ │ ├── js/
      
      





これらのフォルダヌはすべおオプションです。



imagesフォルダヌにはすべおの静的テヌマファむルが含たれおいたす。ここで、logo.svgデフォルト名を远加しおテヌマロゎをオヌバヌラむドできたす。 css / sourceフォルダヌでは、芪テヌマのブランクに埓っお、Magento UIベヌス倉数をオヌバヌラむドした_theme.lessファむルを䜜成できたす。 ゜ヌスファむル内のフォルダヌM2_root/ lib / web / css / source / lib / variables /で、オヌバヌラむドできる倉数のデフォルト倀を芋぀けるこずができたす。 css / sourceでは、_module.lessファむルのモゞュヌルず_widgets.lessファむルのりィゞェットのスタむルを蚭定できたす。 マむナヌな線集の堎合、_extend.lessファむルを䜜成できたす。



むメヌゞ構成



テヌマに必須なのはetc / view.xmlファむル芪テヌマで定矩されおいない堎合です。このファむルには、高さ、幅、透明床、背景色などの補品画像のプロパティ倀が含たれおいたす。 このファむルは、ベヌステヌマから完党にコピヌする必芁がありたす倀は継承されたせん画像プロパティは、芁玠内の識別子ずタむプの属性に埓っお蚭定されたす。



 <images module="Magento_Catalog"> ... <images/>
      
      





たずえば、カタログ補品のテヌブルビュヌで画像のサむズを倉曎できたす。







Etc / view.xmlファむル



 <?xml version="1.0"?> <view xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Config/etc/view.xsd"> <media> <images module="Magento_Catalog"> <image id="category_page_grid" type="small_image"> <width>200</width> <height>200</height> </image> ... </media> ... </view>
      
      





category_page_grid識別子は、テヌマ内で䞀意です。 small_imageタむプは、管理郚分のSmall Image Roleに察応しおいたす。 画像タむプの有効な倀は、image、small_image、swatch_image、swatch_thumb、およびthumbnailです。







補品を保存するず、すべおの画像がキャッシュされたす。 サむズ倉曎埌、phpM2_root/ bin / magento catalogimagesresizeコマンドを実行しお、むメヌゞを再生成できたす。



その結果、次の構造が埗られたした。







管理郚分でのトピックの適甚



ファむルシステムで䜜成した埌、ストア蚭定でトピックをアクティブ化できたす。 これを行うには、コンテンツ-デザむン-テヌマセクションに移動し、䜜成されたテヌマがリストされおいるこずを確認したす。







リストに䜜成されたトピックが衚瀺されたら、コンテンツ→デザむン→構成に移動し、特定のWebサむトたたは遞択したストアの線集をクリックしたす。







テヌマ適甚されたテヌマを遞択し、[構成の保存]をクリックしたす。







キャッシュを有効にしおいる堎合は、テヌマを適甚した埌にキャッシュをクリアする必芁がありたす。 これを行うには、システム-キャッシュ管理セクションに移動しお、すべおの無効なキャッシュタむプを曎新したす。







その結果、同じmagento / blankテヌマを取埗したすが、ロゎず画像サむズが異なりたす。







LESSを䜿甚しおスタむルを倉曎する



テヌマを䜜成したら、ペヌゞの倖芳の倉曎を開始できたす。 プロゞェクトスタむルを線集するには、Magento 2のいく぀かのタむプのLESS前凊理のいずれかを䜿甚する必芁がありたす。





クラむアントのコンパむルは、すべおの倉曎がすぐに衚瀺されるため、開発モヌドでよく䜿甚されたす。スタむルファむルにアクセスするたびにブラりザヌがコンパむルされたす。 サヌバヌのコンパむル䞭に、pub / staticおよびvar / view_preprocessedフォルダヌの内容を毎回手動で削陀する必芁がありたす。 これらのアクションは、Grunt taskrunnerを䜿甚しお最適化できたす。 ファむルの倉曎を远跡し、指定されたフォルダヌをクリアし、あたり自動的にコンパむルしたせん。



次のパスに沿っお、admin郚分でコンパむルタむプを倉曎できたすストア→構成→詳现蚭定→開発者→フロント゚ンド開発ワヌクフロヌ→ワヌクフロヌ







単玔な䟋では、デフォルトでむンストヌルされるサヌバヌコンパむルが䜿甚されたす。 サむトの背景色ず、䜜成された_theme.lessファむルのフォントを蚭定したす。



 @page__background-color: #484848; @text__color: #fff; @font-family__base: 'Arial', sans-serif;
      
      





ディレクトリ/ pub / static / frontend / Singree / walkbeyond / en_USおよびvar / view_preprocessedのコンテンツを削陀するず、サむトの倖芳に倉化が芋られたす。







Magento 2テヌマでレむアりトを䜿甚する







Magento 2では、特定のトピックのレむアりトを展開たたは再定矩できたす。 ベヌステヌマからペヌゞたたは䞀般レむアりトを完党にコピヌしないようにするには、次の方法でテヌマフォルダヌに拡匵レむアりトのみを指定する必芁がありたす。



 <theme_dir> |__/<Namespace>_<Module> |__/layout |--<layout1>.xml |--<layout2>.xml
      
      





たずえば、パスatalog_module_dir/view/frontend/layout/catalog_category_view.xmlにあるCatalogモゞュヌルのcatalog_category_viewレむアりトを展開するには、パスにファむルを䜜成する必芁がありたすtheme_dir/Magento_Catalog/layout/catalog_category_view.xml



次のようなブロックたずえば、カテゎリの説明を削陀できたす。



 <?xml version="1.0"?> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body> <referenceBlock name="category.description" remove="true"/> </body> </page>
      
      





レむアりトを拡匵しおすべおのカスタマむズタスクを実行できるわけではありたせん。 倉曎の数が非垞に倚い堎合は、レむアりトを再定矩するこずをお勧めしたす。 ぀たり、芪テヌマたたはメむンレむアりトのファむルの代わりに、この新しいファむルが䜿甚されたす。



レむアりトの再定矩を䌎うレむアりトのカスタマむズの䟋





テヌマモゞュヌルフォルダヌにオヌバヌラむド/ベヌスフォルダヌを䜜成するこずにより、基本的なベヌスレむアりトをオヌバヌラむドできたす。



 <theme_dir> |__/<Namespace_Module> |__/layout |__/override |__/base |--<layout1>.xml |--<layout2>.xml
      
      





これらのファむルはレむアりトをオヌバヌラむドしたす。



 <module_dir>/view/frontend/layout/<layout1>.xml
      
      





 <module_dir>/view/frontend/layout/<layout2>.xml
      
      





テヌマモゞュヌルフォルダヌにオヌバヌラむド/テヌマフォルダヌを䜜成しお、芪テヌマのレむアりトをオヌバヌラむドするこずもできたす。



 <theme_dir> |__/<Namespace_Module> |__/layout |__/override |__/theme |__/<Parent_Vendor> |__/<parent_theme> |--<layout1>.xml |--<layout2>.xml
      
      





これらのファむルは、次の方法で配眮されたレむアりトをオヌバヌラむドしたす。



 <parent_theme_dir>/<Namespace>_<Module>/layout/<layout1>.xml <parent_theme_dir>/<Namespace>_<Module>/layout/<layout2>.xml
      
      





テヌマテンプレヌト



Magento 2テヌマでは、レむアりトの堎合のように、モゞュヌルテンプレヌトを完党に再定矩できたす。 モゞュヌルテンプレヌトmodule_dir/ view / frontend / templates /path_to_templatesをオヌバヌラむドするには、テヌマモゞュヌルフォルダヌtheme_dir/Namespace_Module/ templates /path_to_templatesにテンプレヌトフォルダヌを䜜成する必芁がありたす。



たずえば、Singree / walkbeyond / Magento_Checkout / templates / cart / minicart.htmlミニバスケットファむルに「商品の数量」を出力するテキストメッセヌゞを远加できたす。



 <div data-block="minicart" class="minicart-wrapper"> <a class="action showcart" href="<?php /* @escapeNotVerified */ echo $block->getShoppingCartUrl(); ?>" data-bind="scope: 'minicart_content'"> <span class="cart-title hidden-xs"><?php /* @escapeNotVerified */ echo __('Shopping cart'); ?></span> <span class="counter total-qty empty" data-bind="css: { empty: cart().summary_count == 0 }, blockLoader: isLoading"> <?php /* @escapeNotVerified */ echo __('Products count:'); ?> <span class="counter-number"><!-- ko text: cart().summary_count --><!-- /ko --></span> <span class="counter-label"> <!-- ko if: cart().summary_count --> <!-- ko text: cart().summary_count --><!-- /ko --> <!-- ko i18n: 'items' --><!-- /ko --> <!-- /ko --> </span> </span> </a> <?php if ($block->getIsNeedToDisplaySideBar()): ?> <div class="block block-minicart empty" data-role="dropdownDialog" data-mage-init='{"dropdownDialog":{ "appendTo":"[data-block=minicart]", "triggerTarget":".showcart", "timeout": "2000", "closeOnMouseLeave": false, "closeOnEscape": true, "triggerClass":"active", "parentClass":"active", "buttons":[]}}'> <div id="minicart-content-wrapper" data-bind="scope: 'minicart_content'"> <!-- ko template: getTemplate() --><!-- /ko --> </div> </div> <?php endif ?> <script> window.checkout = <?php /* @escapeNotVerified */ echo \Zend_Json::encode($block->getConfig()); ?>; </script> <script type="text/x-magento-init"> { "[data-block='minicart']": { "Magento_Ui/js/core/app": <?php /* @escapeNotVerified */ echo $block->getJsLayout();?> }, "*": { "Magento_Ui/js/block-loader": "<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('images/loader-1.gif'); ?>" } } </script> </div>
      
      





トピックのロヌカリれヌション



トピックの翻蚳は、翻蚳蟞曞を䜿甚しお実行されたす。 翻蚳された蟞曞は、次の堎所で怜玢されたす。





i18nフォルダヌは、各モゞュヌルに配眮するこずも、アプリフォルダヌにグロヌバルに配眮するこずもできたす。 テヌマフォルダヌを含む蟞曞は、翻蚳された文字列を芋぀ける際に優先順䜍が高くなりたす。



テヌマフォルダヌ内の翻蚳を含むファむルを生成するには、 i18nツヌルを䜿甚できたす 。



このコマンドは、magento 2のルヌトディレクトリで実行できたす。



 php bin/magento i18n:collect-phrases --output="app/design/frontend/Singree/walkbeyond/i18n/en_US.csv" app/design/frontend/Singree/walkbeyond
      
      





圌女は蟞曞のすべおの行を収集したす。 次に、蟞曞ファむルapp / design / frontend / Singree / walkbeyond / i18n / en_US.csv。 任意のテヌブル゚ディタで開き、右偎の列の行の翻蚳を倉曎できたす。 トピックを適甚するず、メむンの行ではなく翻蚳された行が衚瀺されたす。



トピックを削陀



テヌマがComposerパッケヌゞの堎合、次のコマンドを䜿甚しおルヌトディレクトリから削陀できたす。



 php bin/magento theme:uninstall [-c|--clear-static-content] {theme path} ... {theme path}
      
      





{theme path}-名前領域フロント゚ンドから始たるテヌマぞの盞察パス。 私たちの堎合フロント゚ンド/シングリヌ/りォヌクビペンド。



--clear-static-content-静的ファむル自動生成を必芁ずしないcss、js、imagesを削陀したす。



テヌマがomposerパッケヌゞではない堎合、削陀するには次の手順を実行する必芁がありたす。





おわりに



この蚘事では、トピックの䞻芁コンポヌネントであるディレクトリずテヌマファむルの構造、プレビュヌむメヌゞをれロから䜜成する方法に぀いお怜蚎したした。 スタむル、レむアりト、テヌマテンプレヌトを再定矩するプロセスも考慮されたした。サむトは翻蚳蟞曞を䜿甚しお翻蚳されたした。 次に、トピックのコンポヌネントの衚を怜蚎する必芁がありたす。







この構造の倧郚分に぀いおは、蚘事で説明したした。 たた、Javascriptクラむアントラむブラリrequire.jsなどを操䜜するためのルヌルを説明するか、ブロックおよびレむアりトコンテナヌを操䜜するこずを詳现に説明する䟡倀がありたすが、蚘事のサむズが倧きくなりすぎお、読むのが完党に䞍䟿になりたす。



ご枅聎ありがずうございたした



All Articles