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"; } //abre coluna $comentario_inicio = "\n\n"; $codigohtml .= "$comentario_inicio \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\n"; $codigohtml .= $this->monta_html_modelo($valor["subpartes"], $centralizar); $codigohtml .= "
\n"; } else { //conteudo if (!empty($valor["conteudo"])) { $codigohtml .= $this->monta_componentes($valor["conteudo"]); } else { $codigohtml .= " "; } } //fecha coluna $comentario_final = "\n\n"; $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 = "versão para impressão"; 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); ?>