2011-06-03 23 views
8

Estoy trabajando en un sitio web con otros 2 desarrolladores. Solo soy responsable de crear las vistas.Creación de vistas en PHP: mejor práctica

Los datos están disponibles en un objeto, y tengo getters para leer los datos y luego crear páginas XHTML.

¿Cuál es la mejor práctica para hacer esto, sin usar ningún motor de plantillas?

Muchas gracias.

+0

¿por qué no quieres utilizar ningún lenguaje de plantilla? – confiq

+6

PHP se puede utilizar como un lenguaje de plantillas en sí mismo, para esto es posible que necesite etiquetas cortas activadas (no necesariamente, pero es menos escribir en ese momento). – kapa

+0

@baz: Claro. También puede escribir excelentes sitios web en Assembler. – NikiC

Respuesta

11

Si no desea utilizar un motor de plantillas, puede hacer uso de las capacidades básicas de creación de plantillas de PHP.

En realidad, solo debe escribir el código HTML, y cada vez que necesite generar el valor de una variable, abra una parte de PHP con <?php y ciérrela con ?>. Asumiré para los ejemplos que $data es su objeto de datos.

Por ejemplo:

<div id="fos"><?php echo $data->getWhatever(); ?></div> 

Tenga en cuenta que, todas las estructuras de control PHP (como if, foreach, while, etc.) también tienen una sintaxis que se puede utilizar para crear plantillas. Puede buscarlos en sus páginas de manual de PHP.

Por ejemplo:

<div id="fos2"> 
<?php if ($data->getAnother() > 0) : ?> 
    <span>X</span> 
<?php else : ?> 
    <span>Y</span> 
<?php endif; ?> 
</div> 

Si sabe que el uso de la etiqueta corta será habilitado en el servidor, por simplicidad puede utilizarlos también (no se aconseja en XML y XHTML). Con las etiquetas cortas, puede simplemente abrir su parte PHP con <? y cerrarla con ?>. Además, <?=$var?> es una forma abreviada de hacer eco de algo.

Primer ejemplo con las etiquetas cortas:

<div id="fos"><?=$data->getWhatever()?></div> 

Usted debe ser consciente de dónde se utiliza saltos de línea y espacios embargo. El navegador recibirá el mismo texto que escribe (excepto las partes de PHP). Lo que quiero decir con esto:

Escribir este código:

<?php 
    echo '<img src="x.jpg" alt="" />'; 
    echo '<img src="y.jpg" alt="" />'; 
?> 

no es equivalente a la siguiente:

<img src="x.jpg" alt="" /> 
<img src="y.jpg" alt="" /> 

Debido a que en el segundo tiene una real \n entre las img elementos, que el navegador traducirá como un carácter de espacio y se mostrará como un espacio real entre las imágenes si están en línea.

+0

Esta es la forma en que debería hacerse en mi opinión. De hecho, el uso de los sistemas de plantillas está desactualizado para ser honesto. La caída de un sistema de plantillas es que Sí, lo escribió y sabe cómo trabajarlo, pero ¿qué sucede cuando contrata a un nuevo desarrollador? Ahora tiene que leer su código Y aprender el sistema de su plantilla. –

+0

@Dalton Existen sistemas de plantillas generalizados como Smarty. – kapa

+0

¿Por qué las etiquetas cortas no se recomiendan en XHTML? – binaryLV

0

utilizar un archivo separado para leer los datos:

<?php 
if ($foo == False) 
    { 
    $bar = 1; 
    } 
else 
    { 
    $bar = 0; 
    } 
?> 

después hacer referencia al estado resultante en el archivo HTML:

require 'logic.php'; 

<html> 
    <!--...--> 
    <input type="text" value="<?php echo $bar; ?>" > //Logic is separated from markup 
    <!--...--> 
</html> 
0

no sé que me sale realmente su pregunta.por lo que si mi respuesta no exaclty me gustaría a De borrada

esta clase creará simple vista

class View 
{ 

public function render($filename, $render_without_header_and_footer = false) 
{ 
    // page without header and footer, for whatever reason 
    if ($render_without_header_and_footer == true) { 
     require VIEWS_PATH . $filename . '.php'; 
    } else { 
     require VIEWS_PATH . '_templates/header.php'; 
     require VIEWS_PATH . $filename . '.php'; 
     require VIEWS_PATH . '_templates/footer.php'; 
    } 
} 


private function checkForActiveController($filename, $navigation_controller) 
{ 
    $split_filename = explode("/", $filename); 
    $active_controller = $split_filename[0]; 

    if ($active_controller == $navigation_controller) { 
     return true; 
    } 
    // default return 
    return false; 
} 

private function checkForActiveAction($filename, $navigation_action) 
{ 
    $split_filename = explode("/", $filename); 
    $active_action = $split_filename[1]; 

    if ($active_action == $navigation_action) { 
     return true; 
    } 
    // default return of not true 
    return false; 
} 

private function checkForActiveControllerAndAction($filename, $navigation_controller_and_action) 
{ 
    $split_filename = explode("/", $filename); 
    $active_controller = $split_filename[0]; 
    $active_action = $split_filename[1]; 

    $split_filename = explode("/", $navigation_controller_and_action); 
    $navigation_controller = $split_filename[0]; 
    $navigation_action = $split_filename[1]; 

    if ($active_controller == $navigation_controller AND $active_action == $navigation_action) { 
     return true; 
    } 
    // default return of not true 
    return false; 
} 
} 

Soo ahora puede crear sus plantillas y se puede llamar desde cualquier lugar al igual que

$this->view->my_data = "data"; 
$this->view->render('index/index'); 
// 

y en su index/index.php puede llamar a los datos $ this-> my_data;

Cuestiones relacionadas