Foros del Web » Programando para Internet » PHP »

Mostrar HTML pero sin embeber ni mezclar PHP con HTML

Estas en el tema de Mostrar HTML pero sin embeber ni mezclar PHP con HTML en el foro de PHP en Foros del Web. Hola, estoy haciendo un pequeño login de usuarios en php oo y llegue a la parte de mostrar los datos, la vista. Quiero tener un ...
  #1 (permalink)  
Antiguo 27/10/2013, 17:31
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 9 años, 9 meses
Puntos: 1
Mostrar HTML pero sin embeber ni mezclar PHP con HTML

Hola,

estoy haciendo un pequeño login de usuarios en php oo y llegue a la parte de mostrar los datos, la vista.

Quiero tener un solo index pero sin mezclarlo con codigo php.

En ese index quiero mostrar los datos del usuario, si es q existe la sesion de login o mostrar el form de login si no existe.


Con esto muestro los datos del usuario. Funciona pero quiero ocultar el form y viceversa
Código PHP:

        $mostrarUser 
= new Usuario();
        
$mostrarHtml $mostrarUser->getDataUsuario($_SESSION['user']);    

    
$template file_get_contents('index.html');
    foreach (
$mostrarHtml as $clave=>$valor) {
    
$template str_replace('{'.$clave.'}'$valor$template);    }

    print 
$template
Código HTML:
<!DOCTYPE HTML>
<html lang="es">
    <head>
	    <meta charset="utf-8" />
        <title>Login</title>
</head>

<body>
    
	    <section>
                                
                                //Esto muestro si no existe $_SESSION['user']
				<form action="proceso.php" autocomplete="on" method="post">
				  Usuario:<input type="text" name="user" autofocus><br>
				  Contraseña: <input type="password" name="pass"><br>
				  <input type="submit" name="login" value="Iniciar sesión">
				</form>

                                  
                                  //Estos muestro si existe $_SESSION['user']
				  <p>{nombre}</p>
				  <p>{email}</p>

    </section>

</body>


</html> 

Quiero evitar hacer esto:

Código PHP:

<!DOCTYPE HTML>
<html lang="es">
    <head>
        <meta charset="utf-8" />
        <title>Login</title>
</head>

<body>
    
        <section>

<?php

if(isset($_SESSION['user'])){
?>

                                  //Muestro datos del user y demás
                  <p>{nombre}</p>
                  <p>{email}</p>
<?php
}else{
?>                         
                                  //Muestro form de login
                <form action="proceso.php" autocomplete="on" method="post">
                  Usuario:<input type="text" name="user" autofocus><br>
                  Contraseña: <input type="password" name="pass"><br>
                  <input type="submit" name="login" value="Iniciar sesión">
                </form>
<?php
}
?>
    </section>

</body>


</html>
Se puede hacer lo q planteo? o me conviene usar paginas por separado?, index.html, login.html, registro.html, etc...

Gracias

Última edición por reborn; 27/10/2013 a las 18:39
  #2 (permalink)  
Antiguo 28/10/2013, 04:18
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 7 años
Puntos: 84
Respuesta: Mostrar HTML pero sin embeber ni mezclar PHP con HTML

sea como sea, para trabajar con páginas dinámicas basadas en HTML y PHP debes asumir que ambos lenguajes, en algún punto, deberán trabajar juntos.

fueron pensados para que esto sucediera así.

por este motivo se suelen utilizar patrones de arquitectura tipo MVC.

de manera que en el modelo tienes las clases, en el controlador tienes un nivel intermedio entre el modelo y la vista y finalmente la vista tiene una mezcla de HTML, CSS y javascript con PHP, pero con poco PHP.

hacer un documento por cada cosa que hagas no es muy recomendable por lo que tengo entendido (cuestiones de diseño, mantenimiento, ...)

saludos :)
__________________
Ayúdame a hacerlo por mi mismo.
  #3 (permalink)  
Antiguo 28/10/2013, 05:04
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 14 años, 2 meses
Puntos: 19
Respuesta: Mostrar HTML pero sin embeber ni mezclar PHP con HTML

podes buscar "template engine".. hay un monton... algunos ni manejan PHP, es a puro Javascript, PHP entrega un JSON al template y con Javascript lo podes procesar directamente

despues tenes otros metodos, que se "parsee" el template entero previamente y LUEGO lo mostras y tus templates solo tendrian cosas como.. no se....

Código HTML:
Ver original
  1. {if 1==1}
  2.     <p>Hola {nombre}, como estas?!!??!?!</p>
  3. {/if}

hay muchas maneras, saludos
  #4 (permalink)  
Antiguo 28/10/2013, 05:14
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 7 años
Puntos: 84
Respuesta: Mostrar HTML pero sin embeber ni mezclar PHP con HTML

Cita:
Iniciado por Fernand0 Ver Mensaje
podes buscar "template engine".. hay un monton... algunos ni manejan PHP, es a puro Javascript, PHP entrega un JSON al template y con Javascript lo podes procesar directamente

despues tenes otros metodos, que se "parsee" el template entero previamente y LUEGO lo mostras y tus templates solo tendrian cosas como.. no se....

Código HTML:
Ver original
  1. {if 1==1}
  2.     <p>Hola {nombre}, como estas?!!??!?!</p>
  3. {/if}

hay muchas maneras, saludos
esto no siempre es aplicable. el usuario puede desactivar javascript y por ello no poder visualizar la web. muchas empresas tienen los ordenadores limitados de manera que el usuario no puede actualizar el navegador, si no puede visualizar javascript correctamente entonces el trabajo fué en vano.

primero hay que pensar la web de manera que sea operativa sin una gran dependencia del cliente, luego se puede reforzar con javascript. pero la web tiene que funcionar con php y html como mínimo. es cuestión de estrategia.
__________________
Ayúdame a hacerlo por mi mismo.
  #5 (permalink)  
Antiguo 28/10/2013, 05:27
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 926
Antigüedad: 12 años, 8 meses
Puntos: 269
Respuesta: Mostrar HTML pero sin embeber ni mezclar PHP con HTML

Lo pongo esta vez en negrita:
"No mezclar código PHP y HTML" es un mantra absurdo.
Parece que la gente se aprende esa frasecita, como si tuviera algún sentido, o como si el decir esa frase (como tantas otras), implicara el conocer MVC, o implicara código limpio, o .. no sé.
La realidad es que es una supersimplificación hecha para que la gente la aprenda rápido, y no piense.
Lo que no hay que mezclar es , en términos MVC, código de controlador o de modelo con código de vista.
En términos generales, no mezclar cómo se obtienen los datos y cómo se muestran.
Mientras tu aplicación sea capaz de cargar cualquier objeto, generar cualquier fuente de datos, ejecutar cualquier acción sobre los modelos, sin necesitar que se cargue una vista, la separación es completa.Y esto es algo a nivel de diseño de aplicación, no de lenguaje de programación.
Y muchas aplicaciones que "no contienen php en la vista" (y en vez de php tienen algún lenguaje absurdo como smarty), NO cumplen los requisitos anteriores, que es realmente el objetivo a cumplir.
  #6 (permalink)  
Antiguo 28/10/2013, 05:55
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 14 años, 2 meses
Puntos: 19
Respuesta: Mostrar HTML pero sin embeber ni mezclar PHP con HTML

Cita:
Iniciado por guardarmicorreo Ver Mensaje
esto no siempre es aplicable. el usuario puede desactivar javascript y por ello no poder visualizar la web. muchas empresas tienen los ordenadores limitados de manera que el usuario no puede actualizar el navegador, si no puede visualizar javascript correctamente entonces el trabajo fué en vano.

primero hay que pensar la web de manera que sea operativa sin una gran dependencia del cliente, luego se puede reforzar con javascript. pero la web tiene que funcionar con php y html como mínimo. es cuestión de estrategia.
es una alternativa que propuse nada mas, igual hoy en dia el que tiene js desactivado no tiene mucho futuro..... si hay un 5% de usuarios con JS desactivado creo que es mucho..
cada uno elige lo que quiere..

aca dejo un ejemplo sin JS y con la vista separada de la info asi no se ve mas negrita por ahi..
  #7 (permalink)  
Antiguo 28/10/2013, 06:09
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 926
Antigüedad: 12 años, 8 meses
Puntos: 269
Respuesta: Mostrar HTML pero sin embeber ni mezclar PHP con HTML

Cita:
Iniciado por Fernand0 Ver Mensaje
aca dejo un ejemplo sin JS y con la vista separada de la info asi no se ve mas negrita por ahi..
... otro ejemplo de lenguaje de programación absurdo cuando php fue inventado para eso.Otro ejemplo de confundir una regla de arquitectura de aplicación, con un problema de lenguaje.Otra vuelta de tuerca a los "smarty".Ahi no hay separación de vista e "info".Hay separación de lenguaje (qué diferencia hay entre hacer "echo $a;" y "{$a}"?), que no aporta nada.

Cada vez que veo un método "assign" en un sistema de plantillas....
En el pie de mi firma tienes un link a un sistema de plantillas que he desarrollado, que usa simplemente php.Y añade cosas que para mí sí son vitales en un sistema de plantillas: widgets, niveles de abstracción, reutilización de componentes, internacionalización...Pero no intentar reinventar los bucles, los condicionales, el "echo",etc,etc.
  #8 (permalink)  
Antiguo 28/10/2013, 06:14
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 14 años, 2 meses
Puntos: 19
Respuesta: Mostrar HTML pero sin embeber ni mezclar PHP con HTML

yo veo tanto separacion de lenguaje como separacion de vista e "info".. pero bueno...
yo no concuerdo en que una persona tenga la verdad absoluta... por eso no refuto... solo trato de aportar
  #9 (permalink)  
Antiguo 28/10/2013, 06:29
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 926
Antigüedad: 12 años, 8 meses
Puntos: 269
Respuesta: Mostrar HTML pero sin embeber ni mezclar PHP con HTML

Cita:
Iniciado por Fernand0 Ver Mensaje
yo veo tanto separacion de lenguaje como separacion de vista e "info".. pero bueno...
yo no concuerdo en que una persona tenga la verdad absoluta... por eso no refuto... solo trato de aportar
No puedes ver separación de vista e "info".Eso es una cuestión de arquitectura de aplicación y de metodología de programación, no de plantillas.
Seguro que no es posible llamar desde una plantilla a una función perdida, fuera de cualquier modelo, controlador, o datasource, que hace una operación que debería estar en un modelo, controlador o datasource? Un "helper", un "snippet" o algo parecido, que es código php puro, y, por lo tanto, puede estar ejecutando acciones que pertenecen al modelo?
Porque esto lo he visto cientos de veces.
Mientras puedas hacer eso, no puedes ver separación de presentación con respecto al resto de la aplicación.
Por lo que te queda simplemente separación de lenguaje.

Yo no concuerdo con que "no mezclar PHP con HTML" sea una verdad absoluta, que es lo que lleva a que existan "Dwoos" y "Smarties".
  #10 (permalink)  
Antiguo 28/10/2013, 11:10
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 9 años, 9 meses
Puntos: 1
Respuesta: Mostrar HTML pero sin embeber ni mezclar PHP con HTML

Gracias muchachos.
No soy nuevo en php pero si en poo y retome luego de casi 2 años de no sentarme a codificar y estoy aprendiendo poo.
Bueno, como dije estoy haciendo un sencillo login.
Yo se lo q es mvc y todo eso pero no estoy siguiendo ningun patron.

Mi pregunta fue en base a esto:

Código PHP:
Ver original
  1. <?php
  2. require_once 'clases/Usuario.php';
  3.  
  4. abstract class Index
  5. {
  6.     public static function main()
  7.     {
  8.         include_once 'vista/header.php';
  9.        
  10.             if(isset($_SESSION['user'])){      
  11.                
  12.                 $mostrarUser = new Usuario();
  13.                 $mostrarDatosUser = $mostrarUser->getDataUsuario($_SESSION['user']);
  14.  
  15.                 $html = '<a href="logout.php">Salir</a>';              
  16.                 $html .= '<p>{nombre}</p><p>{email}</p>';
  17.  
  18.                 foreach ($mostrarDatosUser as $clave=>$valor) {
  19.                 $html = str_replace('{'.$clave.'}', $valor, $html); }
  20.  
  21.                 print $html;   
  22.                  
  23.  
  24.             }else{
  25.  
  26.                 $form =  '<article><form action="proceso.php" autocomplete="on" method="post">
  27.                             <input type="text" name="user" placeholder="Nombre de usuario" autofocus><br>
  28.                             <input type="password" name="pass" placeholder="Contraseña">
  29.                             <input class="boton" type="submit" name="login" value="Iniciar sesión">
  30.                           </form></article>';
  31.  
  32.            
  33.  
  34.                 print $form;
  35.             }
  36.  
  37.         include_once 'vista/footer.php';
  38.     }
  39. }
  40.  
  41. Index::main();

...a eso me referia.

Yo tengo el index en donde cargo el contenido estatico de una "plantilla", q seria el header y footer y en el contenido muestro los datos del usuario si es q existe la sesion o muestro el form de login... y eso es q lo q se me ocurrio hacer. Funcionar funciona pero no me convence.
  #11 (permalink)  
Antiguo 28/10/2013, 12:33
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 14 años, 2 meses
Puntos: 19
Respuesta: Mostrar HTML pero sin embeber ni mezclar PHP con HTML

podrias utilizar otros 2 archivos (cambias el codigo de la Class Index por 2 include)... logged.php (muestra la data del usuario logueado) y loginForm.php (muestra el $form) y asi se volveria mas escalable de paso...

podrias incluso en otra parte del sitio (ya que no siempre uno se loguea en index.php, bueno es una opcion que muchos sitios ofrecen) simplemente poner un popup en JS o algo asi (te tiro una idea) y podrias utilizar loginForm.php en el "pop-up" para que se loguee sin necesidad de ir a index.php

saludos
  #12 (permalink)  
Antiguo 28/10/2013, 13:02
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 7 años
Puntos: 84
Respuesta: Mostrar HTML pero sin embeber ni mezclar PHP con HTML

no se hasta qué punto sería útil tener HTML en clases :S

HTML es HTML, con ello solo muestras la información, no le das ninguna manipulación, simplemente muestras o recoges información.

¿si no vas a manipular información entonces de qué sirve tener HTML en una clase?

con PHP en la vista lo que vas a hacer básicamente es controlar el flujo de información y hasta cierto punto detectar "eventos" si es que se puede llamar así, que se reduce a:

el usuario ha pulsado este botón y ha generado estos valores.

por lo tanto yo veo que poner HTML en clases es rizar el rizo.
__________________
Ayúdame a hacerlo por mi mismo.
  #13 (permalink)  
Antiguo 28/10/2013, 13:37
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 9 años, 9 meses
Puntos: 1
Respuesta: Mostrar HTML pero sin embeber ni mezclar PHP con HTML

Cita:
Iniciado por Fernand0 Ver Mensaje
podrias utilizar otros 2 archivos (cambias el codigo de la Class Index por 2 include)... logged.php (muestra la data del usuario logueado) y loginForm.php (muestra el $form) y asi se volveria mas escalable de paso...

podrias incluso en otra parte del sitio (ya que no siempre uno se loguea en index.php, bueno es una opcion que muchos sitios ofrecen) simplemente poner un popup en JS o algo asi (te tiro una idea) y podrias utilizar loginForm.php en el "pop-up" para que se loguee sin necesidad de ir a index.php

saludos
Entiendo, lo q pasa q yo quiero evitar tener archivos sueltos y q el usuario haga esto misitio.com/logged.php y con eso tambien quiero evitar llenar de if(isset($_SESSION...)) todos los archivos, entonces no me imagino como puedo utilizar eso haciendo clases...

En realidad no me imagino como ordenar un poco mas el tema de mostrar los datos del usuario sin usar esas etiquetas...

Para mostrar el form puedo hacer otra clase abstracta y listo, hago new form y queda mas prolijo
  #14 (permalink)  
Antiguo 28/10/2013, 15:38
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 926
Antigüedad: 12 años, 8 meses
Puntos: 269
Respuesta: Mostrar HTML pero sin embeber ni mezclar PHP con HTML

Cita:
Iniciado por reborn Ver Mensaje
Entiendo, lo q pasa q yo quiero evitar tener archivos sueltos y q el usuario haga esto misitio.com/logged.php y con eso tambien quiero evitar llenar de if(isset($_SESSION...)) todos los archivos, entonces no me imagino como puedo utilizar eso haciendo clases...

En realidad no me imagino como ordenar un poco mas el tema de mostrar los datos del usuario sin usar esas etiquetas...

Para mostrar el form puedo hacer otra clase abstracta y listo, hago new form y queda mas prolijo
Evitar lo que un usuario pueda cargar un fichero de tu web, que tu no quieres que sea accesible, es una cuestion alejada de que el html se genere desde clases (estoy de acuerdo con guardarmicorreo en que no es una buena opcion).
Si algo no debe ser accedido directamente...deberia estar fuera del DocumentRoot.Si te sirve de referencia, mis proyectos definen un PROJECTPATH y un WEBPATH, que es PROJECTPATH."/html".Lo que es visible por http es lo que hay en WEBPATH.Y normalmente no son mas de 2 o 3 puntos de entrada.
  #15 (permalink)  
Antiguo 28/10/2013, 15:51
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 9 años, 9 meses
Puntos: 1
Respuesta: Mostrar HTML pero sin embeber ni mezclar PHP con HTML

Cita:
Iniciado por dashtrash Ver Mensaje
Evitar lo que un usuario pueda cargar un fichero de tu web, que tu no quieres que sea accesible, es una cuestion alejada de que el html se genere desde clases (estoy de acuerdo con guardarmicorreo en que no es una buena opcion).
Si algo no debe ser accedido directamente...deberia estar fuera del DocumentRoot.Si te sirve de referencia, mis proyectos definen un PROJECTPATH y un WEBPATH, que es PROJECTPATH."/html".Lo que es visible por http es lo que hay en WEBPATH.Y normalmente no son mas de 2 o 3 puntos de entrada.
Entiendo pero no manejo eso todavia. Recien estoy practicando poo, lo entiendo pero me hacen falta horas y horas de sentarme a codificar.

Esta noche subo el ejemplo q estoy haciendo para q se vea y explico lo q hice en este mismo post. Me gustaria q lo vieran, eso si, no pidan diseño y esas cosas, solo lo basico.

Saludos

Etiquetas: embeber, html, mezclar, registro, usuarios
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 19:13.