/view/frontend/page_layout/2columns-left.xml
<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_layout.xsd"> <update handle="1column"/> <referenceContainer name="columns"> <container name="div.sidebar.main" htmlTag="div" htmlClass="sidebar sidebar-main" after="main"> <container name="sidebar.main" as="sidebar_main" label="Sidebar Main"/> </container> <container name="div.sidebar.additional" htmlTag="div" htmlClass="sidebar sidebar-additional" after="div.sidebar.main"> <container name="sidebar.additional" as="sidebar_additional" label="Sidebar Additional"/> </container> </referenceContainer> </layout>
兩個版本的Magento之間最大的區別之一是整個項目的結構方式。與Magento 1.x中定義模板和定義app/design/frontend/<package>/<your_theme>
主題資源不同skin/frontend/<package>/<your_theme>
,在Magento 2中,所有內容都合並到一個基本文件夾位置。在這種情況下,主題資源不再有單獨的皮膚文件夾。您的所有模板和資產現在都存儲在:(app/design/frontend/<package>/<your_theme>
換句話說,模板的舊位置)。
您很快就會發現,與存儲所有模板的Magento 1.x不同app/ design/frontend/<package>/<theme>/template
,有許多文件夾,如下面的屏幕截圖所示。
這些文件夾中的每一個都代表Magento 2中的模塊,其中模板或資產在此主題中被覆蓋。可以在app/code/Magento
看到每個模塊的默認版本的位置,看看典型模塊的結構。
以下是自定義主題中的結帳模塊示例。正如您所看到的,它包含一個用於布局更新的文件夾(稍后會詳細介紹),一個用於模板,另一個用於替換舊skin/frontend/<package>/<theme>
文件夾的“web”文件夾。但是,不是在此文件夾中包含所有站點范圍的資源和JS,現在按模塊組織此類項目 - 在本例中為Magento Checkout模塊。
那些有敏銳眼光的人也可能已經注意到該模塊的web文件夾中有一個模板文件夾。這是Magento 2模塊(包括Checkout)的獨特之處, 其中Magento 2使用 KnockoutJS 進行模板化。我們將在后面的教程中更詳細地介紹 KnockoutJS 。這些模板使用.html文件和內部邏輯(即不涉及PHP)。
如前所述,如果要覆蓋/修改核心模塊的模板和JS,則需要在主題中創建一個與您希望覆蓋/擴展的文件的路徑匹配的等效模塊文件夾。 。
再舉一個例子,您將看到Magento 2核心使用的所有默認模塊。例如,如果要覆蓋目錄模塊中的某些內容,則需要在主題中創建一個名為Magento_Catalog的文件夾。這引用了<package_name>,在本例中是app / code / Magento的“Magento”部分,即app / code / <package>,然后下划線之后的部分引用了模塊名稱。在這種情況下,這是目錄:app / code / <package> / <module>
換句話說,要覆蓋模塊的內容 app/code/<package>/< module>
app/code/<package>/<module>
,您需要創建一個<package>_<module>
在主題中命名的文件夾 。
另請注意,您只能覆蓋 view/frontend
主題中模塊部分的內容(因此,app/code/Magento/Catalog/view/frontend
映射到 app/design/frontend/<your_package>/<your_theme>/Magento_Catalog
)。如果您需要覆蓋控制器和塊,則 可以在不同的位置完成,通常由后端開發人員完成,本指南未對此進行介紹。
更多:
- View: Layouts, Block and Templates
- Get a block from template file `.phtml`
- Show cms static block from template phtml file
- Use Plugin, Preference to rewrite Block, Model, Controller, Helper
- Magento 2 Block Template Ultimate Guides
- --