我想在magento中更改页面标题。
在我的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进行修改,相反,我想在我自己的模块tempate文件中将此head.phtml
替换为另一个head.phtml
。让我们说,改为app/design/frontend/default/customPackage/template/catalog/html/head.phtml
答案 0 :(得分:2)
要回答您的问题,我们基本上需要找到page/html/head.phtml
文件的定义位置。答案是布局文件,更具体地说是page.xml
。位置是:app/design/frontend/<your_package>/<your_theme>/layout/page.xml
。在该文件中,在句柄<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在此块中加载了一些核心javascripts和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通过page/html_head
方法在此设置了_construct()
块的模板。将其更改为您的模板位置
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');
}
}
这样核心文件就不会受到影响,你仍然可以改变模板路径。