今天我们将讨论如何在magento中使用布局和模板文件创建自己的页面。但是在此之前,我们先讨论一下magento中的布局,布局是一个包含句柄,块和动作的组件。在此文件中,我们定义哪些块将出现在页眉,页脚,左,右和主要内容中。
首先让我们谈谈句柄,在magento中只有两种类型的句柄,它们是默认句柄和更新句柄。大多数布局文件中都有默认句柄,当我们要向网站的每个页面添加内容时,我们都会使用它们,其中更新句柄仅显示在特定的自定义页面,商店和主题上。让我们一次讨论一下-
定制手柄
通过组合以下在config.xml中为前端控制器定义的路由名称,动作控制器名称(即控制器文件的名称)和动作控制器的动作方法(即控制器文件的动作)来创建客户句柄。
让我们看一下magento的“与我们联系”模块,尤其是布局文件夹中的contact.xml,您会注意到contact_index_index句柄,其中contact是路由名称(联系人),可以在frontend \ routers \下的\ Mage \ Contacts \ etc \ config.xml中找到,index是动作控制器名称(索引),它是\ Mage \ Contacts \ controllers \ IndexController.php,最后一个索引是Action Controller动作方法(index),它是控制器文件\ Mage \ Contacts \ controllers \中的方法IndexController.php。
商店句柄
商店句柄,您可以将其放置为仅针对特定商店渲染块,例如,您有三个商店,分别是英语,法语和德语。而且,如果您只想为英语商店渲染块,则可以在布局xml文件中将以下STORE_ <STORE_CODE>添加为句柄,并且它仅对英语商店渲染。
主题句柄
您可以将主题句柄设置为仅针对特定主题渲染块,例如,产品页面有两个主题(theme_1和theme_2),它们仅更改产品页面的配色方案。现在,您只想为theme_1渲染一个额外的块,那么您可以在布局xml文件中添加以下THEME_ <DESIGN_AREA> _ <PACKAGE_NAME> _ <THEME_NAME>作为句柄,并且仅针对特定主题渲染。例如-:THEME_frontend_default_default
这是magento加载布局句柄的顺序-:
- 默认或自定义
- 商店
- 主题
- 自订
有关更多信息,您可以检查loadLayout函数,该函数可以在以下位置找到:\ Mage \ Core \ Controller \ Varien \ Action.php
请注意,可以通过将loadLayout函数中的自定义句柄作为参数传递来替换默认句柄。在loadLayout函数中检查以下行-:
$this->getLayout()->getUpdate()->addHandle($handles ? $handles : 'default');
希望你们现在对布局如何与布局xml文件一起使用有所了解。现在让我们使用逐步实现-从我们的自定义页面开始:
步骤1 –在您的本地文件夹下创建一个新模块,在本例中为\ app \ local \ Scommerce \ Enquiry。
步骤2 –使用以下代码在Scommerce_All.xml或Scommerce_Equiry.xml中的etc \ modules目录中注册模块:
<Scommerce_Sales>
<active>true</active>
<codePool>local</codePool>
</Scommerce_Sales>
步骤3 –使用以下代码在模块\ app \ local \ Scommerce \ Enquiry \ etc \ config.xml的etc目录下创建config.xml
<config>
<modules>
<Scommerce_Enquiry>
<version>0.0.1</version>
</Scommerce_Enquiry>
</modules>
<global>
<blocks>
<enquiry>
<class>Scommerce_Enquiry_Block</class>
</enquiry>
</blocks>
</global>
<frontend>
<routers>
<enquiry>
<use>standard</use>
<args>
<module>Scommerce_Enquiry</module>
<frontName>enquiry</frontName>
</args>
</enquiry>
</routers>
<layout>
<updates>
<enquiry>
<file>enquiry.xml</file>
</enquiry>
</updates>
</layout>
</frontend>
</config>
步骤4 –使用以下代码在app \ code \ local \ Scommerce \ Enquiry \ Block \ Page.php中创建块:
class Scommerce_Enquiry_Block_Page extends Mage_Core_Block_Template
{
protected function _construct()
{
parent::_construct();
$this->setTemplate('enquiry/page.phtml');
}
}
步骤5 –使用以下代码在app \ code \ local \ Scommerce \ Enquiry \ IndexController.php中创建IndexController:
class Scommerce_Enquiry_IndexController
extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$this->loadLayout();
$this->renderLayout();
}
}
在上面的步骤中,请注意两个函数LoadLayout,它们加载布局xml文件,而renderLayout在页面上呈现内容。
步骤6 –现在,使用以下代码在\ app \ design \ frontend \ base \ default \ layout \ enquiry.xml中创建enquiry.xml(这是我们在步骤2中指定的名称)文件:
<layout version="0.1.0">
<default>
<reference name="footer_links">
<action method="addLink"
translate="label title"
module="enquiry">
<label>Enquiry</label>
<url>enquiry</url>
<title>Enquiry</title>
</action>
</reference>
</default>
<enquiry_index_index translate="label">
<label>Enquiry</label>
<reference name="breadcrumbs">
<action method="addCrumb">
<crumbName>Home</crumbName>
<crumbInfo>
<label>Home</label>
<title>Home</title>
<link>/</link>
</crumbInfo>
</action>
<action method="addCrumb">
<crumbName>Enquiry</crumbName>
<crumbInfo>
<label>Enquiry</label>
<title>Enquiry</title>
</crumbInfo>
</action>
</reference>
<reference name="content">
<block type="enquiry/page" name="enquiry"
template="enquiry/page.phtml"/>
</reference>
</enquiry_index_index>
</layout>
请注意,我们这里有两个句柄,默认和自定义句柄(route_controller_action)。您可以将其与我们一开始讨论的内容联系起来。
步骤7 –让我们使用以下代码在\ app \ design \ frontend \ base \ default \ template \ enquiry \ page.phtml中创建我们的主要phtml文件-:
<div>
<h1>Our first own page block, wow!!!!!!!!!</h1>
</div>
就这样,就这么简单。希望本文对您有所帮助。请留下您的评论,让我们知道您的想法?谢谢。