//////////////////////////////////////////////////////
/////////////// MODELOS PADRONIZADOS /////////////////
/////////////////// versão 1.2.2 /////////////////////
//////////////// 01 de Julho de 2011 /////////////////
//////////////////////////////////////////////////////
#### MODEL ####
// classe que solicita as informações ao banco de dados
class BD_modelo extends BD {
function dados_modelo_pai($cod) {
//informações sobre o modelo pai e suas configurações
$sql = "SELECT m.*, mp.* FROM ger_modelo m, ger_modeloparte mp
WHERE m.codmodelo = '$cod' AND m.codmodelo = mp.codmodelo AND m.lixo = 0";
$Banco = new BD;
return $this->bd_select($sql, true);
}
function dados_partes($cod) {
//lista de todas as partes deste modelo
$sql = "SELECT * FROM ger_modelo m, ger_modeloparte mp
WHERE m.pai = '$cod' AND m.lixo = 0 AND m.codmodelo = mp.codmodelo
ORDER BY ordem";
return $this->bd_lista($sql, true);
}
function dados_componentes() {
//lista de componentes para inserir na parte do modelo:
$sql = "SELECT * FROM ger_componente WHERE lixo = 0 ORDER BY titulo";
return $this->bd_lista($sql, true);
}
}
#### CONTROLADOR ####
class Modelo extends BD_modelo {
var $componentes = "";
function desenha_modelo($cod) {
//pega os dados no banco
$pai = $this->dados_modelo_pai($cod);
$partes = $this->dados_partes($cod);
$this->componentes = $this->dados_componentes();
//monta os estilos de cada parte
$css_modelo = "";
$css_modelo .= $this->estilos_partes($partes);
/*
echo "
";
print_r($this->componentes);
exit;
*/
//estilos do body
$css_body = $this->estilos_modelo($pai, "html,body");
//estilos da tabela_principal
$css_principal = $this->estilos_modelo($pai, "#tabela_principal");
//estilos da tabela_principal, para impressão
$css_print = $this->estilos_partes($partes, "print");
//alinhamento horizontal da primeira tabela e da tabela_principal
$alinhamentoh = "";
if (!empty($pai["alinhamentoh"])) {
if ($pai["alinhamentoh"] == "justify") {
$alinhamentoh = " text-align: center;";
} else {
$alinhamentoh = " text-align:" . $pai["alinhamentoh"] . ";";
}
}
//alinhamento vertical da primeira tabela e da tabela_principal
$alinhamentov = "";
if (!empty($pai["alinhamentov"])) {
$alinhamentov = " vertical-align:" . $pai["alinhamentov"] . ";";
}
$estilos_modelo = "";
$estilos_print = "";
//abre a tabela
$abre = "\n\n
\n
\n";
//fecha a tabela.
$fecha .= "
\n
";
//conteudo do modelo pai
if (!empty($partes)) {
$cont = $this->monta_html_modelo($partes);
}
if (!empty($pai["conteudo"])) {
$cont .= $this->monta_componentes($pai["conteudo"]);
}
//logo para o cabecalho da versao de impressao da pagina
$logo = $this->cabecalho_de_impressao();
//codigo do google analytics
$ganalytics = $this->google_analytics();
//cabecalho da pagina
$cabecalho = $this->cabecalho();
$codigohtml = "";
$codigohtml .= "\n\n\n" . $this->cabecalho() . $estilos_modelo . $estilos_print . "\n";
$codigohtml .= "" . $logo . $abre . $cont . $fecha . $ganalytics . "\n\n";
return $codigohtml;
}
//monta a estrutura html de cada parte do modelo
function monta_html_modelo($modelo) {
$nova_linha = true;
$codigohtml = "";
if (!empty($modelo))
foreach ($modelo as $chave => $valor) {
//verifica se há tabelas aninhadas nesta parte
$subpartes = $this->dados_partes($valor["codmodelo"]);
if (!empty($subpartes)) {
$modelo[$chave]["subpartes"] = $subpartes;
}
}
if (!empty($modelo))
foreach ($modelo as $chave => $valor) {
$alinhamentoh = "";
if (!empty($valor["alinhamentoh"])) {
$alinhamentoh = " align='" . $valor["alinhamentoh"] . "'; ";
}
if ($valor["alinhamentoh"] == "center") {
$centralizar = "margin: 0 auto;";
}
$alinhamentov = "";
if (!empty($valor["alinhamentov"])) {
$alinhamentov = " vertical-align: " . $valor["alinhamentov"] . "; ";
}
//verifica se o proximo nao é adjacente para quebrar a linha
$proximo = $modelo[$chave + 1];
if ($proximo["adjacente"]) {
$quebra_linha = false;
} else {
$quebra_linha = true;
}
//abre linha
if ($nova_linha) {
$codigohtml .= "
\n\n";
//verifica se há outras tabelas aninhadas nesta parte
if (!empty($valor["subpartes"])) {
//DEFININDO w E h DA TABELA DAS SUBPARTES
$largura = "";
$altura = "";
//quantidade de subpartes
$quant_sub = count($valor["subpartes"]);
//se há apenas uma subparte, pega os valores próprios da subparte
if ($quant_sub == 1) {
$largura = "width:" . $valor["subpartes"][0]["largura"] . $valor["subpartes"][0]["largura_unidade"] . ";";
$altura = "height:" . $valor["subpartes"][0]["altura"] . $valor["subpartes"][0]["altura_unidade"] . ";";
//mas se há mais de uma subparte, pega os valores do pai
} else {
$largura = "width:" . $valor["largura"] . $valor["largura_unidade"] . ";";
$altura = "height:" . $valor["altura"] . $valor["altura_unidade"] . ";";
}
$codigohtml .= "\n
$comentario_final\n";
//fecha linha
if (!$valor["adjacente"]) {
//se esta coluna nao é adjacente, a próxima deverá abrir uma nova linha
$nova_linha = true;
$codigohtml .= "
\n";
} else {
$nova_linha = false;
}
}
return $codigohtml;
}
function estilos_modelo($array_modelo, $tipo="", $media="screen", $dados_pai=array()) {
$M = $array_modelo;
$css_modelo = "";
if (!empty($M["fundo_cor"])) {
$css_modelo .= " background-color: #" . $M["fundo_cor"] . ";\n";
}
if (!empty($M["fundo_imagem"])) {
$css_modelo .= " background-image: url(imagens/" . $M["fundo_imagem"] . "); \n";
if (!empty($M["fundo_repete"])) {
$css_modelo .= " background-repeat: " . $M["fundo_repete"] . "; \n";
}
if (!empty($M["fundo_posicao"])) {
$css_modelo .= " background-position: " . $M["fundo_posicao"] . "; \n";
}
if (!empty($M["fundo_movimento"])) {
$css_modelo .= " background-attachment: " . $M["fundo_movimento"] . "; \n";
}
}
if ($tipo == "#tabela_principal") {
$css_modelo = "";
}
if ($M["alinhamentoh"] == "center" || $M["alinhamentoh"] == "justify") {
$css_modelo .= " margin: 0 auto;\n";
}
if (!empty($M["margem"])) {
$css_modelo .= " margin: " . $M["margin"] . ";\n";
}
if (!empty($M["padding"])) {
$css_modelo .= " padding: " . $M["padding"] . ";\n";
}
if ($tipo == "html,body") {
if (!empty($M["alinhamentoh"])) {
if ($M["alinhamentoh"] == "justify") {
$M["alinhamentoh"] = "center";
}
$css_modelo .= " text-align: " . $M["alinhamentoh"] . ";\n";
}
$css_modelo .= " overflow: auto;\n";
} else {
if (!empty($M["alinhamentoh"])) {
$css_modelo .= " text-align: " . $M["alinhamentoh"] . ";\n";
}
if (!empty($M["alinhamentov"])) {
$css_modelo .= " vertical-align: " . $M["alinhamentov"] . ";\n";
}
if (!empty($M["altura"])) {
$css_modelo .= " height: " . $M["altura"] . $M["altura_unidade"] . ";\n";
} else {
$altura_pai = $dados_pai["altura"] . $dados_pai["altura_unidade"];
//se o pai for 100%, o filho (este) também será
if ($altura_pai == "100%") {
$css_modelo .= " height: 100%;\n";
}
}
if (!empty($M["largura"])) {
$css_modelo .= " width: " . $M["largura"] . $M["largura_unidade"] . ";\n";
}
}
if (empty($tipo)) {
$item = "#id_tabela" . $M["codmodelo"];
if ($media == "print") {
$css_print = "";
if (!$M["imprimivel"]) {
$css_print = "#id_tabela" . $M["codmodelo"] . " { display: none; height:0; width:0; visibility:hidden;}\n";
}
return $css_print;
}
} else {
$item = $tipo;
}
if (!empty($css_modelo)) {
$css_modelo = $item . " {\n" . $css_modelo . "}\n";
}
return $css_modelo;
}
function estilos_partes($partes, $media="screen") {
foreach ($partes as $chave => $valor) {
//verifica se há tabelas aninhadas nesta parte
$subpartes = $this->dados_partes($valor["codmodelo"]);
if (!empty($subpartes)) {
$partes[$chave]["subpartes"] = $subpartes;
}
}
foreach ($partes as $chave => $valor) {
$css_modelo_partes .= $this->estilos_modelo($valor, "", $media, $partes[0]);
if (!empty($valor["subpartes"])) {
$css_modelo_partes .= $this->estilos_partes($valor["subpartes"], $media);
}
}
return $css_modelo_partes;
}
function monta_componentes($codigos_dos_componentes) {
//instancia a classe
$todos_os_componentes = $this->dados_componentes();
//array com a lista de codcomponentes
if (strpos($codigos_dos_componentes, ",") !== false) {
$array_codcomponente = split(",", $codigos_dos_componentes);
} else {
$array_codcomponente[] = $codigos_dos_componentes;
}
//loop pelos codcomponentes
$c = "";
foreach ($array_codcomponente as $indice => $codcomponente) {
//loop no array com todos os componentes do site
foreach ($this->componentes as $chave_comp => $valor_comp) {
//compara o cod e constrói a palavra mágica deste componente
if ($valor_comp["codcomponente"] == $codcomponente) {
$c .= "{\$ Componente(" . $valor_comp["tipo"] . "," . $valor_comp["codcomponente"] . ") \$}\n";
}
}
}
return $c;
}
function cabecalho_de_impressao() {
if (file_exists(DIRIMAGEM . "impressao/cabecalho.jpg")) {
$img = "";
return "
$img
";
}
return "";
}
function google_analytics() {
$script = "";
if (file_exists(SISTEMA . "analytics.php")) {
include_once(SISTEMA . "analytics.php");
}
return $script;
}
function cabecalho() {
//pega informações sobre a página
$sql = "SELECT
c.titulo as titulo_da_pagina,
c.textoilustrativo,
p.restrita,
c.incluirnomapa,
c.palavraschave,
c.idioma,
s.titulo as titulo_do_site
FROM ger_conteudo c, ger_site s, ger_pagina p
WHERE c.codconteudo = '" . CODCONTEUDO . "'
AND c.codpagina = p.codpagina";
$info = $this->bd_select($sql);
if (!empty($info))
foreach ($info as $chave => $valor) {
$$chave = $valor;
}
$html = "\n";
$html .= "\n";
$html .= "\n";
$html .= "\n";
$html .= "\n";
if (isset($restrita))
if ($restrita) {
$html .= "\n";
$html .= "\n";
}
$html .= "\n";
$html .= "" . $titulo_do_site . " - " . $titulo_da_pagina . "\n";
include_once("estilos.php");
$estilos = new Estilos;
$html .= $estilos->linkar("screen", "screen");
$html .= $estilos->linkar("print", "print");
$html .= $estilos->incorporar("inicial", "screen");
$html .= $estilos->incorporar("painel", "screen");
$html .= "\n\n";
$html .= "\n\n\n";
return $html;
}
}
$C = new Modelo;
$codigohtml = $C->desenha_modelo($codmodelo);
?>