Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/04/2012, 13:36
Avatar de oscartt67
oscartt67
 
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años, 7 meses
Puntos: 97
[aporte-consulta] Mezclar PHP y HTML. Programación en 3 capas

Saludos a todos.

Llevo poquito en este foro, pero he observado que muchos trozos de código que se publican son una mezcla de html con inserciones php, como por ejemplo:
Código PHP:
<?php
    $matriz
[0]["titulo"]="quienes somos";
    
$matriz[0]["link"]="http://www.miweb.com/quienes somos";
    
$matriz[1]["titulo"]="producto";
    
$matriz[1]["link"]="http://www.miweb.com/producto";
    
$nombremenu="menu principal";

?>
<div class="menu">
    <p><?php echo $nombremenu;?></p>
    <ul>
    <?php foreach($matriz as $i=>$valor){?>
    <li><a href="<?php echo $valor["link"];?>"><?php echo $valor["titulo"];?></a></li>
    <?php }?>
    </ul>
</div>
Hay una manera de hacer las cosas conocida como programación '3 capas', que consiste en separar el código en:

1.la presentación de los datos
2.las reglas de negocio...el codigo necesario para obtener dichos datos
3.el diálogo con la base de datos
*
No es necesario ser un experto en programacion para aplicarlo. Simplemente es cuestión de planteamiento.

El siguiente ejemplo va destinado a mostar un planteamiento y para ser entendido por principiantes.No és para nada, purista, ya que no se encuentra en funciones aparte la capa 1 y la 2, pero como ejemplo, valdrá.

Una estructura con 3 capas equivalente al código de arriba seria:
Código PHP:
<?php
echo Menu();
function 
Menu(){
    
//capa 3. Obtencion de los datos.    
    /*$Matriz=GetData("select titulo,link from opcionesmenu"); donde GetData
       tendria los comandos mysql, pdo, odbc... para acceder a la db, ejecutar la
       consulta y devolver el array)*/
    
$matriz[0]["titulo"]="quienes somos";
    
$matriz[0]["link"]="http://www.miweb.com/quienes somos";
    
$matriz[1]["titulo"]="producto";
    
$matriz[1]["link"]="http://www.miweb.com/producto";
    
// capa 1. presentacion de datos.
    
$plantilla="
    <div class='menu'>
        <p>(nombremenu)</p>
        <ul>
            (opcionesmenu)
        </ul>
    </div>"
;
    
$plantillamenu="<li><a href='(link)'>(titulo)</a></li>";
    
//capa 2. Manipulación de los datos
    
foreach($matriz as $i=>$valor){
        
$dato["opcionesmenu"].=LlenaPlantilla($plantillamenu,$valor);
    }
    
$dato["nombremenu"]="menu principal";
    
$html=LlenaPlantilla($plantilla,$dato);
    return 
$html;
}
//esta funcion llena $pPlantilla con los valores de la matriz.
function LlenaPlantilla($pPlantilla,$pMatriz){
    foreach(
$pMatriz as $variable=>$valor){
        
$pPlantilla=str_replace("($variable)",$valor,$pPlantilla);
    }
    return 
$pPlantilla;
}
?>
Vamos a escribir un poquitín más de código en algunos casos y menos en otros. Que ganamos?

1.Sobre todo, legibilidad y fácil mantenimiento del codigo.
2.un diseñador será capaz de manejar la capa 1 sin saber nada de php.
3.tenemos el acceso a datos totalmente centralizado, haciendo menos traumatico un cambio de base de datos (de mysql a sqlserver...)

Espero que le sirva a alguien!

Que os parece este planteamiento?

Soy freelance, totalmente autodidacta. Llevo muchos años programando solo, sin la posibilidad de compartir conocimiento con nadie. Seguro, que cometo un monton de errores que yo ni detecto y que seguro alguien verá.

Dicho esto, por favor,sed duros y despiadados con el código.

Gracias de todo corazón por la existencia de foros como este, que nos dan la oportunidad de compartir conocimiento por pasión, no por dinero.