# Curso PHP: Proyecto Bienes Raíces
## Código estático
Nuestro equipo de diseño nos ha pasado la página estática ya aprobada por el cliente, según los requerimientos recogidos por nuestros comeerciales esto es lo que debemos hacer:
- Un sitio Web para su negocio de propiedades inmobiliarias
- Mostrar casas en venta
- Se podrán crear/editar/borrar/actualizar propiedades desde un formulario
- Secciones informativas
- Formulario de contacto
Como ves algunas partes son estáticas y otras dinámicas, descargamos la página estática que nos pasan nuestros compañeros e investigamos a ver cómo podemos realizar las partes dinámicas.
Si abres el index.php directamente en el navegador verás que la página funciona perfectamente, tenemos los templates de cómo debe verse tanto el listado de propiedades como el despliegue de cada propiedad.
No tenemos ningún diseño de la base de datos ni del backend.
Empezamos la transformación...

## Pasamos el proyecto HTML a un proyecto PHP
Para ello copiamos todo el código a la carpeta htdocs de apache o xampp.
Si copiamos el proyecto en una carpeta de nombre "bienesraices" al poner en el navegador "localhost/bienesraices" debería funcionar la web sin problema. Es más...si cambiamos todos los archivos .html por .php debería seguir funcionando.
Compruébenlo.
## Se fliparon los compañeros
Si vemos la estructura vemos que los compañeros hicieron toda la web con gulp y tenemos un gulpfile.js con varias rutinas de optimización, además de la gestión del SASS y de optimización de imágenes. No nos preocupa, por ahora no lo vamos a tocar.
Lo que si podemos hacer es instalar el node/npm para tener todas las dependencias instaladas y que no nos dé ningún tipo de problema.
`npm i`
## Creando un Header
Se habrán dado cuenta de que los links de las cabeceras y del pie de página no funcionan ya que siguen apuntando a los .html, vamos a mejorar el código haciendo que todas las cabeceras y pie de páginas se puedan modificar más fácilmente gracias al PHP.
Creamos la carpeta includes/templates (nombre por convenio en php de las carpetas donde guardamos código a compartir por varios módulos).
Ahí creamos el archivo header.php y copiamos la cabecera del index.php quedando header.php como sigue:
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bienes Raices</title>
<link rel="stylesheet" href="build/css/app.css">
</head>
<body>
<header class="header inicio">
<div class="contenedor contenido-header">
<div class="barra">
<a href="/">
<img src="build/img/logo.svg" alt="Logotipo de Bienes Raices">
</a>
<div class="mobile-menu">
<img src="build/img/barras.svg" alt="icono menu responsive">
</div>
<div class="derecha">
<img class="dark-mode-boton" src="build/img/dark-mode.svg">
<nav class="navegacion">
<a href="nosotros.html">Nosotros</a>
<a href="anuncios.html">Anuncios</a>
<a href="blog.html">Blog</a>
<a href="contacto.html">Contacto</a>
</nav>
</div>
</div> <!--.barra-->
<h1>Venta de Casas y Departamentos Exclusivos de Lujo</h1>
</div>
</header>
```
Y sustituyendo todo este código por el siguiente en index.php y en todos los demás archivos:
```
<?php
include './includes/templates/header.php';
?>
```
Como ves ahora sólo modificando el header.php podemos modificar el header de todo el proyecto sólo modificando este. Modifica los enlaces para que funcione correctamente.
Seguimos teniendo un problema, el header del index.php es distinto al del resto del proyecto. Cómo lo solucionamos??
Repite el proceso con el footer.
## Crear funciones para los Templates y más estructura del código
Podemos ver que es buena idea tener todo lo que sea común a varias secciones de nuestra web en la carpeta includes para que el código sea más sostenible, de tal manera que para cambiar algo sólo tengamos que tocar en un solo archivo.
Vamos a preparar la estructura de parpetas con esta idea:

Como ves hemos creado una carpeta config, donde por lo pronto en un futuro introduciremos la configuración de la base de datos.
Los templates que ya hemos usado, un archivo con configuraciones generales de la aplicación app.php y otro con las funciones comunes a toda la aplicación funciones.php.
Vamos a generar en app.php algunas constantes del sistema:
```
<?php
define('TEMPLATES_URL',__DIR__.'\\templates');
define('FUNCIONES_URL', __DIR__.'funciones.php');
//es conveniente no cerrar el php en los archivos que se van a incluir.
```
Se está usando __DIR__ investiga por qué, y qué pasaría en el despliegue si no se usara esta supervariable.
En funciones.php creamos por lo pronto la siguiente función:
```
<?php
require 'app.php';
function incluirTemplate($nombre){
include TEMPLATES_URL."\\${nombre}.php";
}
```
?>