Secondo me dovresti rivedere bene i tipi di box...che senso ha mettere form, textarea o button?
Inoltre eviterei di mettere box che non sono "autosufficienti". mi spiego: il box menù, come quello articoli non hanno bisogno di altre informazioni. Articoli, ad esempio, prenderà gli ultimi articoli e li metterà nel box. Ma immagine o mappa? nella pagina dove crei il layout oltre a selezionare la posizione devi anche specificare quale immagine mettere, no?
Una volta che hai definito quali sono i box, potresti crearti le classi che li vanno a gestire.
Ad esempio, potresti farti la classe Menu che fa una query sul db, prende le voci del menù e crea l'html. quindi nel tuo codice andresti a scrivere
Codice PHP:
case 'Menu':
$menu = new Menu(); // nel costruttore leggi dal db le voci del menù
echo $menu->render($position);
// stampa l'html per il menù, $position è la posizione (header, sidebar, etc) in modo da
// visualizzarlo orizzontalmente o verticalmente
break;
e così via...
Nel caso di immagine, mappa o roba simile dovesti aggiungere un campo sulla tabella dove fai l'associazione box-pagina-posizione dove mettere il "contenuto". Nel caso di immagine l'url alla stessa. Quindi lo vai a richiamare
Codice PHP:
case 'Immagine':
echo '[img]'.$sol['box_content'].'[/img]';
// $sol['box_content'] contiente l'url dell'imagine
break;
Però, come ti ho detto, io eviterei di creare dei box così perchè sono difficili da gestire soprattutto se ne hai di eterogenei