Magento - HTML минимизировать код, вызывая неработающий JavaScript - PullRequest
1 голос
/ 16 января 2011

У меня есть следующий код для удаления пробелов на сайте Magento.

ob_start("htmlcompress");

function htmlcompress($buffer) {
   $buffer = preg_replace('/\n\r|\r\n|\n|\r|\t| {2}/', '', $buffer);
   return $buffer; 
}

Работает хорошо, однако в некоторых областях, где используются встроенные javascript-скрипты, скрипты перестали работать.Например, в «checkout / onepage / billing.phtml»:

<script type="text/javascript">
//<![CDATA[  
$('billing:region_id').setAttribute('defaultValue', "<?php
  echo $this->getAddress()->getRegionId()
?>");
//]]>
</script>

и «giftmessage / inline.phtml», где отключена функция toogle;также «payment / form / cc.phtml», где переключатель для вариантов оплаты.

Не все встроенные сценарии были отключены, хотя, например, все, что начинается с «var», работает.

Как я могу улучшить сценарий сжатия, чтобы предотвратить прекращение работы JavaScript?

Спасибо

Ответы [ 3 ]

2 голосов
/ 16 января 2011

Вы заново изобретаете работу, которая уже была сделана.

Сначала есть minify , в котором есть классы PHP для выполнения именно этой операции.Fooman Speedster использует библиотеку minify для Javascript и CSS, но пропускает части HTML, возможно, можно изменить это поведение.

Затем есть mod_pagespeed , в котором он встроен, скомпилированоон работает быстрее, чем PHP, и работает для всего сервера, поэтому страдают страницы из других скриптов / источников.В частности, вы должны быть заинтересованы в его разрушении пробелов .

0 голосов
/ 17 января 2011

Спасибо!Ваш код удаляет ВСЕ пробелы, тем самым нарушая стили.Я знаю о Fooman Speedster, к сожалению, он не работает на общих серверах многих клиентов.

@ clockworkgeek, я знаю о сценариях, которые вы выложили, подобно Fooman Speedster, они не работаютработать на всех общих серверах, и хотя некоторые работают, но результат ненадежен, поскольку влияет на некоторые страницы, что, я думаю, похоже на сценарий minify, который я разместил, что вызывает проблемы с javascript и пробелами.В другом случае это вызывает повреждение памяти.

Однако мой хост работает над получением mod_pagespeed для общих серверов.

0 голосов
/ 16 января 2011

Проблема в том, что регулярное выражение не учитывает код. Вы можете разделить процесс минимизации на две части. Чередование полос и разрывы чередующихся линий.

Например:

$buffer = preg_replace('/^(?!\/{2})(.*)[\n\r|\r\n|\n|\r]/m', '$1', $buffer);

Тогда просто нужно убрать лишние пробелы. Как вкладки и два или более пробелов.

$buffer = preg_replace('/[\t| {2}]/', '', $buffer);

Также проверьте расширение Fooman Speedster .

...