Sto usando una serie di oggetti per memorizzare i dati per rendere una pagina.
Alcuni esempi del tipo di dati che ogni oggetto può contenere:
- Percorso file PHP per un include
- Percorso file CSS per i file CSS
- Meta dei dati della pagina
- Dati dell'elemento per costruire elementi della pagina
- Etc ...
Ho un file modello HTML che analizzo con PHP e sostituisco determinati tag nel modello con i dati memorizzati negli oggetti. Un tag modello assomiglia a:
<!-- @CMS;TYPE=TITLE !-->
<!-- @CMS;TYPE=CSS !-->
Questi tag possono anche avere più attributi:
<!-- @CMS;TYPE=JS-FILES;POS=TOP !-->
<!-- @CMS;TYPE=JS-FILES;POS=BOTTOM !-->
I tag sopra contengono una posizione e quindi puoi posizionare il tuo contenuto dello stesso tipo nella parte superiore o inferiore del modello.
Gli oggetti dati utilizzano tutti la stessa classe astratta e hanno la stessa funzione di rendering:
class PhpFragment extends FragmentBase {
public function render() {
//... render output for this type of data
}
}
class CssFragment extends FragmentBase {
public function render() {
//... render output for this type of data
}
}
class MetaFragment extends FragmentBase {
public function render() {
//... render output for this type of data
}
}
In questo modo posso utilizzare una funzione universale per eseguire il rendering di tutti gli oggetti, ignorando il tipo di dati che contiene.
La sfida
Ho bisogno di un modo per trovare rapidamente determinati oggetti all'interno dell'array. Quando raggiungo un determinato tag all'interno del modello, devo rendere i dati degli oggetti che corrispondono al tipo (e alla posizione se applicabile) di questo tag.
Nel mio progetto precedente ho usato un oggetto con molte proprietà di classe che contengono istanze di FragmentBase
, come:
class pageData {
protected $mCSS;
protected $mPHP;
protected $mJS;
protected $mMeta;
protected etc...
}
Ogni proprietà di classe conteneva un array di FragmentBase
di istanze di un determinato tipo di dati per recuperare i dati da.
Ma questo design non è molto facile da mantenere e non è molto flessibile. Inoltre, dato che l'oggetto che memorizzava i dati è universale, avevo bisogno di verificare il tipo di dati per poterlo visualizzare con la funzione corretta.
C'è un modo per cercare velocemente una serie di oggetti o dovrei limitarmi a usare pageData object
e memorizzare il mio fragment objects
in questo?