要回答您的问题,基本上我们需要找到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的每个页面中。
block page/html 是你的根块。它是所有其他块的父块。每页应该只有一个根块。您可以在自定义布局文件中使用其名称 root 引用此块,以更改此块内的任何内容。
block 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 在这里通过_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');
}
}
这样核心文件不会受到影响,您仍然可以更改模板路径。