Fiz um código super simples, para deixar qualquer HTML em uma única linha, sem tabs, espaços, .
Sobre o CSS Eu já escrevi o post Eu vs cache. Ganhei a batalha. Vou usar o projeto do Trabalhando com URL amigável no PHP para edita-lo e compactar o HTML dele.
Um dos segredos deste projeto é que todas as requisições passam pelo index.php graças ao direcionamento do .htaccess.
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php [L]
Então, neste index.php devo adicionar o chamado da função ob_start() antes de qualquer saída HTML. No meu caso vou adiciona-lo na linha 2, após o <?php .
<?php ob_start(); require "classes/Url.class.php"; ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br"> <head> .....
O que o ob_start() faz?
Esta função irá ativar o buffer de saída. Enquanto o buffer de saída estiver ativo, não é enviada a saída do script (outros que não sejam cabeçalhos), ao invés a saída é guardada em um buffer interno.
O conteúdo deste buffer interno pode ser copiado em uma variável usando ob_get_contents(). Para enviar o que esta no buffer interno, use ob_end_flush(). Alternativamente, ob_end_clean() irá silenciosamente descartar o conteúdo do buffer.
Então esta função manda guardar tudo que é HTML que deveria ser enviado para o browser para poder ser tratado depois. Então agora com este HTML guardado podemos analisar, editar e fazer o que for preciso. Então na última linha do nosso index vou adicionar as seguintes linhas:
$html = ob_get_clean (); echo preg_replace('/\s+/', ' ', $html);
A função ob_get_clean obtém o conteúdo do buffer e exclui o buffer de saída atual e neste buffer esta todo o HTML que foi gerado pelo site/sistema/blog.
A segunda linha faz um replace de tudo que for espaço, quebra de linha (\n e \r) e tabulação (\t)por um espaço. Então as centenas de espaços que existe para indentar seu código serão removidos por um único espaço.
E, por fim nosso index.php fica assim:
<?php ob_start(); require "classes/Url.php"; ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Trabalhando com URL amigável no PHP</title> <meta name="author" content="Layout: Mauricio Samy Silva / Código: Eduardo Kraus" /> <link rel="stylesheet" type="text/css" href="<?php echo URL::getBase() ?>css/style.css"/> </head> <body> <div id="tudo"> <div id="topo">TOPO</div> <div id="principal"> <?php $modulo = Url::getURL( 0 ); if( $modulo == null ) $modulo = "modulo1"; if( file_exists( "modulos/" . $modulo . ".php" ) ) require "modulos/" . $modulo . ".php"; else require "modulos/404.php"; ?> </div> <div id="navegacao"> <p><a href="<?php echo URL::getBase(); ?>modulo1">Módulo 1</a></p> <p><a href="<?php echo URL::getBase(); ?>modulo2">Módulo 2</a></p> <p><a href="<?php echo URL::getBase(); ?>modulo3">Módulo 3</a></p> <p><a href="<?php echo URL::getBase(); ?>modulo4">Módulo 4</a></p> <p><a href="<?php echo URL::getBase(); ?>modulo5">Módulo 5</a></p> <p><a href="<?php echo URL::getBase(); ?>modulo6">Módulo 6</a></p> <p><a href="<?php echo URL::getBase(); ?>modulo7">Módulo 7</a></p> <p><a href="<?php echo URL::getBase(); ?>modulo8/parametro/sei-la/alguma_coisa/25/quase-nada"> Módulo 8 com sub-módulo</a></p> <p><a href="<?php echo URL::getBase(); ?>qualquer">Módulo 404</a></p> <p><a href="<?php echo URL::getBase(); ?>teste.php">Teste.php</a></p> </div> <div id="rodape">RODAPE</div> </div> </body> </html> <?php $html = ob_get_clean (); echo preg_replace('/\s+/', ' ', $html);
Veja o exemplo rodando completo em /code/10045/ e não se esqueça de olhar o código fonte dele.
Quer o código fonte completo deste exemplo? Clique aqui.
Se você usa Wordpress, edite o arquivo index.php da raiz do Wordpress e faça assim:
<?php ob_start(); /** * Front to the WordPress application. This file doesn't do anything, but loads * wp-blog-header.php which does and tells WordPress to load the theme. * * @package WordPress */ /** * Tells WordPress to load the WordPress theme and output it. * * @var bool */ define('WP_USE_THEMES', true); /** Loads the WordPress Environment and Template */ require('./wp-blog-header.php'); $html = ob_get_clean (); echo preg_replace('/\s+/', ' ', $html);
Veja rodando: view-source:http://www.marcelaroesner.com.br/category/blog