Magento: минимизировать вывод HTML? - PullRequest
9 голосов
/ 10 декабря 2010

Есть ли в magento какой-нибудь файл, в который будут выводиться все html?

Я хочу минимизировать весь вывод html.

Ответы [ 5 ]

19 голосов
/ 10 декабря 2010

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   
5 голосов
/ 10 декабря 2010

В идеале вы хотите выполнить минимизацию перед кэшированием вывода, чтобы не делать это слишком часто. Лучшее место, которое я могу придумать, это переопределить Mage_Page_Block_Html и добавить следующую функцию в ваш новый класс:

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

Таким образом, он выполняет действие один раз для всей страницы, затем возвращаемое значение может быть кэшировано Magento в обычном порядке. Он не работает на каждом блоке в отдельности, что может быть менее эффективным.

4 голосов
/ 10 декабря 2010

вы всегда можете использовать функции ob, чтобы получить выходные данные в index.php, а затем делать с содержимым все, что вам нужно.но я сомневаюсь, что это увеличит ваш сайт так же, как включение gzip или deflate

2 голосов
/ 10 декабря 2010

Может быть mod_pagespeed от Google? Это сделало бы это прозрачно для вас. +1 за gzip и сдуть в любом случае.

0 голосов
/ 05 января 2015

Может быть, кто-то придет сюда, может оказаться полезным это расширение Magento: http://www.magentocommerce.com/magento-connect/html-minify-by-jemoon.html

...