[英]how to rewrite head.phtml in magento
我想在magento中更改頁面標題。 在我的app/design/frontend/default/customPackage/template/page/html/head.phtml
,有app/design/frontend/default/customPackage/template/page/html/head.phtml
行控制所有頁面的標題(我只想修改目錄頁面的標題)
<title>
<?php
if ($current_product = Mage::registry('current_product')) {
echo substr($current_product->getName() . " - " . Mage::helper('core')->currency($current_product->getFinalPrice(), true, false),0,69);
} else {
echo substr(str_replace("- Products","",$this->getTitle()),0,100);
}
?></title>
但我不想直接從app/design/frontend/default/customPackage/template/page/html
head.phtml進行修改,而是要在自己的模塊head.phtml
中用另一個head.phtml
替換此head.phtml
假設您將其設置為app/design/frontend/default/customPackage/template/catalog/html/head.phtml
要回答您的問題,基本上我們需要找到在哪里定義了page/html/head.phtml
文件。 答案在布局文件中,更具體地說在page.xml
。 位置是: app/design/frontend/<your_package>/<your_theme>/layout/page.xml
。 在該文件內的<default>
句柄<default>
,您可以看到
<default translate="label" module="page">
<label>All Pages</label>
<block type="page/html" name="root" output="toHtml" template="page/3columns.phtml">
<block type="page/html_head" name="head" as="head">
<action method="addJs"><script>prototype/prototype.js</script></action>
<action method="addJs"><script>lib/ccard.js</script></action>
<action method="addJs"><script>prototype/validation.js</script></action>
<action method="addJs"><script>scriptaculous/builder.js</script></action>
-------
</block>
---------
</block>
</default>
哪里
<default>
被稱為布局處理程序。 此處理程序下的塊將顯示在magento的每個頁面中。
阻止page/html
是您的根目錄。 它是所有其他塊的父塊。 每頁只能有一個根塊。 您可以在自定義布局文件中使用其名稱root
引用此塊,以更改此塊內的任何內容。
塊page/html_head
是您的問題中引用的塊。 此塊用於保存頁面的<head />
部分(以html樹表示)。 您可以看到magento在此塊中加載了其一些核心javascript和CSS。
但是,正如您已經看到的, page/html_head
沒有設置任何模板。 那么page/html/head.phtml
是如何出現的? 它應該設置在magento中的某個位置。 因此,讓我們進入該塊的后端,在該塊的所有塊方法都已定義。 文件位置是app/code/core/Mage/Page/Block/Html/Head.php
。 是的,我們發現了。
class Mage_Page_Block_Html_Head extends Mage_Core_Block_Template
{
/**
* Initialize template
*
*/
protected function _construct()
{
$this->setTemplate('page/html/head.phtml');
}
------
}
因此,Magento通過_construct()
方法在此處為page/html_head
塊設置了模板。 將其更改為您的模板位置
protected function _construct()
{
$this->setTemplate('app/design/frontend/default/customPackage/template/catalog/html/head.phtml');
}
現在它將page/html_head
塊的位置設置為您的自定義模板文件。
如果要阻止文件也保持不變,則可以使用自己的模塊重寫該阻止文件。 在您的config.xml文件中,您應該使用此
<config>
<global>
<blocks>
<page>
<rewrite>
<html_head>Namespace_Modulename_Block_Html_Head</html_head>
</rewrite>
</page>
</blocks>
</global>
</config>
並且您應該在app/code/local/Namespace/Moduleame/Block/Html/Head.php
定義一個阻止文件
<?php
class Namespace_Modulename_Block_Html_Head extends Mage_Page_Block_Html_Head
{
protected function _construct()
{
$this->setTemplate('app/design/frontend/default/customPackage/template/catalog/html/head.phtml');
}
}
這樣,核心文件將保持不變,您仍然可以更改模板路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.