2009-02-09 8 views

risposta

71

si può usare un heredoc, che supporta l'interpolazione variabile, facendo sembrare abbastanza pulito:

function TestBlockHTML ($replStr) { 
return <<<HTML 
    <html> 
    <body><h1>{$replStr}</h1> 
    </body> 
    </html> 
HTML; 
} 

Tuttavia, prestate molta attenzione all'avviso nel manuale: la linea di chiusura non deve contenere spazi bianchi, quindi non può essere rientrata.

+2

Anche l'identificativo <<< HTML heredoc non deve essere rientrato, cioè se non ha qualcosa come "return" di fronte ad esso. –

+10

può essere rientrato quanto vuoi, ma dovrebbe avere una nuova riga subito dopo l'identificatore. –

+0

È possibile evitare le parentesi se il var non è in un array:

$ replStr

o

{$ array [ 'var]}

WalterV

54

Sì, c'è: è possibile acquisire il testo echo ed utilizzando ob_start:

<?php function TestBlockHTML ($replStr) { ob_start(); ?> 
    <html> 
    <body><h1> <?php echo ($replStr) ?> </h1> 
    </html> 
<?php 
    return ob_get_clean(); 
} ?> 
+0

parole Esattamente, questa sintassi modo viene evidenziata e chiave sono colorati come se fossero normali HTML, oltre a essere contenuti in una stringa. Sicuramente una risposta migliore per la manutenibilità, che dovrebbe sempre arrivare prima –

+0

Perché dovresti usare il buffer di output quando questo sembra funzionare correttamente? ' \t

\t

Lorem ipsum dolar

' – Joren

+1

@Joren Perché questo è esplicitamente ciò che l'OP non vuole. –

5

Creare un file modello e utilizzare un motore di template per leggere/aggiornare il file. Aumenterà la manutenibilità del codice in futuro così come la visualizzazione separata dalla logica.

Un esempio utilizzando Smarty:

Template File

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head><title>{$title}</title></head> 
<body>{$string}</body> 
</html> 

Codice

function TestBlockHTML(){ 
    $smarty = new Smarty(); 
    $smarty->assign('title', 'My Title'); 
    $smarty->assign('string', $replStr); 
    return $smarty->render('template.tpl'); 
} 
14

Questa può essere una soluzione abbozzato, e mi farebbe piacere sapere se qualcuno di puntamento questa è una cattiva idea, dal momento che non è un uso standard delle funzioni. Ho avuto un certo successo ottenendo HTML da una funzione PHP senza costruire il valore restituito come una stringa con il seguente:

function noStrings() { 
    echo ''?> 
     <div>[Whatever HTML you want]</div> 
    <?php; 
} 

Il giusto 'Chiamata' la funzione:

noStrings(); 

E sarà output:

<div>[Whatever HTML you want]</div> 

Utilizzando questo metodo, è possibile definire anche variabili PHP all'interno della funzione e richiamarle all'interno dell'HTML.

+0

/mindblown può spiegare il motivo per cui questo funziona quando tutto il resto non è riuscito? –

+2

funziona senza 'echo', solo'?> Html vladkras

2

Un altro modo per farlo è è quello di utilizzare file_get_contents() e avere una pagina di template HTML

modello di pagina

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head><title>$title</title></head> 
<body>$content</body> 
</html> 

funzione PHP

function YOURFUNCTIONNAME($url){ 

$html_string = file_get_contents($url); 
return $html_string; 

} 
Problemi correlati