Magento を使用したカスタム レイアウトとテンプレートのデザイン

王林
リリース: 2023-09-01 11:58:01
オリジナル
1396 人が閲覧しました

このシリーズの最初の部分では、Magento ディレクトリ構造、カスタム モジュール構造など、Magento モジュール開発の基本を学び、Magento でコントローラーがどのように動作するかを理解するために基本的な「Hello World」モジュールを作成しました。

この記事では、ブロック ファイルとレイアウト ファイルを作成する方法を学びます。具体的には、レイアウト ファイルとブロック ファイルが Magento でどのように機能するかを確認し、レイアウト ファイルのレンダリングについて学びます。

迅速な解決策をお探しですか?

素早い解決策をお探しの場合は、Envato Market に Magento テーマとテンプレートがたくさんあります。これは、プロジェクト用の高品質のローポリ アイテムのコレクションを迅速に構築するための優れた方法です。

Magento を使用したカスタム レイアウトとテンプレートのデザイン

しかし、チュートリアルを続けてみましょう。まず、レイアウト ファイルとブロック ファイルとは何なのか、Magento でフロントエンド ページをレンダリングするときにそれらがどのように役立つのかを理解してから、それらをカスタム モジュールに含める方法を見ていきます。

レイアウト ファイルとは何ですか?

名前が示すように、レイアウト ファイルは Magento のホームページをレンダリングするときに非常に役立ちます。レイアウト ファイルは、[アプリ] > [デザイン] > [フロント エンド] > [インターフェイス] > [テーマ] > [レイアウト ] にある XML ファイルです。 ここでは、特定のモジュールに対して多数のレイアウト ファイルがあることがわかります。顧客モジュールに customer.xml レイアウト ファイル, ## があるのと同じように、各 Magento モジュールには独自のレイアウト ファイルがあります。 #カタログ モジュールには、catalog.xml レイアウト ファイルなどが含まれます。これらのレイアウト ファイルには、構造ブロックとコンテンツ ブロックが含まれています。

Magento にこれらのブロックが必要な理由が気になる場合は、このシリーズの最初の部分で詳しく学ぶことができます。

レイアウト ファイルについて詳しく見ていきましょう

例を通してレイアウト ファイルを詳しく見てみましょう。 [アプリ] > [デザイン] > [フロント エンド] > [基本] > [レイアウト]

に移動し、customer.xml ファイルを開きます。ここでは、すべてのブロックがメインの 我><layout></layout> タグの中心に配置されています。特定のブロックを含むさまざまな <tag> が表示されます。 </tag>

次のコード スニペットを参照してください:

リーリー ###ハンドル###

ハンドルは、特定のモジュールを呼び出すときにロードされるブロックを識別するために Magento によって使用される主要なエンティティです。

<customer_account_create> はモジュール固有のハンドルです。このハンドラーは、誰かが顧客登録ページを開いたときに起動されます。 </customer_account_create> ネストされた各ブロックは、ページ固有のコンテンツを処理します。一部のレイアウト ファイルには、

<default> ハンドルが含まれています。この段階では、モジュール固有のハンドルとデフォルトのハンドルの違いについて疑問に思うかもしれません。つまり、モジュール固有のハンドルは、モジュールがブラウザでレンダリングされるときに内部のブロックのみをレンダリングしますが、デフォルトのハンドルはほとんどのページでロードされます。 </default>

ハンドル内には、ブロックが呼び出されたときにレンダリングされるテンプレート ファイルを指定するさまざまなブロックがあります。ブロックには 2 つのタイプがあります:

###ビルディングブロック###

コンテンツブロック

  1. レイアウト ファイルでは、
  2. コンテンツ ブロック
を定義するだけで、それを

構造ブロック でラップします。 たとえば、誰かが顧客登録ページを呼び出していて、そのページを左側、右側、コンテンツ、またはフッターにロードしたい場合、そのブロックをそれぞれの構造ブロックでラップします。ここでは、構造ブロックである「コンテンツ」ブロック内に 2 つのブロックをラップしています。 このブロックには次の属性が含まれます:

type

は、さまざまな関数を定義できるブロック クラスを定義します

  1. 名前定義
  2. 他のブロックが既存のブロックを名前で参照して拡張できるようにする、特定のブロックの一意の名前
  3. before/after は設定できるプロパティで、構造ブロック内のブロックの位置を定義できます
  4. テンプレート実際のphtml
  5. ファイル名と、HTMLおよびPHPコードが存在するパスを定義します
  6. actionこの属性を使用して、JavaScript の読み込みなどのアクションをトリガーできるようにします。
  7. as は属性であり、主に構造ブロックに使用されます

タグは、既存のブロックを拡張するために使用されます。この例では、コンテンツ ブロックを拡張し、そこに独自のブロックを挿入します。展開するには正しいブロック名を使用する必要があります。

<reference></reference>

タグは、特定のブロックを削除するために使用されます。たとえば、アカウント登録ページの右列と左列を表示したくないとします。この場合、次の構文を使用してブロックを削除するだけです:

.<remove> ######息子######### </remove>ブロックを別のブロックの下にラップすると、ラップされたブロックはサブブロックと呼ばれます。モジュールが親ブロックを呼び出すたびに、子ブロックが自動的に呼び出されます。 リーリー <remove name="your block name">テンプレート ファイルで次の構文を使用して、子ブロックを個別に呼び出すこともできます。 </remove>echo $this->getChildHtml('child');

打开page.xml 布局文件,你会发现<root></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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート