Arrive pas a faire un truc tout simple

Par sylvain, il y a 12 ans


J'essai de faire un lien, mais avec cakephp il me rajoute tout le temps la base

http://www.mondomain.fr/contacts/www.unlienquelconque.com

au lieu de
http://www.unlienquelconque.com

j'utilise ceci.

<?php echo $this->Html->link($contact'Contact']'url'],$contact'Contact']'url'],false); ?>

comment faire pour retirer l'url de mon site qu'il prefixe automatiquement ?

12 réponses

Maenhyr, il y a 12 ans

Bonjour, 30s sur la doc de CakePHP m'ont permis à trouver la solution.

Je t'aide un peu, c'est dans le HtmlHelper qu'il faut chercher.

sylvain, il y a 12 ans

PFFF, me serait pas permis de poster sans avoir cherché.

J'ai trouvé un début de solution mais ca ne me satisfait pas.

<?php echo $this->Html->link($contact'Contact']'url'],'http://'.$contact'Contact']'url'], array('target' => '_blank')); ?>

Ca m'oblige en fait a verifier que l'url est saisi avec http, ou bien a la saisie j'ajoute le http ou je l'enleve selon les cas.

Maenhyr, il y a 12 ans

OK, voici la réponse à ton problème http://book.cakephp.org/2.0/fr/models/data-validation.html#Validation::url. On peut voir qu'il faut entrer un prtocole pour valider une url externe dans CakePHP.

Solutions :

1) tu passes par un lien normal (<a></a>), ce n'est pas parce qu'il y a des helpers qu'il faut tout le temps les utiliser. Ils ne sont que la pour aider lorsque l'on doit formatter une url avec un tableau controller/action/paramêtres. Utiliser la balise directement serait plus pratique, plus efficace et plus rapide en terme de traitement de la page, ça fera ça de moins à générer au chargement de la page html.

2) utiliser la règle de validation donnée plus haut et forcer l'utilisateur à mettre http://.

Grafikart, il y a 12 ans

Pas de http:// sur ton lien

sylvain, il y a 12 ans

OK mais rien a changé en choisissant le lien a href basique

#Marche Pas :
<a href="<?=$contact'Contact']'url'];?>"><?=$contact'Contact']'projetname']; ?></a>
ca me donne un lien incluant mon domaine, http://www.mondomain.fr/lorem.fr

La doc dit ceci pour le helper Html->link

Creates an HTML link.  
If $url starts with "http://" this is treated as an external link.
Else, it is treated as a path to controller/action and parsed with the HtmlHelper::url() method.

Donc il faut ajouter manuellement le http si on a pas fait de validation, je trouve tout ca compliqué pour faire un lien.
D'autant plus que la je pense que c'est Cake qui complique mon affaire

Et la ou ca pose probleme, c'est que meme si je fais un simple a href, ça m'ajoute quand meme la base_url de mon domaine

sylvain, il y a 12 ans

Bon j'en ai eu marre , j'ai mis ça par défaut

<?php echo $this->Html->link($contact'Contact']'projetname'], 'http://'.$contact'Contact']'url']) ; ?>

C'est peut etre crado mais ça marche. Il vais ajouter un test afin de vérifier que http est présent ou non.

J'aimerais bien savoir le pourquoi et comment désactiver ce comportement

Airday, il y a 12 ans

Salut as-tu essayer avec $this->Html->url() ?

<a href="<?php echo $this->Html->url($contact'Contact']'url'])?>"></a>
sylvain, il y a 12 ans

C'est pareil, des qu'ils s'agit d'une url externe , car préfixe meme avec url

Airday, il y a 12 ans

Ok, fait simplement

<a href="<?php echo 'http://'.$contact'Contact']'url'] ?>"> BLA BLA BLA</a>

n'utilise pas link() dans ce cas là, pour gagner en performance ;)

Maenhyr, il y a 12 ans

Je ne pense pas que vous alliez dans la bonne direction. D'après la convention, un url est composée d'un protocole, d'un domaine, d'actiond et de paramêtres. C'est la raison pour laquelle les développeurs de CakePHP forcent l'ajout de ce protocole pour valider une url.

Vous essayez de résoudre un problème du model en le solutionnant dans la Vue et ce n'est pas bon. Tu devrais plutôt bloquer la validation du champ avant l'eregistrement à mon avis.

sylvain, il y a 12 ans

Ou dans le beforesave , j'ajoute le protocole ?
ca me gene de demander a l'utilisateur cette info, parce que ca n'a aucun interet sauf technique

Maenhyr, il y a 12 ans

si tu es sûr qu'il n'y aura que des url en http:// tu peux le faire dans le beforeSave mais je serais toi, je ne m'embeterais pas et je mettrais juste la validation. le protocole n'est pas un élément super compliqué pour un utilisateur, même basique. Surtout si tu lui demande son url, ça signifie qu'il a un minimum de background technique.