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