Magento - HTML缩小代码导致一些javascript无法正常工作

时间:2011-01-16 12:23:08

标签: php html magento minify

我有以下代码来删除Magento网站中的空白区域。

ob_start("htmlcompress");

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

它运行良好,但在某些使用内联javascripts的区域中,脚本停止工作。例如,在“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 个答案:

答案 0 :(得分:2)

你正在重塑已经完成的工作。

首先有minify,其中包含用于执行此操作的PHP类。 Fooman Speedster将minify库用于Javascript和CSS,但是错过了HTML部分,可能会修改此行为。

然后有mod_pagespeed内置它,编译所以运行速度比PHP快,适用于整个服务器,因此来自其他脚本/源的页面会受到影响。特别是你应该感兴趣的是whitespace collapse

答案 1 :(得分:0)

谢谢!您的代码删除了所有空格,因此也破坏了样式。 我知道Fooman Speedster,不幸的是它不适用于许多客户的共享服务器。

@clockworkgeek,我也知道你发布的脚本,类似于Fooman Speedster,它们不适用于所有共享服务器,虽然有些工作但结果不可靠,因为它会影响某些页面,我猜是类似于我发布的minify脚本,导致javascript和空白问题。在其他情况下,它会导致内存损坏。

我的主机正在努力获取共享服务器的mod_pagespeed。

答案 2 :(得分:-1)

问题是不是代码感知正则表达式。您可以将缩小过程分为两部分。划分空格和条纹换行符。

例如:

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

然后只需要删除不必要的空格。像标签和两个或多个空格。

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

另外,请检查Fooman Speedster扩展程序。