Strutturare un sito php

La tecnica delle inclusioni lato server (include) è una delle più utilizzate per strutturare i siti e le applicazioni PHP.
L'obiettivo è come sempre evitare codice duplicato nelle pagine e la possibilità di modificare in un colpo solo elementi comuni in tutte le pagine, come l'intestazione e il footer.

A differenza dei template di DreamWeaver ma in modo analogo alle Master Pages di Asp.Net si parla di inclusioni che vengono elaborate dal server web prima di restituire la pagina html finale.

Creare la struttura delle cartelle

Per organizzare bene un sito si comincia creando le sottocartelle che conterranno i vari tipi di file.
Ecco un esempio: prendetelo come suggerimento, poi ognuno organizza le cartelle nel modo in cui preferisce.

  • images: contiene immagini generiche del sito; creare sottocartelle opportune es. images\articoli per ogni sezione del sito
  • functions: cartella per le funzioni e le librerie php
  • jsfunctions: raggruppa le funzioni e le librerie javascript (file .js)
  • styles: usata per i fogli di stile (.css)
  • config: file di configurazione (es. file con i dati per l'accesso al data base, variabili di configurazione)
  • include: file di inclusione. In questo esempio ho deciso di lasciare i file nella cartella root del sito anteponendo un underscore (_) in modo da distinguerli dai file che vengono richiesti direttamente dal browser.

Le inclusioni lato server

Per includere un file lato server in PHP si usa l'istruzione include (ne esistono anche altre il cui il funzionamento è simile).

<?php include 'pagina.php'; ?>

Quando il parser php incontra questa istruzione interrompe l'analisi della pagina attuale, elabora quella inclusa per poi tornare alla pagina iniziale contenente l'istruzione di inclusione.
I file inclusi possono contenere semplice testo e html ma anche codice php.

I file .php

I seguenti esempi riprendono il codice usato per creare un Layout a due colonne adattandolo alla struttura del sito in PHP.

Sito a pagina unica

Spesso i siti php sono composti da un'unica pagina php che in base a un parametro passato in query string capisce quale contenuto mostrare, leggendolo da un data base. Si usa poi la tecnica dell'Url Rewriting per dare all''utente e ai motori di ricerca l'impressione che ci sia una pagina web per ogni contenuto.

Il file index.php contiene la struttura della pagina (div - html) e include l'intestazione, il menu laterale, la pagina dei contenuti veri e propri e il footer.

<?php include 'config/config.php'; ?>
<?php include 'functions/utilities.php'; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<title>Layout a due colonne - www.dev-oclock.com</title>
		<link rel="stylesheet" type="text/css" href="styles/styles.css" />
		<script src="/jsfunctions/functions.js" language="javascript" type="text/javascript"></script>
	</head>
	<body>
		<!-- Contenitore dell'intero sito -->
		<div id="PageWrapper">
			<div id="Header"><?php include '_header.php'; ?></div>
			
			<!-- Contenitore dei menu laterali e del contenuto centrale -->
			<div id="Menu-Content-Wrap">
				<div id="Menu-Left">
					<?php include '_side-menu.php'; ?>
				</div>
				<div id="MainContent">
					<p>Contenuto pagina</p>
					<p>Strutturare sito PHP</p>  
					<?php // include '_content-page.php'; ?>
				</div>
			</div>
			<div id="Footer"><?php include '_footer.php'; ?></div>
		</div>
	</body>
</html>

_side-menu.php

<p>Menu laterale</p>
<ul>
	<li>Menu Item 1</li>
	<li>Menu Item 2</li>
	<li>Menu Item 3</li>
	<li>Menu Item 4</li>
</ul>

_footer.php

--- <a href="http://www.dev-oclock.com">Dev-oClock.com</a> &reg;&nbsp;---

 

Sito a più pagine

Una variante consiste nel creare davvero una pagina per ogni contenuto (es. una per ogni sezione del sito) e riporre in file esterni tutto il codice html-div che definisce la struttura del sito.

In questo caso il file index.php richiama le pagine _open.php e _close.php rispettivamente prima e dopo il contenuto della pagina. In alternativa si potrebbero usare due funzioni che restituiscono html.

<?php include '_open.php'; ?>
<p>Contenuto pagina</p>
<?php include '_close.php'; ?>

_open.php

<?php include 'config/config.php'; ?>
<?php include 'functions/utilities.php'; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<title>Layout a due colonne - www.dev-oclock.com</title>
		<link rel="stylesheet" type="text/css" href="styles/styles.css" />
		<script src="/jsfunctions/functions.js" language="javascript" type="text/javascript"></script>
	</head>
	<body>
		<!-- Contenitore dell'intero sito -->
		<div id="PageWrapper">
			<div id="Header"><?php include '_header.php'; ?></div>
		  	<!-- Contenitore dei menu laterali e del contenuto centrale -->
		  	<div id="Menu-Content-Wrap">
				<div id="Menu-Left">
					<?php include '_side-menu.php'; ?>
				</div>
				<div id="MainContent">

_close.php

				</div>
			</div>
			<div id="Footer"><?php include '_footer.php'; ?></div>
		</div>
	</body>
</html>

Autore: Sergio Roberto Boarina