Motore di modelli PHP personalizzato

4

Ho sviluppato un motore di template PHP personalizzato per soddisfare le mie esigenze e anche per avere un po 'più di pratica con PHP.

Quello che ho fatto è stato creare una classe Template che riceva semplicemente come parametro costruttore un percorso per un file modello e una stringa che dovrebbe essere il segnaposto per il contenuto delle pagine. In tal caso, il file modello è un file HTML con alcuni segnaposti scritti come [segnaposto]. Questi saranno riempiti con contenuti reali da un'altra classe. Ad esempio, [titolo] dovrebbe essere riempito con il titolo, [il contenuto] con il contenuto della pagina selezionata e così via.

Ho creato anche una classe Page che riceve come parametro costruttore la directory delle pagine e quindi ha metodi per impostare il nome del file che deve usare (questo è compilato come ci piace durante l'inizializzazione, quando si lavora con l'amichevole L'URL è il modo più comune in cui utilizzo questa impostazione come prima parte dell'URL) e i metodi per impostare più dati come coppie di stringa segnaposto e contenuto reale.

Il mio unico problema è come trattare con titoli e meta tag. Per ogni pagina c'è un titolo e una collezione di meta tag. L'unico modo per gestirlo era creare in file diversi un array con titoli e un array con meta tag. Entrambi ricevono come indice il nome del file di paging. Quindi per esempio $ titoli ["home"] dovrebbe essere il titolo della home page e $ meta_tags ["home"] dovrebbe essere il codice html per i meta tag della home page.

Il problema è che non appena ci sono molte pagine questo avrà un costo di memoria non necessario: il sistema caricherà per ogni richiesta tutti i titoli e tutti i meta tag, mentre dovrà caricare solo quello richiesto. Ho pensato di usare il database, ma sembra uccidere una formica con una bomba atomica. Quindi la cosa migliore che ho pensato era XML.

Ora, qual è la soluzione migliore per questo tipo di situazione? Usa XML, usa un database MySQL o qualche altro metodo?

Come ho detto, so che si raccomanda di utilizzare i motori di template che sono già in circolazione dal momento che sono stati testati un sacco di volte, sono già stabili e così via, ma sto lottando con cose come un modo per ottenere più pratica di sviluppo con PHP.

Grazie in anticipo per l'aiuto. Inoltre, non pensavo che fosse necessario per postare alcun codice che ho scritto, ma se una parte del codice ti sarà d'aiuto, per favore chiedi e lo posterò.

    
posta user1620696 31.07.2013 - 15:59
fonte

3 risposte

1

Non sono sicuro di aver capito correttamente il problema, ma mi sembra che Caricamento dei dati sia il tuo problema, non altro collegato al tuo motore di template, giusto?

Se sì, le mie domande sono, dove sono gli altri contenuti della tua applicazione? Intendo dov'è il contenuto della pagina? Metti i meta tag, i titoli, ecc. Esattamente dove hai gli altri dati.

Se stai memorizzando il contenuto della pagina nel database, aggiungi questi meta tag (qualunque) al tuo database, caricali quando carichi il contenuto della pagina e poi li passi semplicemente al tuo motore di template.

Se hai pagine statiche, aggiungi qualcosa di simile a ciascuna pagina e in seguito puoi recuperarla e passarla al tuo motore di template:

<?php
/* Sample.php */
$title = 'Sample Page';
$meta = 'whatever';
?>
<!-- Page Content -->
<h3>Welcome!</h3>
...

P.S. A proposito, una tale serie di titoli e meta tag non è un problema per un server web reale.

    
risposta data 31.07.2013 - 16:40
fonte
3

L'idea alla base dell'utilizzo di modelli (e di un motore di template) consiste nel separare il codice (dinamico) di produzione del contenuto dal codice responsabile dell'aspetto visivo della pagina. Affinché questa separazione abbia esito positivo, il codice dell'applicazione non deve essere consapevole del fatto che titolo e meta tag vanno nell'elemento HTML <head> , mentre il resto del contenuto va nell'elemento <body> . In effetti, l'applicazione non dovrebbe nemmeno preoccuparsi se i modelli producono codice HTML o qualcosa di completamente diverso.

Per facilitare la separazione tra applicazione e modello, il motore di template dovrebbe fornire un meccanismo in cui l'applicazione può fornire contenuto sostitutivo senza sapere dove si verificherà il segnaposto per quella sostituzione nei modelli. Ciò consente inoltre di ristrutturare completamente i modelli senza alcuna modifica al codice dell'applicazione.

    
risposta data 31.07.2013 - 18:36
fonte
0

Non posso darti un esempio di codice specifico per il tuo problema ma la direzione generale per il tuo problema. Se si utilizza un motore di template (auto programmato o meno), dovrebbe avere la capacità di analizzare i modelli in base alle chiamate di metodo e la possibilità di assegnare variabili (cercare Smarty).

Esempio:

public function display($templateName, $sendHeaders = true) {
   $this->compile($templateName); // compiles the template language into php script

   if ($sendHeaders) //send Headers

   include($this->getCompiledFilename($templateName));
   exit;
}

public function assign($name, $value) {
    $this->v[$name] = $value;
}

Detto questo, usi semplicemente le variabili nel modello per i metatag e il controller per la pagina visualizzata assegna prima le variabili e poi visualizza il modello (tramite i metodi del motore di template).

Un esempio per un modello (puoi combinare più modelli) sarebbe:

{include file='header'}
{if $var1}
    <p>This is incredible.</p>
{/if}
{include file='footer'}

Spero di averti aiutato.

    
risposta data 31.07.2013 - 16:35
fonte

Leggi altre domande sui tag