使用Magento進行自訂佈局和模板設計
在本系列的第一部分中,我們學習了Magento 模組開發的基礎知識,包括Magento 目錄結構、自訂模組結構,並創建了一個基本的「Hello World」模組,以了解控制器如何在Magento中工作。
在本文中,我們將學習如何建立區塊和佈局檔案。具體來說,我們將了解佈局檔案和區塊檔案在 Magento 中如何運作,並且我們將了解佈局檔案的渲染。
正在尋找快速解決方案?
如果您正在尋找快速解決方案,Envato Market 上有大量 Magento 主題和範本。這是為您的專案快速建立高品質低多邊形專案集合的好方法。
但是,繼續教學吧!首先,我們將了解佈局文件和區塊檔案是什麼以及它們在 Magento 中渲染前端頁面時如何有用,然後我們將了解如何將它們包含在我們的自訂模組中。
什麼是佈局文件?
顧名思義,佈局檔案在渲染 Magento 的首頁時非常有用。佈局文件是 XML 文件,位於應用程式 > 設計 > 前端 > 介面 > 主題 > 佈局 中。 在這裡,您可以看到任何給定模組都有許多佈局檔案。每個Magento 模組都有自己的佈局文件,就像客戶模組有customer.xml
佈局文件一樣, 目錄模組有catalog.xml
# 佈局檔案等。這些佈局檔案包含結構塊和內容塊。
如果您想知道為什麼 Magento 需要這些區塊,您可以在本系列的第一部分中了解更多。
讓我們深入研究佈局文件
讓我們透過一個範例來深入了解佈局文件。前往應用程式 > 設計 > 前端 > 基礎 > 佈局 並開啟 customer.xml
##」檔。在這裡,所有區塊都圍繞著主 我><layout></layout>
標記。您可以看到不同的 <tag> 其中包含特定區塊。 </tag>
<!-- New customer registration --> <customer_account_create translate="label"> <label>Customer Account Registration Form</label> <!-- Mage_Customer --> <remove name="right"/> <remove name="left"/> <reference name="root"> <action method="setTemplate"><template>page/1column.phtml</template></action> </reference> <reference name="content"> <block type="customer/form_register" name="customer_form_register" template="customer/form/register.phtml"> <block type="page/html_wrapper" name="customer.form.register.fields.before" as="form_fields_before" translate="label"> <label>Form Fields Before</label> </block> </block> </reference> </customer_account_create>
句柄是 Magento 在呼叫特定模組時識別要載入的區塊的主要實體。
<customer_account_create>
是模組特定的句柄。當有人開啟客戶註冊頁面時會觸發此句柄。
<default>
句柄。在此階段,您可能會詢問模組特定句柄和預設句柄之間的差異。簡而言之,特定於模組的句柄僅在瀏覽器中呈現該模組時呈現其內部的區塊,而預設句柄會在大部分頁面中載入。
<块>
#句柄內部有不同的區塊,它們指定在呼叫該區塊時要渲染的範本檔案。區塊有兩種類型:
- 構建塊
- 內容區塊
內容區塊 ,然後將它們包裝在結構器區塊中。 例如,如果有人正在呼叫客戶註冊頁面,並且我們希望將其載入到左側、右側、內容或頁腳,我們會將該區塊包裝在其各自的結構區塊中。在這裡,我們在「內容」區塊內包裝了兩個區塊,這是一個結構塊。
區塊包含如下屬性:
- type定義了我們可以在其中定義不同功能的區塊類別
- 名稱定義 特定區塊的唯一名稱,以便其他區塊可以按名稱引用現有區塊並擴展它
- before/after是我們可以設定的屬性,允許我們定義塊在結構塊內的位置
- 模板定義實際的 phtml
檔案名稱以及 HTML 和 PHP 程式碼所在的路徑
- action允許我們使用此屬性觸發任何操作,例如載入 JavaScript 等。
- as是一個屬性,主要用於結構塊
<参考>
<reference># 標籤用於擴展已經存在的區塊。在本例中,我們擴展了內容區塊並將我們自己的區塊插入其中。您必須使用要擴展的正確區塊名稱。
<删除>
<remove>## 標籤用於刪除特定區塊。例如,假設您不想在帳戶註冊頁面上顯示右欄和左欄。在這種情況下,您可以使用以下語法簡單地刪除該區塊:
.<remove name="your block name">
子<块>
#當您將一個塊包裝在另一個塊下時,該包裝塊稱為子塊。每當我們的模組呼叫父塊時,就會自動呼叫子塊。
<block type='core/template' name='parent' template='parent.phtml'> <block type='core/template' name='child' template='child.phtml'/> </block>
echo $this->getChildHtml('child');
根<块>
打开page.xml
布局文件,你会发现<root>
块看起来像下面这样
<block type="page/html" name="root" output="toHtml" template="page/3columns.phtml">
Magento 从根块开始渲染。所有其他块都是根块的子块。根块定义页面的结构。在这里,您可以看到当前它设置为 3columns.phtml
,您可以将其更改为 1column.phtml
、2columns-right.phtml
或2columns-left.phtml.
将 CSS 和 JavaScript 添加到布局 XML
对于任何特定页面,您可以将 CSS 和 JavaScript 文件添加到布局标记中,如下所示:
<customer_account_create> <reference name='head'> <action method="addCss"><stylesheet>css/styles.css</stylesheet></action> <action method="addJs"><script>varien/js.js</script></action> </reference> </customer_account_create>
在这里您可以看到我们在客户帐户页面的 head
中添加了一个 CSS 文件和一个 JavaScript 文件。
什么是块类?
块类用于定义特定于特定块的功能。块类文件位于应用程序>代码>本地/社区/核心>您的模块命名空间>您的模块名称>块目录中。这些文件包含我们可以直接与 $this
块特定模板文件中的关键字。让我们通过一个例子来了解块类。
转到位于 app > design > frontend > base > default > layout 目录中的 review.xml
文件,并找到以下代码行:
<!-- Customer account home dashboard layout --> <customer_account_index> <!-- Mage_Review --> <reference name="customer_account_dashboard"> <block type="review/customer_recent" name="customer_account_dashboard_info1" as="info1" template="review/customer/recent.phtml"/> </reference> </customer_account_index>
在这里您可以看到引用模板 review/customer_recent
的块 review/customer_recent
">最近.phtml。 转到应用 > 设计 > 前端 > 基础 > 默认 > 模板 > 审核 > 客户 并打开 最近的.phtml
。
在此文件中,您可以看到使用 $this
关键字调用两个函数。它们是 $this->getCollection()
和 $this->count()
。 这些函数在其块类文件 recent.php
中定义,该文件位于 应用 > 代码 > 核心 > Mage > 审查 > 阻止 > 客户 目录。
这里,块 type = "review/customer_recent"
指的是在 recent.
文件中定义的 Mage_Review_Block_Customer_Recent
块类。无论您在此类中定义什么函数,都可以直接在相应的模板文件中使用 $this
来使用它。
创建自定义模块布局和块文件
最后,我们留下了带有控制器的自定义“Hello World”模块。在这里,我们创建了自定义模块的布局文件。所以让我们创建它。
要创建布局文件,我们需要首先创建块类文件。在添加类文件之前,我们需要告诉模块我们正在包含块文件。因此,转到 app > code > local > Chiragdodia > Mymodule > etc > config.xml
并添加以下内容代码行:
<frontend> <layout> <updates> <mymodule> <file>mymodule.xml</file> <!-- Our layout file name--> </mymodule> </updates> </layout> </frontend> <global> <blocks> <mymodule> <class>Chiragdodia_Mymodule_Block</class> </mymodule> </blocks> </global>
最终的 XML 文件包含以下代码行:
<?xml version="1.0"?> <config> <modules> <Chiragdodia_Mymodule> <version>0.1.0</version> <!-- Version of module --> </Chiragdodia_Mymodule> </modules> <frontend> <routers> <mymodule> <use>standard</use> <args> <module>Chiragdodia_Mymodule</module> <frontName>mymodule</frontName> </args> </mymodule> </routers> <layout> <updates> <mymodule> <file>mymodule.xml</file> <!-- Our layout file name--> </mymodule> </updates> </layout> </frontend> <global> <blocks> <mymodule> <class>Chiragdodia_Mymodule_Block</class> </mymodule> </blocks> </global> </config>
创建块类文件
接下来,转到 app > code > local > Chiragdodia > Mymodule > Block 并创建文件 Mymodule.php < /b>包含以下代码行
<?php class Chiragdodia_Mymodule_Block_Mymodule extends Mage_Core_Block_Template { public function myfunction() { return "Hello tuts+ world"; } }
这里我们声明了类 Chiragdodia_Mymodule_Block_Mymodule
,其中包含函数 myfunction
,我们可以直接从布局模板文件中调用它。
创建布局 XML 文件
转到app > design > frontend > default > default > layout 并创建 mymodule.xml
文件,其中包含以下代码行
<?xml version="1.0"?> <layout version="0.1.0"> <mymodule_index_index> <reference name="content"> <block type="mymodule/mymodule" name="mymodule" template="mymodule/mymodule.phtml" /> </reference> </mymodule_index_index> </layout>
创建模板文件
转到应用 > 设计 > 前端 > 默认 > 默认 > 模板 并创建 mymodule.phtml
文件。在此文件中,我们将调用我们在块类中声明的函数 myfunction
。
<?php echo $this->myfunction(); ?>
如果到目前为止一切都正确,您将通过访问 URL yoursite.com/index.php/mymodule/index 看到具有三列布局的输出。
在某些 Magento 版本中,默认主题不包含布局和模板目录。在这种情况下,您可以在app > design > frontend > base 目录中创建布局和模板文件。
这就是 Magento 中布局的工作原理。在上一篇文章中,我们创建了简单的“Hello World”模块,在本文中我们使用布局文件创建它。 Magento 的布局结构一开始有点难以理解,但是一旦你开始修改它,你就会很容易地理解它背后的想法。
在這篇文章中,我附上了我們迄今為止創建的模組演示文件。如果您對此特定問題有任何疑問,請隨時發表評論並提出任何問題。
以上是使用Magento進行自訂佈局和模板設計的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP客戶端URL(curl)擴展是開發人員的強大工具,可以與遠程服務器和REST API無縫交互。通過利用Libcurl(備受尊敬的多協議文件傳輸庫),PHP curl促進了有效的執行

文章討論了PHP 5.3中介紹的PHP中的晚期靜態結合(LSB),允許靜態方法的運行時間分辨率調用以更靈活的繼承。 LSB的實用應用和潛在的觸摸

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

使用PHP的cURL庫發送JSON數據在PHP開發中,經常需要與外部API進行交互,其中一種常見的方式是使用cURL庫發送POST�...

深入解讀ReactPHP的非阻塞特性ReactPHP的一段官方介紹引起了不少開發者的疑問:“ReactPHPisnon-blockingbydefault....
