PrestaShop 1.4 introduced a feature called “Minify HTML” to improve performance. In this how to you will find how to add this exciting feature to PrestaShop 1.3!
- Download PrestaShop 1.5.6.3 (the latest version of 1.5 branch).
- Extract
prestashop/tools/minify_html/minify_html.class.php
file from the package. - Copy
minify_html.class.php
file totools/minify_html/
directory (you will have to create this directory). - Create a new file
Media.php
with the following content and put it to theclass
directory:<?php /* * 2007-2013 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Open Software License (OSL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/osl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@prestashop.com so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <contact@prestashop.com> * @copyright 2007-2013 PrestaShop SA * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ class Media extends ObjectModel { public static function minifyHTML($html_content) { if (strlen($html_content) > 0) { //set an alphabetical order for args /*$html_content = preg_replace_callback( '/(<[a-zA-Z0-9]+)((\s*[a-zA-Z0-9]+=[\"\\\'][^\"\\\']*[\"\\\']\s*)*)>/', array('Media', 'minifyHTMLpregCallback'), $html_content, Media::getBackTrackLimit());*/ require_once(_PS_TOOL_DIR_.'minify_html/minify_html.class.php'); $html_content = str_replace(chr(194).chr(160), ' ', $html_content); if (trim($minified_content = Minify_HTML::minify($html_content, array('xhtml' => true))) != '') $html_content = $minified_content; return $html_content; } return false; } public static function minifyHTMLpregCallback($preg_matches) { $args = array(); preg_match_all('/[a-zA-Z0-9]+=[\"\\\'][^\"\\\']*[\"\\\']/is', $preg_matches[2], $args); $args = $args[0]; sort($args); // if there is no args in the balise, we don't write a space (avoid previous : <title >, now : <title>) if (empty($args)) $output = $preg_matches[1].'>'; else $output = $preg_matches[1].' '.implode(' ', $args).'>'; return $output; } public static function getBackTrackLimit() { static $limit = null; if ($limit === null) { $limit = @ini_get('pcre.backtrack_limit'); if (!$limit) $limit = -1; } return $limit; } }
- Open config/smarty.config.inc.php file.
Find:
$smarty->debug_tpl = _PS_ALL_THEMES_DIR_ . 'debug.tpl';
After, add:
function smartyMinifyHTML($tpl_output, &$smarty) { $tpl_output = Media::minifyHTML($tpl_output); return $tpl_output; }
Find:
$smarty->compile_check = false;
Before, add:
$smarty->register_outputfilter('smartyMinifyHTML');
Save and close all files and it’s done!