magento中是否有文件输出所有html?
我想缩小所有html输出。
答案 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
并且输出本身是以
的sendResponse
和outputBody
方法发送的
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