【问题标题】:Magento - HTML minify code causing some javascript not workingMagento - HTML 缩小代码导致一些 javascript 无法正常工作
【发布时间】:2011-01-16 12:23:07
【问题描述】:

我有以下代码来删除 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”,其中禁用了工具功能;还有“payment/form/cc.phtml”,其中付款选项的单选按钮。

虽然并非所有内联脚本都被禁用,例如,以“var”开头的任何内容都可以正常工作。

如何改进压缩脚本以防止 javascript 停止工作?

谢谢

【问题讨论】:

    标签: php html magento minify


    【解决方案1】:

    您正在重新发明已经完成的工作。

    首先是minify,它具有用于执行此操作的 PHP 类。 Fooman Speedster 使用 Javascript 和 CSS 的 minify 库,但遗漏了 HTML 部分,可能可以修改此行为。

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 请将 cmets 保留为 cmets,而不是答案。
      • 对不起!这是我的第一篇文章,所以有点混乱。我试过了。不小心按了 Enter 键,尝试编辑。允许的时间必须过期(可能是因为我花了太长时间编辑),因为它无法让我保存。
      【解决方案3】:

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

      例如:

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

      然后只需要删除不必要的空格。比如制表符和两个或更多空格。

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

      另外,请查看Fooman Speedster 扩展。

      【讨论】:

      • 说如果属性和元素之间有双空格,即 么它将变成 /span>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-10
      相关资源
      最近更新 更多