LinkTo

De Sydonie

Création de lien interne à l'application

La fonction linkTo peut être appelé avec les arguments suivants :

string linkTo(mixed $classNameOrKeyOrInstanceOrAlias0rId, string $actionName, array $options)
  • $classNameOrKeyOrInstanceOrAlias0rId : un nom complet de classe, une instance d'une classe, un id, un alias ou une clé représentant une classe (définies dans le congif_keys de l'application).
  • $actionName : l'action à réaliser. facultatif. Si cet argument est absent, ou égal à ou null, ce sera l'action par défaut de la classe ou de l'instance qui sera utilisé (celle-ci est définie dans le actions.xml)
  • $options : tableau d'options permettant de préciser l'url
    • $options['textOk'] : code du label à utiliser à la place de celui définie par le nom de l'action
    • $options['textKo'] : texte à afficher si l'action est interdite pour l'utilisateur
    • $options['lang'] : langue du label à utiliser
    • $options['urlComplement'] : complément à l'url de base dépendant de l'objet et de l'action
    • $options['tagAttribute'] : complément attribué à la balise <a> (par exemple, des id ou des class pour l'usage des feuilles de style)

Premiers pas

L'exemple suivant permet de créer un lien vers l'action "view" de l'objet $toto :

 $link = linkTo($toto, 'view');

Pour obtenir un lien vers une action de classe, on indique la clés de cette classe en premier paramètre. (on peut indiquer le nom complet de la classe, mais c'est à déconseiller)

  $link = linkTo('image', 'listItems');


Lorsque l'utilisateur a le droit de voir l'objet $toto, un fragment html ayant la forme suivante sera retourné :

<a href="[...]/toto/view">Voir objet toto</a>

La chaîne "Voir objet toto" est récupérée en fonction des labels disponibles pour la classe toto.

Si l'utilisateur n'a pas les droits, la chaîne indiquée dans textKO sera retournée (par défaut une chaine vide).

Exploiter les labels liés aux actions de toto

Si des labels ont été renseignés pour la classe toto, il est possible de les exploiter lors de la création du lien. Par exemple, l'action "view" de toto possède deux labels, un en français ("voir objet toto") et un en anglais ("view toto object") Il est possible de demander explicitement l'affichage d'un de ces labels en utilisant l'attribut "lang" du tableau d'options $options

 $options = array(
   'lang' = 'fr'
 );
 $link = linkTo($toto, 'view', $options);

Si le label n'existe pas dans la langue demandée, alors le label fournit dépendra de la langue d'interface du site et de la langue du navigateur (voir les labels pour plus de détails)

Avec un texte si l'on a pas le droit d'effectuer l'action

L'exemple suivant fera la même chose que le précédent, excepté le fait que "Pas possible de voir toto" sera retourné si l'on a pas le droit de voir $toto, et forcera l'affichage "Voir toto" si jamais l'action est possible.

 $options = array(
   'textOk' = 'Voir toto',
   'textKo' = 'Pas possible de voir toto'
 );
 $link = linkTo($toto, 'view', $options);

Avec des arguments supplémentaires dans l'url

Maintenant, on veut qu'à l'url du lien soit ajouté un attribut "get", ici "?titi=2" :

 $options = array(
   'lang' = 'fr',
   'urlComplement' = array('GET'=>array('titi'=>2))
 );
 $link = linkTo($toto, 'view', $options);

Ou encore, lorsque l'on veut forcer la page à être en français :

 $options = array(
   'lang' = 'fr',
   'urlComplement' = array('path'=>'lang_fr')
 );
 $link = linkTo($toto, 'view', $options);

Les deux à la fois? Pas de soucis :

 $options = array(
   'lang' = 'fr',
   'urlComplement' = array('GET'=> array('titi'=>2), 'path'=> 'lang_fr')
 );
 $link = linkTo($toto, 'view', $options);

Avec des tags supplémentaires dans la balise <a>

Pour ajouter les tags dans la balise <a> produite, (ici class="totoLink") :

 $options = array(
   'lang' = 'fr',
   'urlComplement' = array('GET'=> array('titi'=>2), 'path'=> 'lang_fr'),
   'tagAttributes' = array('class'=>'totoLink', 'id'=>'monLien')
 );
 $link = linkTo($toto, 'view', $options);

Cela aura pour effet de produire le lien suivant (si l'on a le droit de voir toto):

<a href="[...]/toto/view?titi=2" class="totoLink" id="monLien">Voir objet toto</a>

Ou le texte suivant, si l'on a pas le droit de voir toto :

Pas possible de voir toto

L'argument optionnel $urlComplement

L'argument optionnel "$options['urlComplement'] est un tableau associatif qui peut prendre ses clés/valeurs dans le tableau suivant :

Tableau des paramètres optionnelles acceptées par la fonction
Clé Type Valeur
GET array un tableau associatif clés/valeurs des arguments GET à passer à l'action
POST array un tableau associatif clés/valeurs des arguments POST à passer à l'action
format string le format de sortie désiré
terminal string le type de terminal en usage
path string le chemin demandé
language string le code de la langue demandé (ISO 2 caractères)