2013-06-06 17 views
18

Sto usando il CakePHP 2.2 e la necessità di scrivere codice seguente -Come scrivere tag HTML in "link" CakePHP

<a data-original-title=" Edit " data-placement="left" rel="tooltip" href="/admin/static_pages/edit/1" class="btn btn-small"> 
    <i class="gicon-edit"></i> 
</a> 

Ho scritto il seguente codice in CakePHP -

<?php echo $this->Html->link($this->Html->tag('i', '', array('class' => 'gicon-edit')),array('controller'=>'static_pages','action'=>'edit',$page['StaticPage']['id']), array('rel'=>'tooltip','data-placement'=>'left','data-original-title'=>'Edit','class'=>'btn btn-small')); ?> 

e ottenere il seguente risultato -

<a class="btn btn-small" data-original-title="Edit" data-placement="left" rel="tooltip" href="/erudites/admin/static_pages/edit/1">&lt;i class="gicon-edit"&gt;&lt;/i&gt;</a> 

Come deve essere scritto il codice HTML corretto?

risposta

34

Spiegazione:

Aggiunta l'opzione 'escape'=>false al vostro collegamento lo rende così non tenta di tradurre ('fuga') tutti i tuoi personaggi html.

Inoltre, raramente (se MAI) trovo utile utilizzare CakePHP ->tag(). Basta scrivere il tag - molto più facile (e più efficiente).

codice Esempio:

echo $this->Html->link(
    '<i class="gicon-edit"></i>', 
    array(
     'controller'=>'static_pages', 
     'action'=>'edit', 
     $page['StaticPage']['id'] 
    ), 
    array(
     'rel'     => 'tooltip', 
     'data-placement'  => 'left', 
     'data-original-title' => 'Edit', 
     'class'    => 'btn btn-small', 
     'escape'    => false //NOTICE THIS LINE *************** 
    ) 
); 

dettagli qui: http://book.cakephp.org/2.0/en/core-libraries/helpers/html.html#HtmlHelper::link

PS Ovviamente il codice potrebbe essere un 1-liner, se si preferisce - appena rotto in su qui per facilitare la lettura.

+2

non solo più facile, ma più efficiente – yossi

+0

@yossi - buona punto. Yah: è eccessivo in molti modi. – Dave

+0

Ciao Dave, ho applicato il codice di u suggerito, si corre ma darmi un tag in più "" come il seguente -

1

Si potrebbe trovare più facile da gestire questo tipo di collegamento mediante il metodo url del helper HTML: -

<a data-original-title=" Edit " data-placement="left" rel="tooltip" href="<?php echo $this->Html->url(array('controller'=>'static_pages','action'=>'edit',$page['StaticPage']['id'])) ?>" class="btn btn-small"> 
    <i class="gicon-edit"></i> 
</a> 

Questo ancora correttamente percorsi l'URL, ma può rendere la scrittura tag di ancoraggio esattamente come si desidera molto più semplice.

Personalmente prendo questo approccio quando non desidero solo un semplice testo in un collegamento in quanto può essere più leggibile rispetto all'utilizzo del metodo link con 'escape'=>false.

+0

L'unico inconveniente è la mancanza di personalizzazione in seguito. Come un esempio casuale, puoi estendere l'helper per dare a tutti i link che sono andati al controller "post" una classe specifica per cambiare il loro colore ... ecc. Ecc.Usando l'helper, lasci tutte le cose divertenti aperte/disponibili – Dave

+0

Vero. Anche se non è qualcosa che ho sempre avuto bisogno di raggiungere personalmente. Preferisco questo tipo di comportamento nei miei modelli. – drmonkeyninja

1

Ampliando la risposta di drmonkeyninja:

Per CakePHP 3.X si usa:

<a data-original-title=" Edit " data-placement="left" rel="tooltip" href="<?php echo $this->Url->build(array('controller'=>'static_pages','action'=>'edit',$page['StaticPage']['id'])) ?>" class="btn btn-small"> 
    <i class="gicon-edit"></i> 
</a> 

($this->Url->build invece di $this->Html->url)