Magento:缩小HTML输出?

时间:2010-12-10 15:30:31

标签: html templates magento minify

magento中是否有文件输出所有html?

我想缩小所有html输出。

5 个答案:

答案 0 :(得分:19)

Magento使用响应对象发送所有输出。

将所有输出添加到此对象,然后调用其sendResponse方法。

如果要更改输出,请为http_response_send_before事件设置侦听器

<!-- in your module's config.xml -->
<http_response_send_before>
    <observers>
        <unique_name>
            <type>singleton</type>
            <class>group/observer</class>
            <method>alterOutput</method>
        </unique_name>
    </observers>
</http_response_send_before>

然后在你的观察者中你可以得到并设置身体

class Packagename_Modulename_Model_Observer
{
    public function alterOutput($observer)
    {
        $response = $observer->getResponse();       
        $html     = $response->getBody();           
        //modify html here          
        $response->setBody($html);
    }
}

如果您感兴趣,可以在以下类的sendResponse方法中调用此事件

app/code/core/Mage/Core/Controller/Response/Http.php

并且输出本身是以

sendResponseoutputBody方法发送的
lib/Zend/Controller/Response/Abstract.php   

答案 1 :(得分:5)

理想情况下,您希望在缓存输出之前执行缩小操作,以避免过于频繁地执行此操作。我能想到的最好的地方是覆盖Mage_Page_Block_Html并将以下函数添加到新类中:

protected function _toHtml()
{
    $html = parent::_toHtml();
    // MINIFY CONTENTS OF $html HERE
    return $html;
}

这样它就可以对整个页面执行一次动作,然后Magento可以通常的方式缓存返回的值。它不是单独在每个块上执行,效率可能较低。

答案 2 :(得分:4)

你总是可以使用ob函数来获取index.php中的输出,然后根据你的需要处理内容。但我怀疑它是否会像启用gzip或deflate一样提升你的网站

答案 3 :(得分:2)

也许来自Google的mod_pagespeed?那会透明地为你做。 + gzip和deflate两种方式。

答案 4 :(得分:0)

也许有人来这里可能会发现这个Magento扩展程序有用:http://www.magentocommerce.com/magento-connect/html-minify-by-jemoon.html