web-dev-qa-db-fra.com

Comment écrire une balise HTML dans le "lien" CakePHP

J'utilise CakePHP 2.2 et j'ai besoin d'écrire le code suivant -

<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>

J'ai écrit le code suivant dans 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'));  ?>

et obtenir le résultat suivant -

<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>

Comment le bon code HTML doit-il être écrit?

20
Mohit Tripathi

Explication:

L'ajout de l'option 'escape'=>false À votre lien fait en sorte qu'il n'essaie pas de traduire ('échapper') tous vos caractères html.

De plus, je trouve rarement (si JAMAIS) utile d'utiliser ->tag() de CakePHP. Écrivez simplement la balise - beaucoup plus facile (et plus efficace).

Exemple de code:

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 ***************
    )
);

Détails ici: http://book.cakephp.org/2.0/en/core-libraries/helpers/html.html#HtmlHelper::link

PS De toute évidence, le code pourrait être à une ligne si vous préférez - il suffit de le séparer ici pour en faciliter la lecture.

36
Dave

Vous pourriez trouver plus facile de gérer ce type de lien en utilisant la méthode url de l'assistant 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>

Cela achemine toujours correctement l'URL, mais peut rendre l'écriture de la balise d'ancrage exactement comme vous le souhaitez beaucoup plus simple.

Personnellement, je prends cette approche lorsque je ne veux pas simplement du texte simple dans un lien car il peut être plus lisible que d'utiliser la méthode link avec 'escape'=>false.

2
drmonkeyninja

Élargir la réponse de drmonkeyninja:

Pour CakePHP 3.X, vous utiliseriez:

<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 au lieu de $this->Html->url)

2
Chaim