J'essaie d'utiliser l()
pour obtenir quelque chose comme <a href='#' ...>
, à des fins d'appel ajax. /programming/1698453/drupal-creating-anchor-only-link-with-l est très proche de la bonne chose - utilisez une option dans l()
like 'fragment' => 'foo'
pour produire un lien comme <a href='#foo'...>
- mais je suis essayer d'obtenir un «#» propre. Y a-t-il un moyen de le faire, ou devrais-je simplement mettre quelque chose dans le fragment et ne pas m'en inquiéter?
la source
javascript:void(0)
javascript:
etjavascript:void(0)
sont les mêmes. La seule différence est "void (0)" :)Temps de quiz pop de transtypage PHP! (Divulgation complète: je n'ai pas gagné dans notre bureau).
Comme
l()
nous l'avons déjà souligné, voici le code en ce qui nous concerne:Voici donc la question: quelle valeur transforme en une chaîne vide mais passe la suivante?
La réponse est
FALSE
:!Donc, nous pourrions essayer ceci:
Ce qui nous donne:
Heureusement, nous pouvons supprimer cette barre oblique en passant
external => TRUE
:Ce qui nous donne:
Boom. Les choses que nous faisons pour éviter de concaténer manuellement les chaînes html, hein?
Post-scriptum:
Je ne suis pas sûr que je recommanderais d'imprimer un lien comme celui-ci à partir de php dans des circonstances normales. Sans votre javascript, tout ce lien va le faire sauter votre utilisateur en haut de la page ( ce qui, à ma légère surprise, est un comportement spéculé ). Il devrait probablement pointer quelque part qui fonctionne sans javascript.
Si le lien n'a vraiment de sens qu'avec javascript (comme les contrôles pour un diaporama js uniquement ou quelque chose comme ça), je pense qu'il est préférable d'ajouter le lien vers la page avec javascript. Alternativement, si vous voulez vraiment le mettre dans votre source, assurez-vous que c'est
display:none
par défaut. Drupal a la.js
classe sur le html pour ensuite l'afficher lorsque javascript est autour.la source
Malheureusement, la
url()
fonction (quil()
appelle en interne) annule à peu près toute chance de fragment vide avec les lignes suivantes:Il vérifie que le fragment n'est pas une chaîne vide, c'est ce que vous devez passer pour obtenir le nettoyage
#
. Je pense que la solution la plus simple serait de choisir l'id d'un élément approprié quelque part dans la page et de l'utiliser à la place pour le fragment (oujavascript:void
comme Sithu l'a mentionné).Cependant ... la manière la plus accessible (et par la suite, dans de nombreux pays, la voie légale; pensez à l' article 508 aux États-Unis, au DDA au Royaume-Uni, etc.) serait de fournir le contenu qui est chargé / ajusté par votre lien sur une page distincte et utilisez l'URL de cette page comme href du lien à la place. Vous utiliseriez alors javascript pour empêcher l'événement sur le lien de rediriger réellement la page pour les navigateurs qui l'ont activé.
De cette façon, vous avez du contenu de secours pour les utilisateurs sans javascript, vous restez légal et vous gardez tout le monde et leur chien heureux :)
la source
print drupal_json_output($output)
dans ma page d'appel ajax.Vous ne pouvez pas utiliser propre
#
.Mais il est possible d'ajouter
space symbol
après#
:la source
Je viens d'avoir le même problème, mais aucune des solutions n'était satisfaisante, alors j'ai trouvé le mien:
Cela produit un nettoyage
#
la source
<a href="# ">link</a>
pour moi.J'utiliserais plutôt le type de rendu html_tag car je pense que le lien de rendu reçoit une attention particulière de Drupal. L'inconvénient étant qu'il n'y a pas de fonction de raccourci, nous devrons donc utiliser un tableau de rendu:
la source
C'est essentiellement la même réponse que j'ai postée ici ... La définition
fragment
d'un espace unique se convertira en un#
, et$current_path
est incluse car sinon le lien sera simplement défini sur auwww.example.com/#
lieu dewww.example.com/current-page#
:la source