簡體   English   中英

如何在magento中重寫head.phtml

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM