目錄
正在尋找快速解決方案?
什麼是佈局文件?
讓我們深入研究佈局文件
<块>
根<块>
将 CSS 和 JavaScript 添加到布局 XML
什么是块类?
创建自定义模块布局和块文件
创建布局 XML 文件
创建模板文件
首頁 後端開發 php教程 使用Magento進行自訂佈局和模板設計

使用Magento進行自訂佈局和模板設計

Sep 01, 2023 am 11:57 AM
模板設計 自訂佈局 magento

在本系列的第一部分中,我們學習了Magento 模組開發的基礎知識,包括Magento 目錄結構、自訂模組結構,並創建了一個基本的「Hello World」模組,以了解控制器如何在Magento中工作。

在本文中,我們將學習如何建立區塊和佈局檔案。具體來說,我們將了解佈局檔案和區塊檔案在 Magento 中如何運作,並且我們將了解佈局檔案的渲染。

正在尋找快速解決方案?

如果您正在尋找快速解決方案,Envato Market 上有大量 Magento 主題和範本。這是為您的專案快速建立高品質低多邊形專案集合的好方法。

使用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>  句柄。在此階段,您可能會詢問模組特定句柄和預設句柄之間的差異。簡而言之,特定於模組的句柄僅在瀏覽器中呈現該模組時呈現其內部的區塊,而預設句柄會在大部分頁面中載入。

<块>

#句柄內部有不同的區塊,它們指定在呼叫該區塊時要渲染的範本檔案。區塊有兩種類型:

    構建塊
  1. 內容區塊
在版面配置檔案中,我們只定義

內容區塊 ,然後將它們包裝在結構器區塊中。 例如,如果有人正在呼叫客戶註冊頁面,並且我們希望將其載入到左側、右側、內容或頁腳,我們會將該區塊包裝在其各自的結構區塊中。在這裡,我們在「內容」區塊內包裝了兩個區塊,這是一個結構塊。

區塊包含如下屬性:

  1. type定義了我們可以在其中定義不同功能的區塊類別
  2. 名稱定義 特定區塊的唯一名稱,以便其他區塊可以按名稱引用現有區塊並擴展它
  3. before/after是我們可以設定的屬性,允許我們定義塊在結構塊內的位置
  4. 模板定義實際的 phtml 檔案名稱以及 HTML 和 PHP 程式碼所在的路徑
  5. action允許我們使用此屬性觸發任何操作,例如載入 JavaScript 等。
  6. 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.phtml2columns-right.phtml2columns-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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

php中的捲曲:如何在REST API中使用PHP捲曲擴展 php中的捲曲:如何在REST API中使用PHP捲曲擴展 Mar 14, 2025 am 11:42 AM

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

解釋PHP中晚期靜態結合的概念。 解釋PHP中晚期靜態結合的概念。 Mar 21, 2025 pm 01:33 PM

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

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

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

框架安全功能:防止漏洞。 框架安全功能:防止漏洞。 Mar 28, 2025 pm 05:11 PM

文章討論了框架中的基本安全功能,以防止漏洞,包括輸入驗證,身份驗證和常規更新。

如何用PHP的cURL庫發送包含JSON數據的POST請求? 如何用PHP的cURL庫發送包含JSON數據的POST請求? Apr 01, 2025 pm 03:12 PM

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

自定義/擴展框架:如何添加自定義功能。 自定義/擴展框架:如何添加自定義功能。 Mar 28, 2025 pm 05:12 PM

本文討論了將自定義功能添加到框架上,專注於理解體系結構,識別擴展點以及集成和調試的最佳實踐。

ReactPHP的非阻塞特性究竟是什麼?如何處理其阻塞I/O操作? ReactPHP的非阻塞特性究竟是什麼?如何處理其阻塞I/O操作? Apr 01, 2025 pm 03:09 PM

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

See all articles