Foros del Web » Programando para Internet » PHP »

[aporte-consulta] Mezclar PHP y HTML. Programación en 3 capas

Estas en el tema de [aporte-consulta] Mezclar PHP y HTML. Programación en 3 capas en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 18/04/2012, 13:36
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años, 8 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.
  #2 (permalink)  
Antiguo 18/04/2012, 13:48
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: [aporte-consulta] Mezclar PHP y HTML. Programación en 3 capas

Pues no es nada nuevo, así se le conoce al concepto de MVC por decir algo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 18/04/2012, 14:04
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años, 8 meses
Puntos: 97
Respuesta: [aporte-consulta] Mezclar PHP y HTML. Programación en 3 capas

Ah, no és mi pretensión crear algo nuevo. Hace más de 20 años que lo vengo aplicando con muy buenos resultados.

Solo queria mostrarlo de manera llana para quién le interese y ver si alguien aporta algo mejor.

Saludos.
  #4 (permalink)  
Antiguo 18/04/2012, 14:17
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 16 años, 4 meses
Puntos: 139
Respuesta: [aporte-consulta] Mezclar PHP y HTML. Programación en 3 capas

Ya vos tiene 20 años programando felicidades.
La intencion del aporte es buena

Saludos.
  #5 (permalink)  
Antiguo 18/04/2012, 14:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 7 meses
Puntos: 2135
Respuesta: [aporte-consulta] Mezclar PHP y HTML. Programación en 3 capas

De hecho como lo pones es un poco mezclado igual, una forma más limpia de trabajar a 3 capas sería así:
modelo/matriz.php
Código PHP:
Ver original
  1. function obtenerDatosMatriz() {
  2.        return array(1, 2, 3, 4);
  3. }
matriz.php
Código PHP:
Ver original
  1. include('modelo/matriz.php');
  2. $matriz = obtenerDatosMatriz(); // obtienes desde el modelo o dominio
  3. include('plantillas/matriz.php'); // pasas a la vista

Código PHP:
Ver original
  1. <ul>
  2. <?php foreach ($matriz as $index) { ?>
  3. <li><?php echo $index; ?></li>
  4. <?php } ?>
  5. </ul>

Así mantienes una separación más limpia del codigo el archivo HTML queda lo más reducido posible a solo tags HTML y es sencillo de mantener.

Saludos.
  #6 (permalink)  
Antiguo 18/04/2012, 14:32
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años, 8 meses
Puntos: 97
Respuesta: [aporte-consulta] Mezclar PHP y HTML. Programación en 3 capas

Para jgx2.

Pues si, tengo 46 y empecé a los 18.

Gracias de antemano!
  #7 (permalink)  
Antiguo 18/04/2012, 14:41
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años, 8 meses
Puntos: 97
Respuesta: [aporte-consulta] Mezclar PHP y HTML. Programación en 3 capas

GatorV.
Estoy totalmente de acuerdo contigo.
Antes del ejemplo, ya menciono que no és un ejemplo purista. No lo quise extender mucho.

Sin embargo, mezclar el código del bucle dentro de <li>, impide que un diseñador manipule la plantilla cómodamente.
Le será más fácil manipular, y más en una estructura compleja unas estructura así.
Código PHP:
    <div class='menu'
        <
p>(nombremenu)</p
        <
ul
            (
opcionesmenu
        </
ul
    </
div
Gracias!
  #8 (permalink)  
Antiguo 18/04/2012, 14:43
Avatar de mike28gt  
Fecha de Ingreso: abril-2010
Mensajes: 56
Antigüedad: 14 años, 8 meses
Puntos: 14
Respuesta: [aporte-consulta] Mezclar PHP y HTML. Programación en 3 capas

Cita:
Iniciado por GatorV Ver Mensaje
De hecho como lo pones es un poco mezclado igual, una forma más limpia de trabajar a 3 capas sería así:
modelo/matriz.php
Código PHP:
Ver original
  1. function obtenerDatosMatriz() {
  2.        return array(1, 2, 3, 4);
  3. }
matriz.php
Código PHP:
Ver original
  1. include('modelo/matriz.php');
  2. $matriz = obtenerDatosMatriz(); // obtienes desde el modelo o dominio
  3. include('plantillas/matriz.php'); // pasas a la vista

Código PHP:
Ver original
  1. <ul>
  2. <?php foreach ($matriz as $index) { ?>
  3. <li><?php echo $index; ?></li>
  4. <?php } ?>
  5. </ul>

Así mantienes una separación más limpia del codigo el archivo HTML queda lo más reducido posible a solo tags HTML y es sencillo de mantener.

Saludos.
Comparto esta opinión, ya que no solo tienes una separación lógica, sino también una separación física, lo cual ayuda a la lectura de tu código.
  #9 (permalink)  
Antiguo 18/04/2012, 14:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 7 meses
Puntos: 2135
Respuesta: [aporte-consulta] Mezclar PHP y HTML. Programación en 3 capas

Cita:
Iniciado por oscartt67 Ver Mensaje
GatorV.
Estoy totalmente de acuerdo contigo.
Antes del ejemplo, ya menciono que no és un ejemplo purista. No lo quise extender mucho.

Sin embargo, mezclar el código del bucle dentro de <li>, impide que un diseñador manipule la plantilla cómodamente.
Le será más fácil manipular, y más en una estructura compleja unas estructura así.
Código PHP:
    <div class='menu'
        <
p>(nombremenu)</p
        <
ul
            (
opcionesmenu
        </
ul
    </
div
Gracias!
Cualquier editor, al encontrar los tags <? ?> los va a ignorar (visualmente) por lo que no infiere en nada si le pasas la plantilla a un diseñador.

Saludos.
  #10 (permalink)  
Antiguo 18/04/2012, 15:15
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años, 8 meses
Puntos: 97
Respuesta: [aporte-consulta] Mezclar PHP y HTML. Programación en 3 capas

GatorV, és cierto que así, con dicho editor, eliminas el problema de los tags, pero tal y como yo trabajo, no me sirve. Me explico:


Como trabajo realmente és con todas piezas en la db y accedo a ellas con clases. De una web a otra, solo cambian los parámetros de la db. No el php.
Básicament utilizo 4 tablas:

Templates: con la estructura html como la del ejemplo <p>(texto)<>
Data : repositorios de datos que alimenta a templates.
Data_def : definicion del origen de los datos de Data, donde un origen puede ser:

una tabla (p.ej, articulos, quedando a disposición de Templates todos sus campos+los campos de sus tablas vinculadas)<p>(articulos.familia.nombre)</p>
otra template<div>(template_menu)</div>
una funcion
Data_packet_fields: datos introducidos por el usuario demasiado pequeños para crear una tabla para ellos solos..

Los diseñadores acceden (mediante backend) a templates.
Los programadores/implementadores a Data y Data_def, creando nuevos orígenes de daos
Los Usuarios, a nutrir tablas de datos y data_packet_fields.
  #11 (permalink)  
Antiguo 18/04/2012, 15:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 7 meses
Puntos: 2135
Respuesta: [aporte-consulta] Mezclar PHP y HTML. Programación en 3 capas

Por lo que veo estas hablando de las tareas que hace un CMS que es mas o menos lo que dices, y ya no es como tal 3 capas, estamos hablando de implementación en PHP (no de DB), por eso mi comentario a mejor usar PHP puro en los templates (lo cual acelera muchísimo el parseo).

Saludos.
  #12 (permalink)  
Antiguo 18/04/2012, 16:28
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años, 8 meses
Puntos: 97
Respuesta: [aporte-consulta] Mezclar PHP y HTML. Programación en 3 capas

si, és un mini CMS casero y si, la velocidad no és lo mismo!

Gracias por tus comentarios.

Etiquetas: capas, html, mezclar, mysql, sql, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:44.