2013-05-17 10 views
7

C'è un modo semplice come mettere un tag HTML raw per etichettare? Ho questo:laravel 4: Come inserire il codice HTML non elaborato da etichettare?

{{ Form::label('firstName', 'First name <em>*</em>', array('class' => 'input_tag')) }} 

e produce:

<label class="input_tag" for="firstName">First Name &lt;em&gt;*&lt;/em&gt;</label> 

MA tag EM non viene interpretata come dovrebbe essere. Quello che voglio è:

<label class="input_tag" for="firstName">First Name <em>*</em></label> 
+0

Quale dovrebbe essere l'output HTML corretto? –

+0

Questo è l'ingresso HTML corretto ma sul sito vicino all'input è "Nome *" non "Nome *" –

+1

Nota, l'HTML prodotto è in realtà codificato con entità: ' 'e non del tutto come sopra indicato. – Jason

risposta

10

Utilizzando sprintf in un macro è molto più veloce di redecoding:

Form::macro('rawLabel', function($name, $value = null, $options = array()) 
{ 
    $label = Form::label($name, '%s', $options); 

    return sprintf($label, $value); 
}); 
+4

Se ne hai bisogno solo una volta e vuoi una soluzione facile e veloce, puoi farlo anche in linea, ad es. '{{sprintf (Form :: label ('tncs', '% s', array ('class' => 'control-label tncs-label')), 'Sono d'accordo con lo terms and conditions')}}' – neilcrookes

+0

Sì , che funzionerebbe, ma anche per 1 usare le sue soluzioni è ancora meglio estrarlo. È brutto e difficile da capire. –

+0

Dove dovrebbe essere la posizione appropriata per questo "widget" se voglio usarlo in più viste? Preferirei includerla solo una volta, non ogni volta che ne avrò bisogno. –

-1

Got it, che sta utilizzando la funzione di supporto e() che utilizza htmlentities() per formattare le etichette e questo sta convertendo il tag a &amp;lt;em&amp;gt;*&amp;lt;/em&amp;gt;.

La rapida e (molto) fix sporco è quello di aggiungere questo alla vostra start.php o qualche altro posto prima che la prima chiamata a Helpers.php:

function e($value) { return $value; } 

Ma questo tutt'altro che ideale.

-2

Credo che l'etichetta Form :: ($ name, $ value, $ attributes, $ escape_html) prenda un quarto parametro che indica se non deve uscire da html. È impostato su true. Quindi se il risultato previsto è un corsivo *, passare falso come quarto parametro.

+1

Guardando la documentazione dell'API per Form :: label, possiamo vedere che non esiste un quarto parametro per uscire da html. http://laravel.com/api/source-class-Illuminate.Html.FormBuilder.html#171-188 – ericrjones1

1

È possibile creare una funzione di supporto (macro), proprio come:

HTML::macro('raw', function($htmlbuilder) { 
    return htmlspecialchars_decode($htmlbuilder); 
}); 

nella vista:

{{ HTML::raw(Form::label('input_firstname', 'Prénom <sup>*</sup>')) }} 
0

Per gli ingressi richiesti, invece di cercare di aggiungere HTML nell'etichetta, aggiungo una classe, 'required-input' (o qualcosa).

allora ho la seguente regola CSS

label.required-input:before { 
    content: ' * '; 
    color: #f00; 
} 

Questo potrebbe funzionare a meno che non si ha bisogno di avere la <em> * </em > per gli screen reader. Ma puoi ancora aggiungere il flag richiesto sull'input.

11

uso HTML :: decode():

http://forums.laravel.io/viewtopic.php?id=1772

{{ HTML::decode(Form::label('firstName', 'First name <em>*</em>', array('class' => 'input_tag'))) }} 
+2

Funzionerebbe in questo specifico esempio, ma tieni presente che potrebbero esserci altre entità nell'elemento etichetta risultante che non vuoi decodificato. – Jason

+0

Questo ha funzionato come un fascino. Potresti aver bisogno di usare {!! !!} invece del {{ }}. Grazie per il consiglio! – cbloss793

Problemi correlati