【问题标题】:how to rewrite head.phtml in magento如何在magento中重写head.phtml
【发布时间】:2014-06-23 19:18:41
【问题描述】:

我想在 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 进行修改,而是我想在我自己的模块模板文件中将这个head.phtml 替换为另一个head.phtml。比如说,让它成为@987654326改为@

【问题讨论】:

    标签: php magento templates


    【解决方案1】:

    要回答您的问题,基本上我们需要找到page/html/head.phtml 文件的定义位置。答案在布局文件中,更具体地说在 page.xml 中。位置是:app/design/frontend/&lt;your_package&gt;/&lt;your_theme&gt;/layout/page.xml。在该文件中,在句柄 &lt;default&gt; 下,您可以看到

    <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>
    

    在哪里

    • &lt;default&gt; 被称为布局处理程序。属于此的块 处理程序将显示在magento的每个页面中。

    • block page/html 是你的根块。它是所有其他块的父块。每页应该只有一个根块。您可以在自定义布局文件中使用其名称 root 引用此块,以更改此块内的任何内容。

    • block page/html_head 是您的问题中引用的块。此块用于保存页面的 &lt;head /&gt; 部分(以 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');
         }
    }
    

    这样核心文件不会受到影响,您仍然可以更改模板路径。

    【讨论】:

    • 使用答案底部的&lt;rewrite&gt; 方法是最好的解决方案。谢谢!
    猜你喜欢
    • 2011-04-22
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 2014-02-24
    • 2017-05-10
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多