Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/03/2015, 19:15
Avatar de guardarmicorreo
guardarmicorreo
 
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años, 1 mes
Puntos: 84
Evitar que PHP envie el HTML antes de tiempo

Tengo un problema y que de momento la solución más pobre es embeber el HTML en string a una variable y devolver todo a la vez.

Retrocedo y comienzo desde el principio.

En mi framework personal el recorrido es el siguiente:

El usuario envia una petición GET al servidor: http://mi.direccion.com/variable/get/solicitada

Apache recibe esa petición y con el .htaccess indico que construya tres variables así:

Código:
module=variable, method=get, arguments=solicitada
Además con .htaccess también le indico que todas las peticiones vayan hacia el index.php, para que el usuario pueda obviar escribir index.php.

Con un controlador instacio al modelo y dependiendo de si el método y argumentos son indicados le paso el método y los argumentos.

El modelo instancia a otro controlador, pero en el core, que contiene las peticiones a la base de datos y todo lo que sea puramente back-end y también instancia al controlador del HTML, de manera que recibe los datos del core y del html y los retorna.

Es en este punto donde me topé con un problema a la hora de trabajar con AJAX.

Si las cabeceras del HTML (head, metas, etc.) las pongo en el index.php y en el body hago echo de lo que el usuario ha solicitado, funciona perfectamente.

Pero si hago una petición AJAX me encuentro con el problema de que la respuesta la mandará con las cabeceras HTML.

Así que probé a ver si construyendo (con el controlador del HTML) lo solicitado e incluso las cabeceras se solucionaba el problema, pero resulta que aún cuando no había echo en el index.php ni en los controladores, módulos, etc. las cabeceras se enviaban porque no estaban embebidas en PHP así

Código PHP:
Ver original
  1. function home($args=NULL){
  2. return '<p>'.$args['name'].'</p>';
  3. }

Sino que tenían este formato

Código PHP:
Ver original
  1. function home($args=NULL){
  2. <p><?php echo $args['name']; ?> </p>
  3. }

Cuando enbebí el PHP como el primer ejemplo, todo funcionaba perfecto y podía construir lo solicitado por el usuario con el orden que yo quería y meterlo en el cuerpo principal del HTML y retornarlo para mostrarlo con un echo.

El problema está en que esta forma es limitada porque no puedo entrecomillar foreach para recorrer un array y es muy lioso si quiero utilizar un condicional para mostrar una cosa que tenga dos opciones, por ejemplo

Código PHP:
Ver original
  1. ($args['message_sended']===FALSE)?'Mensaje no enviado':'Mensaje Enviado';

Y la cosa se complica si con el condicional se muestra un formulario o no.

Así que recurro a alguien que pueda orientarme en cómo es la mejor manera de poder mostrar o no HTML de manera controlada y huyendo de tener que hacer string el HTML y no limitarme en operaciones básicas que necesariamente tengo que hacer en el front-end y no en el back-end.

¿Alguien puede ayudarme?

Saludos.

P.D.: huyo de Smarty y otros, no lo veo necesario para mi, aunque sí uso otras herramientas como purecss.
__________________
Ayúdame a hacerlo por mi mismo.