Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola Pessoal, vou disponibilizar para voce um sisteminha que eu fiz, para agilizar o processo na criação de paginas, usando meu sistema voce não precisara mais se preoculpar em fazer todo html, e por outro lado para quem gosta de Codigos validos no W3C esse sistema ja gera o codigo XHTML 1.1 valido no W3C, claro que se seu conteudo nao for valido o codigo nao sera valido mas se voce seguir os padroes nao precisa se precoupar mais com as paginas html, inclusão de javascript ou css, essa tarefa ficara bem mais simples
vou explicar como funciona para criar gerar uma pagina basta fazer isso:
<?php
include "init.php";
include "libs/master_page.php";
$html = new html();
$html->title("Titulo do Site");
$html->show();
?>
<h1>Ola Mundo</h1>
codigo fonte gerado:
<!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>
<title>Titulo do Site</title>
<meta name="language" content="pt-br" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<meta http-equiv="pragma" content="no-cache" />
<meta name="MSSmartTagsPreventParsing" content="true" />
<meta http-equiv="imagetoolbar" content="no" />
<meta name="author" content="Fabyo" />
<style type="text/css" media="screen">
@import url("css/default.css");
</style>
<script src="js/default.js" type="text/javascript"></script>
</head>
<body>
<h3>OLA MUNDO</h3>
</body>
</html>
reparem que ele pegou seu conteudo abaixo do codigo php e colocou dentro das tags
viram como é simples?
só fazer isso para qualquer pagina
<?php
include "init.php";
include "libs/master_page.php";
$html = new html();
$html->title("Titulo do Site");
$html->show();
?>
seu conteudo do site
ah e sobre o javascript e css como que faz se numa pagina voce precisa usar um javascript?
simples o sistema trabalha da seguinte maneira, primeiro vamos falar o css e js padrao do site
se voce quer usar um css e js padrao para o site todo ou quase todo, basta nao fazer nada por padrao
o sistema incluira um default.js e um default.css, ah mas se voce nao quer que ele crie ?, simples:
$html->default_css(false);
$html->default_js(false);
basta incluir esse parametros para css ou js
exemplo:
nesse exemplo a pagina gerada nao incluira os arquivos js e css defaults
<?php
include "init.php";
include "libs/master_page.php";
$html = new html();
$html->title("Titulo do Site");
$html->default_css(false);
$html->default_js(false);
$html->show();
?>
ate aqui tudo bem?, beleza agora a segunda parte, se voce precisa usar um css ou js numa determinada pagina?
outra coisa simples, quando a pagina é gerada o sistema automaticamente procura por um arquivo com o mesmo nome nas pasta css e js, exemplo se voce precisa de um javascript na pagina4.php basta criar o javascript "pagina4.js", dai o sistema se encarrega de inclui-lo quando voce tiver na pagina4.php
com o css é mesma coisa, se nao quer mais usar o javascript da pagina4 basta apaga-lo
bom agora vou postar os scripts:
init.php, esse arquivo cuida das principais validações do sistema voce pode usa-lo em todos seus projetos de PHP é muito util.
init.php
<?php
session_start();
//para testes em desenvolvimento deixe o display_errors on, mas depois no site pode deixar 0 (off)
@ini_set('display_errors', '1');
//mostra todos os erros que tiver no script
error_reporting(E_ALL);
//http://br2.php.net/set_magic_quotes_runtime
@set_magic_quotes_runtime(FALSE);
define('BARRA', DIRECTORY_SEPARATOR);
define('SEP', PATH_SEPARATOR);
define('ROOT', getcwd() . BARRA);
//verifica se a função existe
if (function_exists('ini_set')) {
@ini_set('include_path', ini_get('include_path') . SEP . ROOT);
define('APP_PATH', null);
} else {
define('APP_PATH', ROOT );
}
//verifica se o register_globals ta em on se tiver essa função abaixo desfaz o efeito do register_globals
if (ini_get('register_globals')) {
foreach($GLOBALS as $s_variable_name => $m_variable_value) {
if (!in_array($s_variable_name, array('GLOBALS', 'argv', 'argc', '_FILES', '_COOKIE', '_POST', '_GET', '_SERVER', '_ENV', '_SESSION', 's_variable_name', 'm_variable_value')))
{
unset($GLOBALS[$s_variable_name]);
}
}
unset($GLOBALS['s_variable_name']);
unset($GLOBALS['m_variable_value']);
}
//verifica se magic_quote ta ativado, se tiver ativado o php escapa as aspas e apostrofos
//http://br2.php.net/manual/pt_BR/function.get-magic-quotes-gpc.php
if (get_magic_quotes_gpc()) {
$_SERVER = stripslashes_array($_SERVER);
$_GET = stripslashes_array($_GET);
$_POST = stripslashes_array($_POST);
$_COOKIE = stripslashes_array($_COOKIE);
$_FILES = stripslashes_array($_FILES);
$_ENV = stripslashes_array($_ENV);
$_REQUEST = isset($_REQUEST) ? stripslashes_array($_REQUEST) : "";
if (isset($_SESSION)) {
$_SESSION = stripslashes_array($_SESSION, '');
}
}
function stripslashes_array($data) {
if (is_array($data)){
foreach ($data as $key => $value){
$data[$key] = stripslashes_array($value);
}
return $data;
}else{
//http://br2.php.net/manual/pt_BR/function.stripslashes.php
//http://br2.php.net/manual/pt_BR/function.addslashes.php
return stripslashes($data);
}
}
/*pego todas variaveis vindas do formulario e ja crio as variaveis com mesmo nome
mesma coisa que import_request_variables
http://br2.php.net/manual/pt_BR/function.import-request-variables.php
tava vendo o codigo fonte da função import_request e ela usa foreach, entao tem gente que nao gosta de usar foreach mas prefere a import_request, dai fica a gosto sendo que fazem o mesmo efeito e ainda continua com segurança no sistema*/
if(isset($_POST)) {
foreach ($_POST as $campo => $valor) { $$campo = $valor; }
}
//mesma coisa da explicação acima mas para pegar campos get, porque nao usei $_REQUEST ?
alguns servidores em save mode nao existe $_REQUEST*/
if(isset($_GET)) {
foreach ($_GET as $campo => $valor) { $$campo = $valor; }
}
//criei uma função para incluir arquivo, e ela ja testa se existe
function IncluiArquivo($arquivo)
{
if(file_exists($arquivo)) {
require $arquivo;
} else {
echo "Arquivo $arquivo nao encontrado";
//exit;
}
}
//verifico se a extensao do mysql esta habilitada
if( !extension_loaded("mysql") ) {
echo "Mysql.dll não instalada";
exit;
}
?>
basta olharem o exemplo que esta em anexo e usar
qualquer duvida só postarem
Show fabyo.. otimo script.... pena que é muito simples ^^ mais já é um pedaço do bolo que você está dando ai para o pessoal estudar como criar um framework. Em pensar que com o framework você faz quase tudo com apensas alguns comando
Muito bacana Fabyo, vou estudá-lo devagarinho, que o tempo aqui está curto. De imediato, adorei, muito bacana.
Como o Ferreira comentou aí, seria interessante os comentários no código, então vou iniciar aqui :)
/** DIRECTORY_SEPARATOR Retorna o tipo da barra utilizada para separar diretórios Win = \ nix = /*/define('BARRA', DIRECTORY_SEPARATOR);/** PATH_SEPARATOR Retorna o tipo de separação utilizada para o path Win =; nix = :*/define('SEP', PATH_SEPARATOR);/** getcwd() Obtém o diretório atual Neste caso rodando localhost e no win, teríamos algo assim: D:\webmaster\estudos\PHP\framework-fabyo-imasters\ A barra no final (\) foi inserida através da constante BARRA*/define('ROOT', getcwd() . BARRA);
PS.: Cara, muito legal esta função aqui: register_shutdown_function eu não a conhecia, show.
legal né?
ela que joga o resto do conteudo assim fecha a pagina depois da tag
<
uhnm .... só agora que eu vi este frameworks ...muito legal Fabão, ta de parabens !
Amigos, neste link encontrei uma versão atualizada do código em discussão. Fiz algumas correções e obtive este resultado:
<?php
/*
* Arquivo classe_xhmtl.php
* Função: automaticamente gera o código básico da página
*
* Originalmente criado em 26/03/2008
* Versão atual: 1.2
* Modificado pela última vez em 26/03/2008
*
* By Dimas Gomez
* dimasgomez_at_gmail_dot_com
* São Paulo, Brasil
*
* Correções por Dimas Gomez (acima) v1.2
* Baseada na classe http://www.htmlstaff.org/ver.php?id=11331
* que por sua vez foi...
* (créditos ao xKuRt - 02/09/2007) v1.1
* Baseada na classe http://forum.imasters.com.br/index.php?showtopic=200029
* (créditos ao Fabyo) v1.0
* Classe para geração de código XHTML
* Resultado gerado automaticamente (exceto a linha "//conteudo da sua página AQUI"):
* <!DOCTYPE html PUBLIC... continua com o seu DOCTYPE
* <html xmlns="http://www.w3... continua com a sua tag HTML
* <head>
* <title>Título</title>
* <meta.... continua com suas tags META
* <link href="estilo.css" rel="stylesheet"... continua com suas folhas de estilo
* <script src="source.js" type="text/javas... continua com seus scripts Javascript
* </head>
* <body>
* //conteudo da sua página AQUI
* </body>
* </html>
*/ var $xhtml;
/*
* Armazena o DOCTYPE do documento
* @name $doctype
*/
var $doctype;
/*
* Armazena o título da página web
* @name $title
*/
var $title;
/*
* Matriz com todas as meta tags do documento
* @name $meta
*/
var $meta = array ();
/*
* Vetor com todos os arquivos de script Javascript a serem inseridos no documento
* @name $js
*/
var $js = array ();
/*
* Vetor com todos os arquivos de folha de estilo (CSS) a serem inseridos no documento
* @name $css
*/
var $css = array ();
/*
* Caminho da pasta dos arquivos de scripts Javascript
* @name $path_js
*/
var $path_js;
/*
* Caminho da pasta dos arquivos de folha de estilo (CSS)
* @name $path_css
*/
var $path_css;
/*
* Método construtor.
* Define os valores padrão do DOCTYPE, título, meta tags e path de arquivos Javascript e CSS.
* @name $html
* @return void
*/
function xhtml() {
/*
* Renomeia o DOCTYPE do documento XHTML
*/
$this->ren_doctype("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"[http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n");](http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd%5C)
/*
* Renomeia o título (tag TITLE) da página
*/
// $this->ren_title("Blog do tmferreira");
$this->ren_title('Título padrão');
/*
* Executa o método que cria as meta tags padrão e definidas em tempo de projeto
*/
$this->meta_default();
/*
* Define o path (caminho da pasta) dos arquivos de folha de estilo
*/
$this->path_css = defined("PATH_CSS") ? PATH_CSS : "";
/*
* Define o path (caminho da pasta) dos arquivos de script Javascript
*/
$this->path_js = defined("PATH_JS") ? PATH_JS : "";
}
/*
* Cria o cabeçalho da página, ou seja, do DOCTYPE até a abertura da tag BODY.
* @name $header
* @return void
*/
function header() {
$this->xhtml = $this->doctype;
$this->xhtml .= "<html xmlns=\"[http://www.w3.org/1999/xhtml\"](http://www.w3.org/1999/xhtml%5C) xml:lang=\"pt-br\">\n";
$this->xhtml .= "\t<head>\n";
$this->xhtml .= "\t\t<title>{$this->title}</title>\n";
foreach ($this->meta as $nome => $valores) {
$this->xhtml .= "\t\t<meta {$valores['tipo']}=\"{$nome}\" content=\"{$valores['conteudo']}\" />\n";
}
foreach ($this->css as $i => $valor) {
$this->xhtml .= "\t\t<link href=\"{$valor}\" rel=\"stylesheet\" type=\"text/css\" />\n";
}
foreach ($this->js as $i => $valor) {
$this->xhtml .= "\t\t<script src=\"{$valor}\" type=\"text/javascript\"></script>\n";
}
$this->xhtml .= "\t</head>\n\n";
$this->xhtml .= "\t<body>\n";
echo $this->xhtml;
}
/*
* Altera (Renomeia) o DOCTYPE do documento.
* @name $ren_doctype
* @param String $doctype
* @return void
*/
function ren_doctype($doctype) {
$this->doctype = $doctype;
}
/*
* Altera (Renomeia) a tag TITLE do documento.
* @name $ren_title
* @param String $title
* @return void
*/
function ren_title($title) {
$this->title = $title;
}
/*
* Altera (Renomeia) o path (caminho da pasta) dos arquivos de script Javascript.
* @name $ren_path_js
* @param String $path
* @return void
*/
function ren_path_js($path) {
$this->path_js = $path;
}
/*
* Altera (Renomeia) o path (caminho da pasta) dos arquivos de folha de estilo (CSS).
* @name $ren_path_css
* @param String $path
* @return void
*/
function ren_path_css($path) {
$this->path_css = $path;
}
/*
* Adiciona ou altera as tags META do documento.
* Caso a tag já tenha sido declarada, é alterada.
* @name $add_meta
* @param String $nome (nome da meta tag)
* @param String $conteudo (conteúdo da tag meta. Valor que vai dentro de content
* @param String $tipo (tipo da meta tag. Valores "name" ou "http-equiv")
* @return void
*/
function add_meta($nome, $conteudo, $tipo = "name") {
$this->meta[$nome]["conteudo"] = $conteudo;
$this->meta[$nome]["tipo"] = $tipo;
}
/*
* Retira uma meta tag das meta tags definidas como padrão.
* @name $del_meta
* @param String $nome
* @return void
*/
function del_meta($nome) {
if (array_key_exists($nome, $this->meta)) {
$this->meta[$nome] = array ();
unset ($this->meta[$nome]);
}
}
/*
* Define e gera as meta tags padrão. Definidas em tempo de projeto.
* @name $meta_default
* @return void
*/
function meta_default() {
$this->add_meta("pragma", "no-cache", "http-equiv");
$this->add_meta("MSSmartTagsPreventParsing", "true", "name");
$this->add_meta("description", "Blog do tmferreira", "name");
$this->add_meta("keywords", "blog, javascript, php, jquery, tmferreira", "name");
$this->add_meta("subject", "tmferreira@blogdotmferreira.com.br", "name");
$this->add_meta("author", "tmferreira", "name");
$this->add_meta("content-type", "text/html; charset=iso-8859-1", "http-equiv");
$this->add_meta("imagetoolbar", "no", "http-equiv");
$this->add_meta("revisit-after", "1 days", "name");
$this->add_meta("language", "pt-br", "name");
$this->add_meta("copyright", "© tmferreira", "name");
$this->add_meta("designer", "tmferreira", "name");
$this->add_meta("publisher", "tmferreira", "name");
$this->add_meta("distribution", "Global", "name");
$this->add_meta("robots", "All", "name");
}
/*
* Adiciona um arquivo de folha de estilo (CSS) ao documento. Se o arquivo não existir, não é inserido.
* @name $add_css
* @param String $css
* @return void
*/
function add_css($css) {
$path = empty ($this->path_css) ? "" : $this->path_css . DIRECTORY_SEPARATOR;
$path .= $css;
if (file_exists($path)) {
$this->css[] = empty ($this->path_css) ? $css : $this->path_css . "/" . $css;
}
}
/*
* Adiciona um arquivo de script Javascript ao documento. Se o arquivo não existir, não é inserido.
* @name $add_js
* @param String $js
* @return void
*/
function add_js($js) {
$path = empty ($this->path_js) ? "" : $this->path_js . DIRECTORY_SEPARATOR;
$path .= $js;
if (file_exists($path)) {
$this->js[] = empty ($this->path_js) ? $js : $this->path_js . "/" . $js;
;
}
}
/*
* Mostra o XHTML gerado
* @name $show
* @return void
*/
function show() {
$this->header();
echo "\t\t";
/*
* Registra que o método footer será executado ao final da execução do script
*/
register_shutdown_function(array (
& $this,
"footer"
));
}
/*
* Define o rodapé do documento.
* Fecja as tags abertas pelo método header
* @name $footer
* @return void
*/
function footer() {
$this->xhtml = "\n\t</body>\n";
$this->xhtml .= "</html>\n";
echo $this->xhtml;
}
}
?>
Meu teste simples:
<?
require_once('classe_xhtml.php');
$xhtml = new xhtml();
$xhtml->show();
?>
<h1> e aí? </h1>
<div style="position:absolute; right:0px; bottom:0px;">
<p>
<a href="[http://validator.w3.org/check?uri=http://<?
require_once("classe_xhtml.php");
$xhtml = new xhtml();
$xhtml->ren_title("Código mais repuscado!");
$xhtml->del_meta("distribution");
$xhtml->del_meta("robots");
$xhtml->add_meta("designer", "Thiago Martins Ferreira", "name");
$xhtml->add_css("estilo.css");
$xhtml->ren_path_js("js");
$xhtml->add_js("jquery.js");
$xhtml->show();
?>
<h1>Testão da classe xhtml()</h1>
<div style="position:absolute; right:0px; bottom:0px;">
<p>
<a href="[http://validator.w3.org/check?uri=http://NOVAS MUDANÇAS
Fiz mais alguns ajustes, permitindo o uso de Xajax. O mais importante foi dividir o header() em 2 partes, mas mantendo ainda a facilididade do show(), pra quem quiser continuar usando apenas show().
Pra abrir:
$xhtml->show('head'); // abre o cabeçalho e insere meta, css e js
$xhtml->show('/head');// fecha o cabeçalho
Verificação
Adicionei uma função que insere o ícone do w3 validator no cantinho inferior direito da página :D, já com o link de verificação. Mamão com açúcar.
$xhtml->add_validator('xhtml');
Pergunta 1: Alguém acha que esse "validador" deveria automaticamente usar um server ao invés de localhost? Quer dizer, definir o host padrão? Como eu mantenho o firefox aberto no meu host (dimasgomez.homedns.org), não sinto falta e parece falta de purismo fazer isso.
Aqui vai um exemplo de uso com xajax:
/*
* Trecho xhtml()
*/
$xhtml = new xhtml();
$xhtml->ren_title('Teste xajax associado à classe XHTML');
$xhtml->add_validator('xhtml');
$xhtml->show('head'); // ao invés destas três linhas,
$x->printJavascript(); // ainda é possível apenas colocar
$xhtml->show('/head'); // $xhtml->show();Este script também faz uso da classe xajaxR, uma extensão que criei para adequar o xajax aos meus caprichos. :)
Um exemplo completo com xajax funcionando e validado: :)
require_once (DIR_INC . 'akasham.php');
require_once (DIR_BIB.'classe_xajaxR1.1.1.php');
require_once (DIR_BIB.'classe_xhtml1.2.2.php');
/*
* Trecho xajaxR()
*/
$x = new xajaxR();
$x->configurar('dir_fun',''); //função que permite registrar automaticamente as funções cujos arquivos sejam homônimos
$x->registerFunction('createBut');
$x->registerFunction('meuTeste');
$x->registerFunction('showFunctions');
$x->processRequest();
/*
* Trecho xhtml()
*/
$xhtml = new xhtml();
$xhtml->ren_title('Teste xajax associado à classe XHTML');
$xhtml->add_validator('xhtml');
$xhtml->show('head');
$x->printJavascript();
$xhtml->show('/head');
?>
<p>
<input type="button" name="name" value="meu teste" onclick="xajax_meuTeste('uhhh');"/>
<input type="button" name="name" value="show functions" onclick="xajax_showFunctions('user');"/>
<input type="button" name="name" value="create button" onclick="xajax_createBut('user');"/>
</p>
<div id="divid">
será???
</div>
<form id="formid" action="">
</form>
valeu, vou comentar sim